zoukankan      html  css  js  c++  java
  • 云上  centos 搭建 NFS服务器搭建与配置

    NFS服务器搭建与配置

    搭建背景

    项目已经上线了,最初架构没有文件服务器一说,因此静态资源都是放在了本地目录里

    上线后又增加了一台服务器做了负载均衡, 这样的话用户在两台服务器之间上传下载文件是一定无法访问到的,有可能存储到A 也有可能存储到B ,有可能访问A有可能访问B ;

    客户又不想再买文件服务器,那么只能做一个文件共享了; 通读下文后再进行配置

    https://cloud.tencent.com/developer/article/1008142

    https://zhuanlan.zhihu.com/p/81752517

    服务器A  服务器B 

    环境说明:

    主机名

    操作系统版本

    IP地址

    说明

    centos7

    centos7

    172.27.9.181

    NFS服务器

    web

    centos7

    172.27.9.17

    客户端

    ubuntu

    Ubuntu 14.04.5

    172.27.9.227

    客户端

    ubuntu02

    Ubuntu 16.04.5

    172.27.34.37

    客户端

    服务端配置

    1.关闭防火墙

    [root@centos7 ~]# systemctl stop firewalld.service
    [root@centos7 ~]# systemctl disable firewalld.service
    [root@centos7 ~]# firewall-cmd --state
    not running

    2.关闭selinux

    临时关闭

    [root@centos7 ~]# setenforce 0

    永久关闭

    [root@centos7 ~]# sed -i 's/^ *SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    重启后配置生效

    [root@centos7 ~]# sestatus 
    SELinux status:                 disabled

    3.服务端安装NFS软件

    [root@centos7 /]# yum -y install  nfs-utils

    4.编辑参数exports

    [root@centos7 /]# view /etc/exports
    /backup 172.27.34.0/24(rw,sync,no_root_squash)
    /backup 172.27.9.0/24(rw,sync,no_root_squash)

    表示允许172.27.34.0和172.27.9.0两个网段的服务器访问,若对所有ip地址都可以访问则可设置为*:

    /backup  *(rw,sync,no_root_squash)

    若要指定特定ip,配置如下:

    /backup  172.27.9.17(rw,sync,no_root_squash) 172.27.9.227(rw,sync,no_root_squash) 172.27.34.37(rw,sync,no_root_squash)

    典型参数说明

    ro:共享目录只读
    rw:共享目录可读可写
    all_squash:所有访问用户都映射为匿名用户或用户组
    no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
    root_squash(默认):将来访的root用户映射为匿名用户或用户组
    no_root_squash:来访的root用户保持root帐号权限
    secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
    insecure:允许客户端从大于1024的tcp/ip端口连接服务器
    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
    async:将数据先保存在内存缓冲区中,必要时才写入磁盘
    wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
    no_wdelay:若有写操作则立即执行,应与sync配合使用
    subtree_check :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
    no_subtree_check(默认) :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率

    no_all_squash和root_squash为默认设置,前者表示客户端访问用户先与服务器端本机用户匹配,匹配失败后再映射为匿名用户或用户组,后者表示root用户也映射为匿名用户或用户组。

    5.新建共享目录并修改权限

    [root@centos7 backup]# mkdir /backup
    [root@centos7 backup]# chmod -R 777 /backup/

    6.启动服务并设置为开机启动

    [root@centos7 /]# systemctl enable rpcbind.service
    [root@centos7 /]# systemctl enable nfs-server.service
    [root@centos7 /]# systemctl start rpcbind.service
    [root@centos7 /]# systemctl start nfs-server.service

    7.加载并查看配置

    加载配置

    [root@centos7 ~]# exportfs -r

    查看

    [root@centos7 /]# exportfs 
    /backup         172.27.34.0/24
    /backup         172.27.9.0/24
    [root@centos7 /]# exportfs -v
    /backup         172.27.34.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    /backup         172.27.9.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

    客服端配置

    1.安装nfs软件包

    centos:

    [root@web /]# yum -y install nfs-utils

    ubuntu:

    root@ubuntu:/# apt-get install nfs-common -y

    2.新建挂载点

    [root@web /]# mkdir /nfs

    3.检查共享目录

    [root@web nfs]# showmount -e 172.27.9.181
    Export list for 172.27.9.181:
    /backup 172.27.9.0/24,172.27.34.0/24

    4.挂载共享目录

    [root@web nfs]# mount -t nfs 172.27.9.181:/backup /nfs

    s

    5.开启自动挂载

    centos和ubuntu配置相同

    [root@web ~]# view /etc/rc.local
    mount -t nfs 172.27.9.181:/backup /nfs
    [root@web ~]# chmod 755 /etc/rc.local

    测试

    查看、新建和删除文件

    NFS服务器搭建完成,测试正常。

    参考https://cloud.tencent.com/developer/article/1501332

    遇到问题1:

    #9.卸载nfs
     #1.正常卸载
    [root@backup-41 ~]# umount /data/w/
     #2.强制卸载
    [root@backup-41 ~]# umount -lf /data/w/


    配置过程中会涉及到的问题说明:

    1.修改了/etc/exports,并不需要重启NFS服务,只要用exportfs重新扫描一次/etc/exports,并且重新加载即可。

    exportfs-a        全部挂载或卸载/etc/exports的设定

    exportfs-r        重新挂载/etc/exports里面的设定,也同步更新/etc/exports和/var/lib/nfs/xtab里面的内容

    exportfs-u        卸载某一目录

    -v 参数表示可视化显示

    常用exportfs -rv     # 重新export一次

             exportfs -au     # 全部卸载

    2. 可以给多个客户端不同的授权,如

    /home192.168.2.11(rw,sync,no_root_squash,no_all_squash)

    /home192.168.2.7(ro,sync)

    服务端端执行exportfs -rv 即可生效。【注:客户端也需要重新挂载才能看到起作用】

    3.文件系统无法卸载时候,用fuser-m -v /PATH/TO/FILES查看哪个用户在访问。

    4.客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:

    mount -tnfs 192.168.2.10:/home /files  -oproto=tcp -o nolock

    5.如果有客户端通过RPC连接在服务器上,那么主机想要关机是不可能的。因此如果确实需要关机,请先停止nfs-utils、rpcbind服务。



    解决umount.nfs: /data: device is busy 问题

    有时候我们需要umount某个挂载目录时会遇到如下问题:

    1
    2
    [root@localhost /]# umount /data/
    umount.nfs: /data: device is busy

    通过这条命令查看:

    1
    2
    3
    4
    [root@localhost /]# fuser -m -v /data/
                         用户     进程号 权限   命令
    /data/:              root       2798 ..c.. bash
                         root       2996 ..c.. su

    -v 表示 verbose 模式。进程以 ps 的方式显示,包括 PID、USER、COMMAND、ACCESS 字段

    -m 表示指定文件所在的文件系统或者块设备(处于 mount 状态)。所有访问该文件系统的进程都被列出。

    如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。

    1
    2
    3
    4
    [root@localhost /]# kill -9 2798
    [root@localhost /]# kill -9 2996
    [root@localhost /]# umount /data/
    [root@localhost /]#
     

    解决clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) 问题的过程...

    https://blog.csdn.net/weixin_30270889/article/details/97045168

    问题起因:

    在配置好一台NFS服务器,建立好分享目录,刷新配置以后,在另一台客户机中使用showmount -e 出现报错:

    clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

    问题原因:

    服务端的防火墙上默认没有开启nfs服务相应的端口

    解决办法:

    1.简单粗暴地关闭防火墙

    systemctl stop firewalld

    如果开启了iptables的话,也是一样的,iptables的策略里也默认不会为nfs服务开启需要的端口

    systemctl stop iptables

    2.在防火墙上开启端口

    在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:

    1. portmap 端口 111 udp/tcp;
    2. nfsd 端口 2049 udp/tcp;
    3. mountd 端口 "xxx" udp/tcp
    系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯,我们可以通过编辑/etc/services 文件为 mountd指定一个固定端口:
    # vim /etc/services
    在末尾添加
    mountd 1011/udp
    mountd 1011/tcp
    wq退出保存该文件


    # stopsrc -s rpc.mountd
    # startsrc -s rpc.mountd
    # exportfs -a
    # rpcinfo -p Hostname
    现在我们会发现 mountd已经和端口 1011绑定了。

    另外,nfs中需要通讯的服务还有 rpc.lockd和 rpc.statd,其中对lockd我们可以用类似的方法来指定固定端口,
    # vim /etc/services
    添加
    lockd 35000/ucp
    lockd 35000/tdp


    # stopsrc -s rpc.lockd
    # startsrc -s rpc.lockd
    # exportfs -a
    nfs客户端mount文件系统
    # rpcinfo -p Hostname

    但 rpc.statd无法通过该方法来指定端口,它只能使用随机端口,如有必要,在防火墙上要根据下面命令的显示来开放随机端口:

    # no -a |grep ephemeral
    tcp_ephemeral_high = 65535
    tcpp_ephemeral_low = 32768
    udp_ephemeral_high = 65535
    udp_ephemeral_low = 32768

    当然也可以不开放 rpc.statd需要的随机端口,带来的影响就是如果 nfs连接中断(比如server或client宕掉了),系统将无法通过statd来恢复连接中断前的状态,而必须重新 mount该nfs文件系统。

     
    
    
  • 相关阅读:
    (转载)Rime输入法—鼠须管(Squirrel)词库添加及配置
    (转载)Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)
    (转载)WinCC 卸载后 Simatic Shell 的删除
    (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
    (转载)一张表搞清楚西门子S7系列标准DB块与优化DB块
    (转载)Navicat Premium 12.1.16.0安装与激活
    (转载)MySQl数据库-批量添加数据的两种方法
    (转载)用C#实现MySQL建库及建表
    设置MYSQL数据库编码为UTF-8
    [设计模式]工厂方法模式(Factory Method)
  • 原文地址:https://www.cnblogs.com/Amos-Turing/p/13838816.html
Copyright © 2011-2022 走看看