NFS

一、NFS简介


01 为什么使用NFS

02 RPC服务知识概念介绍说明,以及RPC服务存在价值

03 NFS工作原理

当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程大致如下:

1) 首先用户访问网站程序,由程序在NFS客户端发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2) NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)
3) 此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。
4) NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作。因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务(rpcbind服务)才能获取到NFS服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务(rpcbind服务)询问才能找到正确的端口。

二、部署

01 安装

NFS:全名nfs-utils
rpcbind

yum install -y nfs-utils rpcbind

查看命令属于哪个包

[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
 rpcbind-0.2.0-12.el6.x86_64
 nfs-utils-1.2.3-70.el6_8.2.x86_64

02启动服务

 启动服务需要先启动rpcbind然后再启动NFS

 启动rpcbind

[root@nfs01 ~]# /etc/init.d/rpcbind status
rpcbind is stopped
[root@nfs01 ~]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@nfs01 ~]# rpcinfo -p localhost
   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

 启动NFS

[root@nfs01 ~]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]

查看rpcbind和nfs对应情况

[root@nfs01 ~]# rpcinfo -p localhost
    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
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  57916  mountd
    100005    1   tcp  42966  mountd
    100005    2   udp  61298  mountd
    100005    2   tcp  47732  mountd
    100005    3   udp  51887  mountd
    100005    3   tcp  14717  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  46875  nlockmgr
    100021    3   udp  46875  nlockmgr
    100021    4   udp  46875  nlockmgr
    100021    1   tcp  19562  nlockmgr
    100021    3   tcp  19562  nlockmgr
    100021    4   tcp  19562  nlockmgr

查看状态

[root@nfs01 ~]# netstat -plunt | grep rpcbind
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      25595/rpcbind       
tcp        0      0 :::111                      :::*                        LISTEN      25595/rpcbind       
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               25595/rpcbind       
udp        0      0 0.0.0.0:754                 0.0.0.0:*                               25595/rpcbind       
udp        0      0 :::111                      :::*                                    25595/rpcbind       
udp        0      0 :::754                      :::*                                    25595/rpcbind

开机自启动

[root@nfs01 ~]# chkconfig |grep 3:on
crond              0:off    1:off    2:on    3:on    4:on    5:on    6:off
network            0:off    1:off    2:on    3:on    4:on    5:on    6:off
nfslock            0:off    1:off    2:off    3:on    4:on    5:on    6:off
rpcbind            0:off    1:off    2:on    3:on    4:on    5:on    6:off
rpcgssd            0:off    1:off    2:off    3:on    4:on    5:on    6:off
rsyslog            0:off    1:off    2:on    3:on    4:on    5:on    6:off
sshd               0:off    1:off    2:on    3:on    4:on    5:on    6:off
sysstat            0:off    1:on    2:on    3:on    4:on    5:on    6:off

03 NFS服务端配置过程
挂载列表的配置文件/etc/exports
man exports查看帮助

参数

参数名字                                                                                      参数用途
 rw  read-write,表示可读写权限
 ro  read-only,表示只读权限
 async  (异步)写入时数据会先写到内存缓冲区,只到硬盘有空挡才会再写入磁盘,这样可以提升写入效率,风险为若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池加UPS,AB(双路电源)不间断电源)
 no_root_squash  访问NFSserver共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用。如果是root则保持root权限
 root_squash  如果访问NFSserver共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份,如果是root压缩为匿名用户。
 all_squash  

不管访问NFSserver共享目录的用户身份如何,它的权限都将被压缩成匿名用户(nfsnobody),同时它的UID和GID都会便哼nfsnobody账号身份,在早期多个NFS客户端同时读写NFSserver数据时,这个参数是很有用的
1) 确保所有客户端服务器对NFS共享目录具备相同的用户访问权限
a. all_squash把所有客户端都压缩成固定的匿名用户(UID相同)
b. 就是anonuid,anongid指定的UID和GID的用户
2)所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)

 anonuid  

指定的是匿名用户的UID或GID数字
所有服务器上面,匿名用户(nfsnobody rsync www)uid和gid
参数以anon*开头即只anonymous匿名用户,这个用户UID设置值通常为nfsnobody的UID值,当然也可以额自行设置这个UID值。但是,UID必须存在于/etc/passwd中,在多NFS Clients时,如多台webserver共享一个NFS目录,通过这个参数可以使得不同的NFSclients写入的数据对所有NFS clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可

 anongid  同anonuid,却比就是把UID换成GID

重启生效

[root@nfs01 ~]# /etc/init.d/nfs reload

查看是否生效

[root@nfs01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

本地测试

[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@nfs01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3          6.8G  1.5G  5.0G  23% /
tmpfs              242M     0  242M   0% /dev/shm
/dev/sda1          190M   33M  147M  19% /boot
 172.16.1.31:/data  6.8G  1.5G  5.0G  23% /mnt

授权

[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/
[root@nfs01 ~]# ll /data/ -d
drwxr-xr-x. 6 nfsnobody nfsnobody 4096 Mar  9 16:06 /data/

卸载

[root@nfs01 ~]# umount /mnt/
 [root@nfs01 ~]# df
 Filesystem     1K-blocks    Used Available Use% Mounted on
 /dev/sda3        7116844 1531056   5217612  23% /
 tmpfs             246972       0    246972   0% /dev/shm
 /dev/sda1         194241   33770    150231  19% /boot

客户端挂载测试

  [root@backup ~]# mount -t nfs 172.16.1.31:/data /data
  [root@backup ~]# df -h
  Filesystem         Size  Used Avail Use% Mounted on
  /dev/sda3          6.8G  1.5G  5.0G  23% /
  tmpfs              242M     0  242M   0% /dev/shm
  /dev/sda1          190M   33M  147M  19% /boot
  172.16.1.31:/data  6.8G  1.5G  5.0G  23% /data

开机自启动检查

 [root@nfs01 ~]# chkconfig | awk '$1~/nfs$|rpcbind/'
  nfs                0:off    1:off    2:off    3:off    4:off    5:off    6:off
  rpcbind            0:off    1:off    2:on    3:on    4:on    5:on    6:off

 小结

rpcbind启动必须在NFS之前
1  创建刚想目录/data

mkdir /data

2 修改配置文件 /etc/exports

 [root@nfs01 ~]# cat /etc/exports
  # share /data
  /data 172.16.1.0/24(rw,sync)

 3 平滑重启NFS(配置文件一改, 就必须重启服务)

/etc/init.d/nfs reload

4 服务端自我检查

showmount -e 172.16.1.31

5 服务端 挂载测试

mount -t 172.16.1.31:/data /mnt

6 加入开机自启动

chkconfig nfs on
chkconfig rpcbind on

三、排查故障
1、前提,NFS原理及部署过程
2、先在客户端的排查

 ping server_ip
 telnet server_ip 111
 showmount -e server_ip
 mount

 /proc/mounts 有挂载信息,就强制卸载即可

原文地址:https://www.cnblogs.com/augustyang/p/10131920.html