NFS简介
NFS服务及Network File System,用于在网络上共享存储,分为2,3,4三个版本,最新为4.1版本。NFS基于RPC协议,RPC为Remote Procedure Call的简写。
应用场景:用于A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
NFS架构及原理
- 首先服务器端启动RPC服务,并开启111端口
- 启动NFS服务,并向RPC注册端口信息
- 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
- 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
- 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输
NFS服务配置
安装 NFS 和 rpc
# 服务器端和客户端都要安装 yum install nfs-utils rpcbind -y # 检查是否安装成功 rpm -qa nfs-utils rpcbind
启动RPC
systemctl start rpcbind.service
systemctl enable rpcbind.service
# 看看有没有注册的端口
rpcinfo -p 127.0.0.1
启动NFS
systemctl start nfs
systemctl enable nfs
# 看看有没有注册的端口
rpcinfo -p 127.0.0.1
# 检查服务是否都已启动
netstat -lntup|egrep "rpc|nfs"
服务端配置nfs
vim /etc/exports
/data/public 10.10.0.0/16(rw,sync,insecure,all_squash,anonuid=1003,anongid=1003)
1)、授权网段或主机 a. 可以写网段:10.10.0.0/16 b. 可以写主机名:client.lab.com c. 可以写域:*.lab.com d. 可以所有,用【*】表示2)、访问权限配置 ro ->表示只读 rw ->表示读写3)、数据写入硬盘模式 async ->异步写入,将数据先保存在内存缓冲区中,必要时才写入磁盘 sync ->同步写入,将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;4)、客户端使用的端口 insecure ->允许客户端从大于1024的tcp/ip端口连接服务器; secure ->限制客户端只能从小于1024的tcp/ip端口连接服务器;5)、账户映射 首先安装完:nfs-utils 包后,会自动添加用户:nfsnobody,可以查看文件:/etc/passwd ;root_squash(默认) ->如客户端登陆操作的是root用户,nfs服务器会将来访的root用户映射为匿名用户或用户组:nfsnobody ,如果是rw权限,就要求nfsnobody 对共享的目录有rw权限; no_root_squash ->来访的root用户保持root帐号权限; all_squash ->无论访问共享目录的用户身份如何,其权限将被镇压为匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份 no_all_squash(默认) ->访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组: nfsnobody;anonuid ->匿名用户UID设置值,可自行设置,但必须在/etc/passwd中存在;在多台客户端共享一个nfs目录时,可通过此参数使得不同的客户端写入的数据保持相同的用户权限 anongid ->匿名用户组6)、其它参数 wdelay(默认) -> 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率; no_wdelay ->若有写操作则立即执行,应与sync配合使用; subtree_check(默认) ->若输出目录是一个子目录,则nfs服务器将检查其父目录的权限; no_subtree_check ->即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
客户端挂载
mount -t nfs 172.17.182.13:/home/appdata /home/mydata -o nolock,vers=3
开启客户端自动挂载
把挂载的命令放入/etc/rc.local中,以实现开机自动挂载
mount -t nfs 172.17.182.13:/home/appdata /home/mydata -o nolock,vers=3