NFS服务搭建用于实现共享磁盘

实例环境(centOs7):
三台服务器分别为:
192.168.2.12 节点1
192.168.2.13 节点2
192.168.2.15 共享点

1、在三台服务器上分别安装nfs服务

可以先用rpm -qa|grep nfs确认系统中是否有安装nfs服务,若没有则进行安装;
yum -y install nfs-utils
安装完成后再确认:

如图显示有nfs-utils和libnfsidmap说明正常安装

2、共享服务上配置

vim /etc/exports
添加 共享目录 节点IP(配置参数)
如:/share 192.168.2.13(rw,sync,no_root_squash,no_subtree_check)

  • 客户端常用的指定方式

    • 指定ip地址的主机:172.16.0.240
    • 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
    • 指定域名的主机:david.bsmart.cn
    • 指定域中的所有主机:.bsmart.cn
    • 所有主机:
  • 访问权限选项

    • 设置输出目录只读:ro
    • 设置输出目录读写:rw
  • 用户映射选项,参数如下:

    • ro 该主机对该共享目录有只读权限
    • rw 该主机对该共享目录有读写权限
    • root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
    • no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
    • all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户(nfsnobody)
    • no_all_squash 与all_squash取反(默认设置)
    • anonuid=XXX 将客户机上的用户映射成指定的本地用户ID的用户(UID=xxx)
    • anongid=XXX 将客户机上的用户映射成属于指定的本地用户组ID (GID=xxx)
    • sync 资料同步写入到内存与硬盘中,效率低,但可以保证数据的一致性
    • async 资料会先暂存于内存中,而非直接写入硬盘
    • insecure 允许从这台机器过来的非授权访问
    • subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
    • no_subtree_check 和上面相对,不检查父目录权限
    • wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
    • no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。若有写操作则立即执行,应与sync配合使用
    • hide 在NFS共享目录中不共享其子目录
    • no_hide 共享NFS目录的子目录
    • secure NFS通过1024以下的安全TCP/IP端口发送
    • insecure NFS通过1024以上的端口发送

3、共享服务器运行nfs服务并设置为开机启动

systemctl start nfs
systemctl enable nfs.service

4、节点1和节点2上进行挂载

  • 先创建挂载目录如:mkdir -p /share

  • 测试挂载,显示指定的(192.168.2.15 )NFS服务器上export出来的目录
    showmount -e 192.168.2.15

  • 进行挂载
    mount -t nfs 共享路径 本地路径 -o nolock
    其中共享路径为 共享服务器IP:共享路径
    例如:mount -t nfs 192.168.2.15:/share /share -o nolock

  • 如果有错误时,可以查看日志
    cat /var/log/messages | grep mount

  • 注意此时为临时挂载,在重启服务器后会失效,如果你需要重启服务器后还会生效,请要配置永久挂载
    vim /etc/fstab
    在末尾添加:
    192.168.2.15:/share /share nfs defaults 1 1

5、可以进行测试确认使用情况

6、取消挂载

umount /share
若出现"umount.nfs: /XXX: device is busy",查看占用进程用户:fuser -m -v /XXX/,杀死进程

7、一些命令

  • 重启nfs
    systemctl restart nfs

  • 启动nfs
    systemctl start nfs

  • 关闭nfs
    systemctl stop nfs

  • 设置开机启动nfs
    systemctl enable nfs

  • 查看NFS的运行状态
    nfsstat

  • 查看rpc执行信息,可以用于检测rpc运行情况
    rpcinfo

  • 显示指定的(192.168.2.15 )NFS服务器上export出来的目录
    showmount -e 192.168.2.15

9、防火墙相关

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

      1. portmap 端口 111 udp/tcp;
      1. nfsd 端口 2049 udp/tcp;
      1. mountd 端口 "xxx" udp/tcp
  • 其中系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯
    可以通过编辑/etc/services 文件为 mountd指定一个固定端口:

    • vim /etc/services
      在末尾添加:
      mountd 1011/udp
      mountd 1011/tcp
      
    • 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
    • rpcinfo -p Hostname
  • 但 rpc.statd无法通过该方法来指定端口,它只能使用随机端口,当然也可以不开放 rpc.statd需要的随机端口,带来的影响就是如果 nfs连接中断(比如server或client宕掉了),系统将无法通过statd来恢复连接中断前的状态,而必须重新 mount该nfs文件系统。

[NOTE]
实际操作中,我们可以先通过在共享服务器上输入rpcinfo -p 192.168.2.15确认当前端口情况,然后在防火墙上打开相应的端口。

posted @ 2020-10-20 11:15  灬夜露沁心灬  阅读(652)  评论(0编辑  收藏  举报