1、NSF介绍
NFS,是Network File System的简写,即网络文件系统。网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。
nfs为什么需要RPC?
因为NFS支持的功能很多,不同功能会使用不同程序来启动,因此,NFS对应的功能所对应的端口无法固定。
端口不固定造成客户端与服务端之间的通信障碍,所以需要RPC来从中帮忙。
NFS启动时会随机取用若干端口,然后主动向RPC服务注册取用相关端口和功能信息,RPC使用固定端口111来监听来自NFS客户端的请求,并将正确的NFS服务端口信息返回给客户端,这样客户端与服务端就可以进行数据传输了。
2、NFS的工作流程
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。
所以无论客户端,服务端,需要使用NFS,必须安装RPC服务。
NFS的RPC服务,在Centos5下名为portmap,Centos6下名称为rpcbind。
3、安装nfs服务
[root@k8smaster ~]# systemctl restart rpcbind;systemctl status rpcbind #服务端必须安装rpcbind
[root@k8snode01 ~]# systemctl restart rpcbind;systemctl status rpcbind #客户端可以不安装rpcbind
[root@k8snode02 ~]# systemctl restart rpcbind;systemctl status rpcbind #客户端可以不安装rpcbind
[root@k8smaster ~]# systemctl restart nfs;systemctl status nfs #服务端必须安装nfs
[root@k8snode01 ~]# systemctl restart nfs;systemctl status nfs #客户端必须安装nfs
[root@k8snode02 ~]# systemctl restart nfs;systemctl status nfs #客户端必须安装nfs
[root@k8smaster ~]# mkdir /sharedir #创建挂载目录(建议和服务端同路径,便于统一管理)
[root@k8snode01 ~]# mkdir /sharedir #创建挂载目录(建议和服务端同路径,便于统一管理)
[root@k8snode01 ~]# mkdir /sharedir #创建挂载目录(建议和服务端同路径,便于统一管理)
[root@k8smaster ~]# chmod -R 777 /sharedir #权限设置
[root@k8smaster ~]# more /etc/exports #服务端NFS配置文件
/sharedir *(rw,sync,all_squash)
[root@k8smaster ~]# exportfs -rv #配置生效
exporting *:/sharedir
[root@k8smaster sharedir]# showmount -e #显示共享目录
Export list for k8smaster:
/sharedir *
[root@k8smaster sharedir]#
/sharedir - 为共享目录
* - 表示可访问客户端的IP或IP段(支持单个IP"192.168.1.0"、IP段"192.168.1.0/24"、通配符域名"*.qq.com"等)
rw - 表示读写权限
ro - 表示只读权限
sync(同步) - 请求或写入数据时,数据同步写入到NFS Server的硬盘后再返回
async(异步) - 请求或写入数据时,先返回请求,再将数据写入到内存和缓存中。此参数可以提升NFS性能,但是会降低数据安全,不建议使用
no_root_squash - 访问NFS Sever共享目录的用户如果是root的话,它对该共享目录就有root权限。避免使用
root_suqash - 对于访问NFS Server共享目录的用户如果是root的话,则它的权限被压缩成匿名用户,同时它的UID和GID会变成nobody或nfsbody
all_squash - 不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nobody或nfsnobody账号,在多个NFS客户端同时读写NFS Sever数据时,这个参数很有用
anonuid - 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nobody或nfsbody的UID值,当然我们也可以自行设置这个UID值,但是UID必须存在于/etc/passwd中。
anongid - 同anonuid,区别就是把uid换成gid
exportfs命令用法
-a 全部挂载或卸载
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 在屏幕输出详细信息
showmount 命令用法
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录
客户端挂载
执行挂载命令:
# 格式为:mount -t nfs hostname(orIP):服务端目录 本机目录
[root@k8snode01 ~]# mount -t nfs 192.168.23.100:/sharedir /sharedir
[root@k8snode02 ~]# mount -t nfs 192.168.23.100:/sharedir /sharedir
4、操作验证
在node1和node2上写入文件,在master上查看写入情况
[root@k8snode01 sharedir]# echo "node01" >node01.log #客户端写入文件
[root@k8snode01 sharedir]#
[root@k8snode02 sharedir]# echo "node02" >node02.log#客户端写入文件
[root@k8snode02 sharedir]#
[root@k8smaster sharedir]# ls -lrt #服务端查看文件
total 8
-rw-r--r-- 1 nfsnobody nfsnobody 7 Feb 19 22:19 node01.log
-rw-r--r-- 1 nfsnobody nfsnobody 7 Feb 19 22:19 node02.log
[root@k8smaster sharedir]# more node01.log
node01
[root@k8smaster sharedir]# more node02.log
node02
[root@k8smaster sharedir]#