一、简介
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。
RPC,基于C/S模型。程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节,甚至可以请求对方的系统调用
二. 优缺点
NFS 优点:
- 将常用的数据放在一台可以通过网络访问的服务器上,以此来节省 client 本地存储空间
- 部署简单快捷,上手容易
- 维护简单
NFS 缺点:
- 容易发生单点故障,一旦 server 宕机,那么所有的 client 就访问不到数据了
- 因为后端只有一台 server,在高并发情况下 server 端容易出现性能瓶颈
- NFS 数据是明文传输,而且不会对数据完整性做验证,所以安全性较差(建议在局域网内使用)
三、原理
NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。
具体过程如下:
1)本地用户要访问nfs服务器中文件,先向内核发起请求,内核处理调用nfs模块及rpc client
2)rpc client向rpc server发起连接
3)在连接之前,NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口
4)完成连接,接受访问请求
5) nfs应用程序向内核发起请求,
6) 内核调用文件系统,然后client端通过获取的NFS端口来建立和server端的NFS连接并进行数据的传输。
三、安装配置以及验证
3.1 server端配置
1 server端 安装NFS和rpc,默认已安装
2 启动服务
a.启动nfs服务
执行systemctl restart nfs.service
查看服务的状态,systemctl status nfs.service
b 启动rpcbind服务
执行systemctl restart rpcbind.service
查看服务的状态,systemctl status rpcbind.service
C 配置共享文件,编辑配置文件
创建一个文件夹,放一个文件,例如message
[root@gaoji-zyk-10-8-93-70 ~]# mkdir nfs
编辑 exports,默认没有这个文件实际是创建
[root@gaoji-zyk-10-8-93-70 ~]# vi /etc/exports (#地址填写是client端地址,也可以填写网段地址)
注释:
权限属性:
ro:只读
rw:读写
sync:同步,数据同步写到内存与硬盘中
async:异步,数据先暂存内存
root_squash: 将root用户映射为来宾账号
no_root_squash: 有root的权限,不建议使用
all_squash: 全部映射为来宾账号
anonuid, anongid: 指定映射的来宾账号的UID和GID
查看配置
[root@gaoji-zyk-10-8-93-70 ~]# cat /etc/exports
/root/nfs 20.11.1.39(rw,sync,no_root_squash)
5 使用exports -raw生效 或者重启 system restart nfs 重启服务生效
3.2 client端配置
1 client端查看安装包,默认已安装
2 使用showmount命令查看共享服务目录
# showmount -e 20.11.1.3
3.3 client挂载共享目录,测试验证
[root@gaoji-10-8-93-235 ~]# mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,nodiratime,wsize=1048576,rsize=1048576,timeo=600 20.11.1.3:/root/nfs /tmp
如果客户端要卸载 NFS 挂载(挂载目录为/tmp)的话,使用如下命令即可
umount /tmp