Linux System Environment
[root@nfs ~]# cat /etc/redhat-release #==》系统版本
CentOS release 6.7 (Final)
[root@nfs ~]# uname –r #==》内核版本
3.10.0-862.el7.x86_64
[root@nfs ~]# uname -m #==》系统架构
x86_64
[root@nfs ~]# echo $LANG #==》系统字符集
en_US.UTF-8
[root@nfs ~]# rpm -qa | grep nfs-utils #==》NFS版本
nfs-utils-1.3.0-0.61.el7.x86_64
NFS简介
1、NFS 是 Network File System 的缩写及网络文件系统。 NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
2、NFS 系统和 Windows 网络共享、网络驱动器类似, 只不过 windows 用于局域网, NFS 用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统
3、还有其它网络文件系统,例如 FastDFS/glusterfs/HDFS/gpfs
NFS功能
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
NFS工作原理
1、用户进程访问 NFS 客户端,使用不同的函数对数据进行处理
2、NFS 客户端通过 TCP/IP 的方式传递给 NFS 服务端
3、NFS 服务端接收到请求后,会先调用 portmap 进程进行端口映射。
4、nfsd 进程用于判断 NFS 客户端是否拥有权限连接 NFS 服务端。
5、Rpc.mount 进程判断客户端是否有对应的权限进行验证。
6、idmap 进程实现用户映射和压缩
7、最后 NFS 服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。
NFS注意事项
1、NFS服务端需要安装两个软件包nfs-utils和rpcbind
2、NFS服务端先启动rpcbind再启动nfs-utils
3、NFS端口经常变动,rpcbind端口默认111
4、系统自动创建两个虚拟用户rpcuser和nfsnobody
5、NFS服务配置文件 /etc/exports,默认为空
6、NFS服务端和客户端都需要安装nfs-utils和rpcbind软件包,客户端只需要启动rpcbind服务
NFS配置文件/etc/exports参数说明
rw #==》读写权限
ro #==》只读权限
root_squash #==》当NFS客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户(不常用)
no_root_squash #==》当NFS客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员(不常用)
all_squash #==》无论NFS客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户(常用)
no_all_squash #==》无论 NFS 客户端使用什么账户访问,都不进行压缩
sync #==》同时将数据写入到内存与硬盘中,保证不丢失数据
async #==》优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid #==》配置 all_squash 使用,指定 NFS 的用户 UID,必须存在系统
anongid #==》配置 all_squash 使用,指定 NFS 的用户 UID,必须存在系统
一、配置阿里云yum源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
二、yum安装NFS
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-47.el7.x86_64
nfs-utils-1.3.0-0.61.el7.x86_64
三、创建NFS映射目录并授权虚拟用户nfsnobody
标注:nfsnobody虚拟用户是 NFS自动默认创建的虚拟用户
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody:nfsnobody /data
[root@nfs ~]# ls -ld /data/
drwxr-xr-x. 2 nfsnobody nfsnobody 6 May 23 16:35 /data/
四、写入NFS配置文件/etc/exports
注意:IP地址和小括号之间是没有空格
[root@nfs ~]# vim /etc/exports
/data 10.0.0.0/24(rw,sync,all_squash)
五、启动NFS服务并设置开机自启动
标注:CentOS 6 版本NFS启动时应该先启动rpcbind服务,但是CentOS 7 版本启动NFS服务同时会自动先启动rpcbind服务
[root@nfs ~]# systemctl start nfs-server.service
[root@nfs ~]# systemctl enable nfs-server.service
[root@nfs ~]# systemctl status nfs-server.service
[root@nfs ~]# systemctl status rpcbind.service
六、检查NFS共享目录是否生效
[root@nfs ~]# showmount -e 10.0.0.70
Export list for 10.0.0.70:
/data 10.0.0.0/24
七、NFS客户端挂载NFS操作
注意:NFS客户端不需要启动NFS服务,只需要启动rpcbind服务即可
1、安装NFS软件包
[root@rsync ~]# yum -y install nfs-utils
2、启动rpcbind服务并设置开机自启动
[root@rsync ~]# systemctl start rpcbind.service
[root@rsync ~]# systemctl status rpcbind.service
[root@rsync ~]# systemctl enable rpcbind.service
3、检查NFS共享目录是否生效
[root@rsync ~]# showmount -e 10.0.0.70
Export list for 10.0.0.70:
/data 10.0.0.0/24
4、NFS挂载
[root@rsync ~]# mount -t nfs 10.0.0.70:/data /testdir
[root@rsync ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 59G 2.1G 57G 4% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 473M 116M 358M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
10.0.0.70:/data 59G 2.0G 57G 4% /testdir
[root@rsync ~]# touch /testdir/1.txt
[root@rsync ~]# ls -l /testdir/
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Aug 29 16:04 1.txt
5、方法一:开机自动挂载NFS
[root@rsync ~]# cp /etc/rc.d/rc.local{,.bak}
[root@rsync ~]# echo 'mount -t nfs 10.0.0.70:/data /testdir' >> /etc/rc.local
[root@rsync ~]# tail -1 /etc/rc.local
mount -t nfs 10.0.0.70:/data /testdir
[root@rsync ~]# chmod u+x /etc/rc.d/rc.local
6、方法二:开机自动挂载NFS(推荐使用)
[root@rsync ~]# vim /etc/fstab
10.0.0.70:/data /testdir nfs defaults 0 0
[root@rsync /]# tail -1 /etc/fstab
10.0.0.70:/data /testdir nfs defaults 0 0
7、NFS卸载
[root@rsync ~]# umount /testdir #==》正常NFS卸载
[root@rsync ~]#umount -lf /testdir #==》强制NFS卸载