zoukankan      html  css  js  c++  java
  • 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  使修改生效

    君子务本,本立而道生
  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/00huajiang/p/11362799.html
Copyright © 2011-2022 走看看