NFS服务
一. 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架构及原理
1)首先服务器端启动RPC服务,并开启111端口
2)启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输
三.NFS服务配置
1.服务端配置NFS
安装rpcbind及nfs-utils
[root@localhost ~]# yum install -y nfs-utils rpcbind
编辑配置文件
[root@localhost ~]# mkdir /mnt/share //创建分享的目录
[root@localhost ~]# vi /etc/exports
/mnt/share 192.168.100.1/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
配置选项
l /mnt/share:为共享目录(若没有这个目录,请新建一个)。
l 192.168.100.0/24:可以为一个网段,一个IP,也可以是域名。域名支持通配符,例如,*.qq.com。
l rw 读写
l ro 只读
l sync 同步模式,内存数据实时写入磁盘
l async 非同步模式
l no_root_squash 客户端挂载NFS共享目录后,root用户不受约
束,权限很大
l root_squash 与上面选项相对,客户端上的root用户受到约束,
被限定成某个普通用户
l all_squash 客户端上所有用户在使用NFS共享目录时都被限定为
一个普通用户
l anonuid/anongid 和上面几个选项搭配使用,定义被限定用户
注:/mnt/share文件为要分享的目录,信任的主机为192.168.100.0/24这个网段,权限为读写,同步模式,限定所有者,限制uid及gid为1000
启动NFS服务并设置开机自启
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl enable nfs
注:启动NFS服务前需要先启动rpcbind
- 客户端挂载NFS
安装NFS服务
[root@localhost ~]# yum install -y nfs-utils
使用showmount命令查看
[root@localhost ~]# showmount -e 192.168.100.11
在客户端上挂载NFS
[root@localhost ~]# mount -t nfs 192.168.100.11:/mnt/share /mnt/
使用df-h查看是否成功
[root@localhost ~]# df -h
在mnt目录中创建测试文件
[root@localhost ~]# touch /mnt/wslinux.txt
提示权限不够
在服务器中修改权限
[root@localhost ~]# chmod 777 /mnt/share
再次创建
[root@localhost ~]# touch /mnt/wslinux.txt
ls-l查看是否成功
3. 命令exportfs
常用选项
l -a 全部挂载或者全部卸载
l -r 重新挂载
l -u 卸载某一个目录
l -v 显示共享目录
注:当改变/etc/exports配置文件后使用此命令挂载不需要重启NFS服务。
测试:
修改服务端配置文件
[root@localhost ~]# vi /etc/exports
/tmp/ 192.168.100.0/24(rw,sync,no_root_squash) //增加此行
在服务端执行
[root@localhost ~]# exportfs -arv
在客户端执行
[root@localhost mnt]# mkdir /alg
[root@localhost mnt]# mount -t nfs -o nolock 192.168.100.11:/tmp/ /alg/
注:-o nolock选项为不加锁 -t指定挂在类型为nfs
除此方式还可以将需要挂载的目录写入客户端的/etc/fstab文件中,挂载时只需要执行mount -a即可
[root@localhost mnt]# vi /etc/fstab
192.168.100.11:/tmp/ /alg nfs defaults,nolock 0 0 //增加此行
先卸载刚挂载的NFS
[root@localhost mnt]# umount /alg/
挂载
[root@localhost mnt]# mount -a
注:此方法是开机自动挂载NFS
因刚挂载的目录在服务端中设置为no_root_squash所以不会限制root用户即使用root用户创建文件时,跟在客户端本机创建一样
注:
l 客户端文件属主属组nobody
l NFS 4版本会有该问题
l 客户端挂载共享目录后,不管是root用户还是普通用户,创建新
l 文件时属主、属组为nobody
l 客户端挂载时加上 -o nfsvers=3
l 客户端和服务端都需要
l vim /etc/idmapd.conf //
l 把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启 rpcidmapd服务
四.实战案例
1.案例目标
(1)了解NFS服务的安装。
(2)了解NFS的配置与使用。
2.案例实施
2.1基础配置
修改两台主机名,nfs服务器为nfs-server,nfs客户端为nfs-client:
服务器
[root@localhost ~]# hostnamectl set-hostname nfs-server
[root@localhost ~]# bash
[root@nfs-server ~]#
客户端
[root@localhost ~]# hostnamectl set-hostname nfs-client
[root@localhost ~]# bash
[root@nfs-client ~]#
2.2安装NFS服务
1)双节点配置yum源
# mkdir /opt/centos/
# mount /dev/cdrom /opt/centos/
# mv /etc/yum.repos.d/* /media/
# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
2)双节点安装nfs-utils,rpcbind
[root@nfs-server ~]# yum install -y rpcbind nfs-utils
[root@nfs-client ~]# yum install -y rpcbind nfs-utils
2.3 NFS服务使用
1)在服务器上创建一个用于共享的目录
[root@nfs-server ~]# mkdir /mnt/share
2)编辑NFS服务的配置文件
[root@nfs-server ~]# vi /etc/exports
/mnt/share 192.168.100.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
3)生效配置
[root@nfs-server ~]# exportfs -r
4)服务器启动NFS服务
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
5)服务器查看可挂载目录
[root@nfs-server ~]# showmount -e 192.168.100.11
6)双端关闭防火墙及SElinux
# systemctl stop firewalld
# setenforce 0
7)在客户端进行共享目录的挂载
[root@nfs-client ~]# mount -t nfs 192.168.100.11:/mnt/share /mnt/
8)查看挂载情况
[root@nfs-client ~]# df -h
2.4验证NFS共享存储
1)在客户端节点/mnt目录下创建一个文件并计算MD5值
[root@nfs-client ~]# cd /mnt/
[root@nfs-client mnt]# ll
total 0
[root@nfs-client mnt]# touch ws.txt
[root@nfs-client mnt]# md5sum ws.txt
d41d8cd98f00b204e9800998ecf8427e ws.txt
回到服务器中进行验证
[root@nfs-server ~]# cd /mnt/share/
[root@nfs-server share]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:16 ws.txt
[root@nfs-server share]# md5sum ws.txt
d41d8cd98f00b204e9800998ecf8427e ws.txt
观察可以看出服务器与客户端文件一致