一、NFS服务简介
1.1 什么是NFS
1) NFS是Network File
System的缩写及网络文件系统。
2) 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
3) NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网,
NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS。
1.2 为什么使得NFS进行数据存储
1) 多台服务器之间数据共享
2) 实现多台服务器之间数据的一致
1.3 NFS实现原理
1)0用户进程访问NFS客户端,使用不同的函数对数据进行处理
2) NFS客户端通过TCP/IP的方式传递给NFS服务端。
3) NFS服务端接收到请求后,会先调用portmap进程进行端口映射。
4) nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。
5) Rpc.mount进程判断客户端是否有对应的权限进行验证。
6) idmap进程实现用户映射和压缩
7) 最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。
8) rpc是一个远程过程调用,那么使用nfs必须有rpc服务
1.4 NFS客户端和NFS服务器通讯过程
首先服务器端启动RPC服务,并开启111端口
服务器端启动NFS服务,并向RPC注册端口信息
客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
二、安装服务端
2.1 检查检测是否安装NFS
service nfs status
2.2 安装NFS
yum –y install nfs-utils rpcbind
注:客户端与服务端都要安装,若已安装NFS则跳过。
三、服务端配置
3.1 创建一个共享目录
cd /user/local
mkdir test
注:共享目录、名称可以自定义,只要目录存在就OK。
3.2 NFS文件配置
3.2.1 编辑exports
vi /etc/exports
3.2.2 增加配置
/usr/local/test*(insecure,rw,async,no_root_squash)
注:/user/local/test为共享的目录,使用绝对路径;
*(insecure,rw,async,no_root_squash)为客户端的地址及权限,地址可以
是一个网段,一个IP地址或者是一个域名,域名支持通配符。
权限说明:
rw:readwrite,可读写;
ro:readonly,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目
录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来
说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥
有匿名用户权限;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值
3.2.3 使用之生效
exportfs -r
四、启动
4.1 启动服务
systemctl startrpcbind
systemctl start nfs
4.2 重启服务
systemctl restart rpcbind
systemctl restart nfs
五、挂载客户端
5.1 创建挂载目录
mkdir /data/tools/test
5.2 测试挂载
showmount -e 172.31.xx.xx
5.3 挂载
mount -t nfs 172.31.xxx.xx:/usr/local/test /data/tools/test
挂载验证,输入mount
六、测试
6.1 客户端生成一个文件
6.1.1 cd到挂载目录
cd /data/tools/test
输入echo "hello nfstest">>test
输入:ll
显示如下:
七、解除挂载
umount -t nfs 172.31.xxx.xx:/usr/local/test /data/tools/test