1.1 NFS是Network File System的缩写
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本,更新比较慢其实4.1是从2010年就开始使用。
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
2.1 构架原理图:
2.2 架构分析:
首先我们需要保证三台机器的数据是完全一致的;假如A机器跑了一个站点,三台机器做了负载均衡,如果A机器的负载很高,服务器就会自动把访问的调节到B和C机器,但是数据都在A上,如何才能让B和C机器访问到A机器上面的数据呢?
NFS就可以帮我们搞定这个事情,把A上面的数据共享给B或者C;也就是说你在任何一台服务器上面更新了数据,另外两台均可以马上看到此数据!
2.3 原理图:
NFS这个服务需要借助于RPC服务进行通信
3.1 需求:两台机器。zhdy-02为服务器,zhdy-03为客户端进行测试:
3.2 在服务端安装:
[root@zhdy-02 ~]# yum install -y nfs-utils rpcbind
在服务端配置:
[[email protected]02 ~]# vim /etc/exports
/home/nfssharedir 192.168.59.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/home/nfssharedir 为分享的目录;
后面的配置指定哪些机器;
括号内的授权指定机器哪些操作权限;
然后再次在服务端创建定义的目录和授权。
[[email protected]02 ~]# mkdir -p /home/nfssharedir
[[email protected]02 ~]# chown 777 /home/nfssharedir
在启动前,确认一下端口是否已经存在;
[root@zhdy-02 ~]# netstat -lntp
Active 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 2621/rpcbind
启动nfs,rpcbind
[root@zhdy-02 ~]# systemctl start nfs
其实当我们启动了nfs 我们发现rpc服务也自动启动了,当然我们也可以确认下:
[root@zhdy-02 ~]# ps aux | grep nfs
[root@zhdy-02 ~]# ps aux | grep rpc
添加开机启动nfs服务:
[root@zhdy-02 ~]# systemctl enable nfs
3.3 客户端配置;
[[email protected]03 ~]# yum install -y nfs-utils
[[email protected]03 ~]# showmount -e 192.168.59.130 //查看服务端的共享
如果不可以查看到服务端的共享,如何检查?
1. 确认服务端服务已经启动
2. 确认服务端和客户端的防火墙已经关闭:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
再次查看:
[[email protected]03 ~]# showmount -e 192.168.59.130
Export list for 192.168.59.130:
/home/nfssharedir 192.168.59.0/24
挂载服务器的硬盘到本地:
[[email protected]03 ~]# mount -t nfs 192.168.59.130:/home/nfssharedir /mnt/
[[email protected]03 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 41G 4.6G 37G 12% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.59.130:/home/nfssharedir 41G 4.4G 37G 11% /mnt
进入挂载的mnt目录:
[[email protected]03 mnt]# touch test.txt
[[email protected]03 mnt]# ls -l
总用量 0
-rw-r--r-- 1 mysql mysql 0 8月 23 16:41 test.txt
也许有个疑问?为什么授权用户和组是mysql呢?
[root@zhdy-03 mnt]# cat /etc/passwd
mysql:x:1000:1000::/home/mysql:/bin/bash
我们看到,我们设置的权限为anonuid=1000,anongid=1000,那么1000就是mysql。
4.1 权限选项详解: