NFS简介
NFS全称Network File system,主要是基于UDP/IP协议的应用,
其实现主要是采用远程过程调用RPC机制,提供一组与机器、操作系统以及底层传送协议无关的存取远程文件的操作,
最大的功能点就是通过网络,让不同的机器、操作系统可以共享彼此的文件。
NFS应用场景
NFS主要可以用在web网站中静态资源的存储,将静态资源整合在一起不仅可以减少磁盘空间的浪费而且可以保障数据一致性,
避免网页中静态资源不能访问的问题,也可以将重复性的文件整合在一个共享目录中。

image.png
nfs挂载原理

image.png
如上图所示:
1.NFS服务器设置好共享目录/nfs/data1或者/nfs/data2,其他可以访问NFS服务器的NFS客户端就可以将他们的目录挂载到共享目录,
这样就可以将web1-3的/data1挂载给/nfs/data1在三台web服务器分别可以看到data1下的所有数据。
2.NFS是通过网络实现服务端和客户端之间的数据传输,但是NFS服务器由于文件系统复杂,有些其他程序需要启动额外的端口并且都是随机的,
这样客户端和服务端之间的端口该如何确定,这时就需要远程过程调用RPC协议了,提供一组与机器、操作系统以及底层传送协议无关的存取远程文件的操作。
RPC和NFS的通讯
1.因为NFS对应端口不固定,客户端连接就需要对应的端口才能建立连接并传输数据,
RPC就是用来统一管理NFS端口的服务并且RPC对外的端口为111,
RPC会记录NFS端口信息,从而通过RPC实现NFS服务端与客户端沟通端口信息,并通知客户端可以连接到对应的端口。
2.启动服务时首先启动PRC服务,因为NFS服务启动会有注册端口信息,如果这时RPC服务未启动则无法记录端口信息,只能重新启动NFS服务。
NFS部署
NFS安装
NFS服务端安装
[root@nfs ~]# yum install nfs-utils rpcbind -y
NFS客户端安装
[root@nfs-client1 ~]# yum install nfs-utils -y
NFS配置文件
[root@nfs ~]# ll /etc/exports #配置文件为空
-rw-r--r--. 1 root root 0 Jun 7 2013 /etc/exports
[root@nfs ~]# man exports #man exports配置文件

image.png
[root@nfs ~]# cat /etc/exports #映射多个目录写多行
/data 10.0.0.0/24(rw,sync,root_squash,all_squash)
启动服务
nfs服务端
[root@nfs ~]# systemctl start rpcbind.service
[root@nfs ~]# systemctl enable rpcbind.service
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
nfs客户端启动
[root@nfs-client1 ~]# systemctl start nfs
[root@nfs-client1 ~]# systemctl enable nfs
[root@nfs-client2-17 ~]# systemctl start nfs
[root@nfs-client2-17 ~]# systemctl enable nfs
检查测试
nfs服务端检查
[root@nfs ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/data 10.0.0.0/24
nfs客户端测试
[root@nfs-client1 ~]# showmount -e 10.0.0.15
Export list for 10.0.0.15:
/data 10.0.0.0/24
[root@nfs-client2-17 ~]# showmount -e 10.0.0.15
Export list for 10.0.0.15:
/data 10.0.0.0/24

image.png
测试共享文件

image.png
NFS常用参数讲解
rw
允许在nfs卷中进行读写,不容许写可以使用‘ro’
sync
只有更改稳定后才会回复请求
root_squash no_root_squash
root用户映射和root用户不映射,客户端当前用户为root时是否映射为nfs服务端普通用户
all_squash
普通用户全映射
anonuid and anongid
使用userid来指定哪些用户可以操作共享目录
重启问题
如果通过restart进行NFS服务器重启,客户端写入数据就会出现卡顿问题,使用reload进行重新加载就会避免掉这种问题。