14.1 NFS介绍
NFS用于在网络上共享存储
- NFS是Network File System的缩写
- NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本
- NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
- NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
NFS原理图
14.2 NFS服务端安装配置
服务端与客户端都需要安装nfs-util包
[root@axiang-02 ~]# yum install -y nfs-utils[root@axiang-03 ~]# yum install -y nfs-utils
新增配置文件(原来没有)
vim /etc/exports加入一行:/home/nfstestdir 192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
- 第一段为定义共享的目录
- 第二段为允许访问的IP或IP段
- 第三段即括号内容为权限选项
服务端启动
[root@axiang-02 ~]# mkdir /home/nfstestdir[root@axiang-02 ~]# chmod 777 !$ //方便实验chmod 777 /home/nfstestdir[root@axiang-02 ~]# systemctl start rpcbind[root@axiang-02 ~]# systemctl start nfs[root@axiang-02 ~]# systemctl enable rpcbind //开机启动[root@axiang-02 ~]# systemctl enable nfs //开机启动[root@axiang-02 ~]# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd //111端口即rpc监听端口
14.3 NFS配置选项
- rw 读写
- ro 只读
- sync 同步模式,内存数据实时写入磁盘
- async 非同步模式
- no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
- root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
- all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
- anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
客户端挂载
安装完不用设置,需要关闭防火墙。即使放行111端口。所以建议先把两边防火墙关掉。即可使用
[root@axiang-02 ~]# iptables -F 或者 systemctl stop firewalld[root@axiang-03 ~]# iptables -F 或者 systemctl stop firewalld[root@axiang-03 ~]# showmount -e 10.1.1.8Export list for 10.1.1.8:/home/nfstestdir 10.1.1.0/24[root@axiang-03 ~]# mount -t nfs 10.1.1.8:/home/nfstestdir /mnt[root@axiang-03 ~]# df -h10.1.1.8:/home/nfstestdir 18G 7.1G 11G 40% /mnt[root@axiang-03 ~]# cd /mnt[root@axiang-03 mnt]# touch 111.txt[root@axiang-03 mnt]# ll总用量 0-rw-r--r-- 1 mysql mysql 0 8月 23 15:49 111.txt
成功共享存储。且限定用户id为1000
[root@axiang-02 ~]# ll /home/nfstestdir/总用量 0-rw-r--r-- 1 mysql mysql 0 8月 23 15:49 111.txt[root@axiang-02 ~]# id mysqluid=1000(mysql) gid=1000(mysql) 组=1000(mysql)
14.4 exportfs命令
- exprotfs可以网络广播nfs下的磁盘操作
常用选项
- -a 全部挂载或者全部卸载
- -r 重新挂载
- -u 卸载某一个目录
- -v 显示共享目录
需要操作在服务端上
[root@axiang-02 ~]# vim /etc/exports再加入一行/tmp 10.1.1.9(rw,sync,no_root_squash) //这里不限制root用户[root@axiang-02 ~]# exportfs -arv exporting 10.1.1.9:/tmpexporting 10.1.1.0/24:/home/nfstestdir
- exportfs -arv 不用重启nfs服务就可以生效
客户端
[root@axiang-03 ~]# showmount -e 10.1.1.8Export list for 10.1.1.8:/home/nfstestdir 10.1.1.0/24/tmp 10.1.1.9[root@axiang-03 ~]# mount -t nfs 10.1.1.8:/tmp/ /mnt[root@axiang-03 ~]# vim /mnt/1[root@axiang-03 ~]# ls -l !$ls -l /mnt/1-rw-r--r-- 1 root root 25 8月 23 16:15 /mnt/1
14.5 NFS客户端问题
客户端文件属主属组nobody
问题:客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody。
解决方法1:由于NFS 4版本会有该问题。客户端挂载时加上 -o nfsvers=3 指定使用版本3模式即可
[root@axiang-03 ~]# mount -t nfs -o nfsvers=3 10.1.1.8:/tmp/ /mnt
解决方法2:客户端和服务端vim /etc/idmapd.conf,把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcidmapd服务。CentOS7为重启rpcbind服务