1、虚拟机参考(VMwear版本:17.0.0)
使用本地PC环境的VMWare Workstation软件进行实操练习,镜像使用提供的CentOS-7-x86_64-DVD-2009,(注意:网卡需一张NAT即可)硬件资源如图3-1-1所示。
图3-1-1 硬件资源
节点规划:
IP | 主机名 | 节点 |
192.168.20.10 | nfs-server | NFS服务节点 |
192.168.20.20 | nfs-client | NFS客户端节点 |
表3-3-1 节点规划
2、介绍
NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。主要功能指的是共享文件。
为什么需要安装NFS服务?当服务器访问流量过大时,需要多台服务器进行分流,而这多台服务器可以使用NFS服务进行共享。(NFS服务是最基础的共享服务)
NFS应用场景,常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。
3、部署
1、基础配置
修改两个节点的主机名,第一台机器为nfs-server;第二台机器为nfs-client。命令如下:
nfs-server节点:
[root@nfs-server ~]# hostnamectl set-hostname nfs-server
[root@nfs-server ~]# hostnamectl
Static hostname: nfs-server
Icon name: computer-vm
Chassis: vm
Machine ID: 1d0a70113a074d488dc3b581178a59b8
Boot ID: 7285608fd50c4da886e94c6a33873ed9
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
nfs-client节点:
[root@nfs-client ~]# hostnamectl set-hostname nfs-client
[root@nfs-client ~]# hostnamectl
Static hostname: nfs-client
Icon name: computer-vm
Chassis: vm
Machine ID: 06c97bdf0e6c4a89898aa7d58c6be2cc
Boot ID: f07cf0f9d31e4b2185de0f8db7dd456b
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
2、安装NFS服务
nfs-client节点按照上一篇中的方法配置YUM源。(不熟练的小伙伴可以返回上一篇的FTP服务部署与使用,上面有配置yum源的详细步骤。)两个节点安装NFS服务。命令如下:
nfs-server节点:
[root@nfs-server ~]# yum -y install nfs-utils rpcbind
nfs-client节点:
[root@nfs-client ~]# yum -y install nfs-utils rpcbind
注意:安装NFS服务必须要依赖RPC,所以运行NFS就必须要安装RPC。
3、NFS服务使用
在nfs-server节点创建一个用于共享的目录,命令如下:
[root@nfs-server ~]# mkdir /mnt/test
编辑NFS服务的配置文件/etc/exports,在配置文件中加入一行代码,命令如下:
[root@nfs-server ~]# vi /etc/exports
[root@nfs-server ~]# cat /etc/exports
/mnt/test 192.168.20.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)
生效配置,命令如下:
[root@nfs-server ~]# exportfs -r
配置文件说明:
l /mnt/test:为共享目录(若没有这个目录,请新建一个)。
l 192.168.200.0/24:可以为一个网段,一个IP,也可以是域名。域名支持通配符,例如,*.qq.com。
l rw:read-write,可读写。
l ro:read-only,只读。
l sync:文件同时写入硬盘和内存。
l async:文件暂存于内存,而不是直接写入内存。
l no_root_squash:NFS客户端连接服务端时,如果使用的是root,那么对服务端共享的目录来说,也拥有root权限。显然开启这项是不安全的。
l root_squash:NFS客户端连接服务端时,如果使用的是root,那么对服务端共享的目录来说,拥有匿名用户权限,通常它将使用nobody或nfsnobody身份。
l all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端共享的目录来说,都拥有匿名用户权限。
l anonuid:匿名用户的UID(User Identification,用户身份证明)值,可以在此处自行设定。
l anongid:匿名用户的GID(Group Identification,共享资源系统使用者的群体身份)值。
nfs-server端启动NFS服务,命令如下:
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl start nfs
nfs-server端查看可挂载目录,命令如下:
[root@nfs-server ~]# showmount -e 192.168.20.10
Export list for 192.168.20.10:
/mnt/test 192.168.20.0/24
可以查看到共享的目录。
转到nfs-client端,在客户端挂载前,先要将服务器的SELinux服务和防火墙服务关闭,命令如下:
[root@nfs-client ~]# setenforce 0
[root@nfs-client ~]# systemctl stop firewalld
在nfs-client节点,进行NFS共享目录的挂载,命令如下:
[root@nfs-client ~]# mount -t nfs 192.168.20.10:/mnt/test /mnt/
无提示信息则表示成功,查看挂载情况。命令如下:
[root@nfs-client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 878M 17G 5% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 913M 0 913M 0% /dev/shm
tmpfs 913M 8.6M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 183M 0 183M 0% /run/user/0
/dev/sr0 4.1G 4.1G 0 100% /opt/centos
192.168.200.10:/mnt/test 5.8G 20M 5.5G 1% /mnt
可以看到nfs-server节点的/mnt/test目录已挂载到nfs-client节点的/mnt目录下。
4.验证NFS共享存储
在nfs-client节点的/mnt目录下创建一个abc.txt的文件并计算MD5值,命令如下:
[root@nfs-client ~]# cd /mnt/
[root@nfs-client mnt]# ll
total 0
[root@nfs-client mnt]# touch abc.txt
[root@nfs-client mnt]# md5sum abc.txt
d41d8cd98f00b204e9800998ecf8427e abc.txt
回到nfs-server节点进行验证,命令如下:
[root@nfs-server ~]# cd /mnt/test/
[root@nfs-server test]# ll
total 0
-rw-r--r--. 1 root root 0 Oct 30 07:18 abc.txt
[root@nfs-server test]# md5sum abc.txt
d41d8cd98f00b204e9800998ecf8427e abc.txt
可以发现,在client节点创建的文件和server节点的文件是一样的。
4、总结
使用NFS服务时,首先要理解它的基本原理——就像在宿舍里用一台电脑共享文件给其他同学。通过NFS,大家可以通过网络访问同一台服务器上的文件,仿佛那些文件就在自己电脑里一样。比如,小张和小李合作做一个项目,把所有文档放在NFS服务器上,他们俩可以通过mount
命令把服务器上的文件夹挂载到自己的电脑里,像打开本地文件一样直接编辑。
在使用过程中,我们还需要注意权限问题。例如,服务器可能会限制哪些人可以修改文件,所以,我们要合理设置权限。
最后,假如某天突然无法访问共享文件,我们可以查看日志文件或者用showmount
命令检查是否有挂载错误,就像当你打不开宿舍的共享打印机时,先看看有没有网络连接问题一样。