NFS

mac2022-06-30  26

一、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-utilsrpcbind

 

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/exportsman 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

相关资源:Ubuntu离线安装NFS的安装包
最新回复(0)