一、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数据时,这个参数是很有用的 |
anonuid |
指定的是匿名用户的UID或GID数字 |
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 有挂载信息,就强制卸载即可