• NFS服务


    概述

    NFS(Network File System)即网络文件系统,在局域网内在操作系统间实现文件共享,使用mount命令将共享的文件系统挂载到指定挂载点,将NFS服务共享的文件系统作为本地文件系统使用。
    NFS 服务软件包:1、rpcbind ( CentOS 5.x 之前为 portmap,CentOS 6.x 之后 rpcbind )
             2、nfs-utils (提供 rpc.nfsd 及 rpc.mountd 等进程,exportfs、showmount等命令)

    NFS执行原理:

    NFS客户端请求NFS服务时,首先通过客户端rpcbind服务向服务端rpcbind服务请求服务端NFS服务的相关信息,获得相关信息后,NFS客户端向NFS服务端发起服务请求请求。
    NFS服务并没有提供数据传输的功能,而是通过使用RPC(Remote Procedure Call,远程过程调用)来实现。

    NFS服务为什么要配合rpcbind服务使用?

    一、NFS服务不同功能会启动不同进程,这些进程启用的端口号(tcp端口和udp端口)是随机的,而不是固定端口号。
    二、当NFS客户端发起服务请求时,无法获得NFS服务端部分进程的端口号,因此NFS选用rpcbind服务(默认TCP端口111)传递建立连接所需的信息。

    NFS服务执行过程:

    1、启动rpcbind服务,rpcbind服务使用tcp端口111与其他主机的rpcbind服务进行通信
    2、启动nfs服务,nfs服务会向rpcbind服务进行注册,并发送nfs服务端口等信息(因此rpcbind服务必须先于NFS服务启动)
    3、nfs客户端需要连接nfs服务器时,客户端nfs服务通过客户端rpcbind服务,从服务端rpcbind服务获得服务端nfs服务相关端口信息
    4、nfs客户端向nfs服务端发起服务请求,与nfs服务端建立连接(连接建立后,nfs服务使用RPC协议进行数据传输)

    NFS服务配置文件为/etc/exports,默认为空;服务默认属主属组nfsnobody,nfsnobody

    [root@nfs01 ~]$ vim /etc/exports
    /data        172.16.1.0/24(rw,async, all_squash,anonuid=1033)      #括号中参数的作用分别为:可读写,数据写入先磁盘缓存再写入硬盘,限制客户端使用默认nfs用户执行操作,指定nfs默认用户的uid(默认uid为65534) 
    #共享目录     允许使用共享目录主机的IP地址段及权限
    

    参数: 

    rw          可读写 read write
    ro           只读 read only
    sync           数据直接写到磁盘,不适用磁盘缓存,数据安全性高,读写速度较慢
    async         数据先写入缓存,再由缓存写入硬盘,数据安全性较低,读写速度快
    all_squash       不管客户端什么用户,到服务端都是nfsnobody #(squash 压制,抑制,限制)
    anonuid       匿名用户的UID,nfs默认使用uid为65534的nfsnobody账户
    anongid       匿名用户的GID,nfs默认使用uid为65534的nfsnobody账户组

    rpm -qa nfs-utils rpcbind        #查看是否安装软件包
    yum install -y nfs-utils rpcbind    #安装软件包nfs-utils rpcbind
    
    [root@nfs01 ~]$ systemctl start rpcbind.service      #启动rpcbind服务
    [root@nfs01 ~]$ systemctl enable rpcbind.service     #开机自启rpcbind服务
    
    [root@nfs01 ~]$ rpcinfo -p       #查看nfs服务启动前的rpc服务信息
    program vers proto port service
    100000 4 tcp 111 portmapper
    100000 3 tcp 111 portmapper
    100000 2 tcp 111 portmapper
    100000 4 udp 111 portmapper
    100000 3 udp 111 portmapper
    100000 2 udp 111 portmapper
    
    [root@nfs01 ~]$ systemctl start nfs      #启动nfs服务
    [root@nfs01 ~]$ systemctl enable nfs     #开机自启nfs服务
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
    [root@nfs01 ~]$ rpcinfo -p           #查看nfs服务启动后的rpc服务信息
    program vers proto port service
    100000 4 tcp 111 portmapper
    100000 3 tcp 111 portmapper
    100000 2 tcp 111 portmapper
    100000 4 udp 111 portmapper
    100000 3 udp 111 portmapper
    100000 2 udp 111 portmapper
    100024 1 udp 39420 status
    100024 1 tcp 14790 status
    100005 1 udp 20048 mountd
    100005 1 tcp 20048 mountd
    100005 2 udp 20048 mountd
    100005 2 tcp 20048 mountd
    100005 3 udp 20048 mountd
    100005 3 tcp 20048 mountd
    100003 3 tcp 2049 nfs
    100003 4 tcp 2049 nfs
    100227 3 tcp 2049 nfs_acl
    100003 3 udp 2049 nfs
    100003 4 udp 2049 nfs
    100227 3 udp 2049 nfs_acl
    100021 1 udp 36100 nlockmgr
    100021 3 udp 36100 nlockmgr
    100021 4 udp 36100 nlockmgr
    100021 1 tcp 33406 nlockmgr
    100021 3 tcp 33406 nlockmgr
    100021 4 tcp 33406 nlockmgr
    

    服务配置:

    服务端:
    [root@nfs01 ~]$ vim /etc/exports
    /data 172.16.1.0/24(rw,sync)          #以可读写,同步写入方式将data目录挂载到172.16.1.0/24网段的主机上
    [root@nfs01 ~]$ mkdir -p /data         #创建nfs服务目录
    [root@nfs01 ~]$ chown -R nfsnobody.nfsnobody /data         #修改nfs服务目录属主属组为nfsnobody(nfs服务默认用户),也可使用自建账户,使用自建账户需各服务器
    
    [root@nfs01 ~]# systemctl reload nfs     #nfs服务平滑重启
    [root@nfs01 ~]$ exportfs -r          #重新读取NFS服务配置信息
    #上两条命令作用相同,第一条服务重启会重启读取配置文件,第二条直接重新读取nfs配置文件
    
    [root@nfs01 ~]$ showmount -e           #查看共享目录
    Export list for nfs01:
    /data 172.16.1.0/24
    
    [root@nfs01 ~]$ cat /var/lib/nfs/etab     #挂载时详细配置参数文件
    /data	172.16.1.0/24(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,ro,secure,root_squash,no_all_squash)
    #以上为服务端挂载目录默认配置参数,配置文件/etc/exports中修改参数后,会同步到/var/lib/nfs/etab文件中。
    
    客户端
    [root@web01 ~]$ showmount -e 172.16.1.31              #查看nfs01的共享目录
    Export list for 172.16.1.31:
    /data 172.16.1.0/24
    [root@web01 ~]# mount -t nfs 172.24.184.31:/data /data      #将nfs共享目录挂载到/data目录下
    
    [root@web01 ~]# cat /proc/mounts |grep nfs             #客户端挂载NFS文件系统的详细信息
    nfsd /proc/fs/nfsd nfsd rw,relatime 0 0
    sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
    172.24.184.31:/data /data nfs4 rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.24.184.41,local_lock=none,addr=172.24.184.31 0 0
    

     

    客户端配置开机自启:

    方法一:编辑/etc/rc.local,CentOS 7中需给/etc/rc.d/rc.local文件添加x权限
    [root@web01 ~]$ ll /etc/rc.local 
    lrwxrwxrwx. 1 root root 13 8月 2 15:53 /etc/rc.local -> rc.d/rc.local
    
    [root@web01 ~]$ tail -1 /etc/rc.d/rc.local
    /usr/bin/mount -t nfs 172.16.1.31:/data /data     #在脚本或配置文件中使用命令的全路径格式
    [root@web01 ~]$ chmod +x /etc/rc.d/rc.local       #CentOS 7.X中,/etc/rc.d/rc.local文件默认无x权限,使用时需为其添加x权限
    
    方法二:编辑/etc/fstab,
    [root@web01 ~]$ tail -3 /etc/fstab 
    172.16.1.31:/data	/data	nfs	defaults,soft 0 0         #soft使得客户端与服务端连接超时(105s)后,停止连接
    172.16.1.31:/data	/data	nfs	defaults,intr 0 0         #intr使得hard在连接超时(105s)后停止连接
    172.16.1.31:/data	/data	nfs	defaults,hard,intr 0 0      #intr使得hard在连接超时(90s))后停止连接
    #/etc/fstab 中,defaults包括 rw、suid、dev、exec、auto、nouser and async

    NFS为网络文件系统,系统启动时读取/etc/fstab配置文件在网络服务启动之前,因此需其他服务(C6:netfs C7:remote-fs.target)配合才可通过/etc/fstab实现开机自启。

    systemctl start remote-fs.target          #启动remote-fs.target
    systemctl enable remote-fs.target          #开机自启remote-fs.target
    systemctl status remote-fs.target

    NFS服务默认用户修改:

    1、在NFS服务端及所有客户端创建具有相同uid的相同账户

    useradd -s /sbin/nologin -u 1033  -M   nfstest               #添加nfstest用户,uid=1033,shell为/sbin/nologin,不为用户创建家目录

    2、nfs服务端配置文件

    [root@nfs01 ~]# cat /etc/exports
    /data 172.24.184.0/24(rw,async,anonuid=1033,anongid=1033)     #anonuid指定nfs默认账户的uid,anongid指定nfs默认账户的gid,若只指定uid,gid将使用nfs服务默认gid(65534)
    

    3、nfs服务共享目录属主属组修改

    root@nfs01 ~]# chown -R nfstest.nfstest /data             #-R递归修改/data目录属主属组
    

    NFS服务优化

    客户端挂载优化:

    mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.31:/data  /data
    mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data  /data
    

    客户端卸载共享目录

    1、提示“umount.nfs4: /data: device is busy”,需要退出挂载目录再进行卸载
    2、nfs服务端宕机时,使用umount -lf /data 强制卸载


    NFS服务端内核优化:

    cat>>/etc/sysctl.conf<<eof
    net.core.wmem_default = 8388608 
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    eof
    

    linux修改内核参数后,需执行  sysctl -p  使修改生效

    君子务本,本立而道生
  • 相关阅读:
    问题14:如何拆分含有多种分隔符的字符串
    问题15:如何判断字符串a是否以字符串b开头或结尾
    问题16:如何调整字符串中文本的格式
    第三方支付公司之快钱
    js实现回调功能实例
    oracle查看未提交事务
    Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案
    oracle错误之未知的命令开头imp忽略了剩余行解决方案
    修改easyui日期控件只显示年月,并且只能选择年月
    数据库三范式大总结
  • 原文地址:https://www.cnblogs.com/00huajiang/p/11362799.html
Copyright © 2020-2023  润新知