centos7搭建NFS服务
1. NFS基本概述
- NFS(Network File System 即网络文件系统。它的主要功能是通过网络让不同主机系统之间可以共享文件或目录。
- NFS与Samba服务类似,但一般Samba服务常用于办公局域网共享,而NFS常用于互联网中小型网站集群架构后端的数据共享。
- NFS客户端将NFS服务端设置好的共享目录挂载到本地某个挂载点,对于客户端来说,共享的资源就相当于在本地的目录下。
- NFS在传输数据时使用的端口是随机选择的,依赖RPC服务来与外部通信,要想正常使用NFS,就必须保证RPC正常。
使用NFS主要解决前端web资源一致性问题以及前端web静态资源的共享,但是它并不能解决网站访问的延时,生产环境一般将静态资源放在了CDN上面。
2. RPC协议和NFS工作原理
由于 NFS
在传输数据时使用的端口是随机选择的,所以依赖于 RPC
服务。
RPC(Remote Procedure Call Protocol)
远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
在 NFS
服务端和 NFS
客户端之间,RPC
服务扮演一个中介角色,NFS
客户端通过 RPC
服务得知 NFS
服务端使用的端口,从而双方可以进行数据通信。
NFS工作流程
当NFS服务端启动服务时,会随机取用若干个端口,并主动向 RPC 服务注册取用相关端口,这样,RPC 服务就知道 NFS 每个端口对应的的NFS功能了,然后 RPC 服务使用固定的111端口来监听 NFS 客户端提交的请求,并将正确的 NFS 端口信息回复给请求的 NFS 客户端。这样,NFS 客户端就可以与 NFS 服务端进行数据传输了。
NFS工作原理
- 用户进程访问NFS客户端,使用不同的函数对数据进行处理
- NFS客户端通过 TCP/IP 的方式传递给NFS服务端
- NFS服务端接收到请求后,会先调用 protmap 进程进行端口映射
- nfsd 进程用于判断 NFS 客户端是否拥有权限连接 NFS 服务器
- rpc.mount 进程用于判断客户端是否有权限进行验证
- idmap 进程实现用户映射和压缩
- 最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,又内核驱动硬件。
3. 部署NFS服务
3.1 环境说明
应用场景:将NFS服务端的 /data
目录共享给同个网段的所有主机。
主机 | 操作系统 | 说明 |
---|---|---|
192.168.18.150 | CentOS Linux release 7.7.1908 (Core) | NFS服务端 |
192.168.18.131 | CentOS Linux release 7.8.2003 (Core) | NFS客户端 |
3.2 NFS服务端配置
首先,关闭防火墙,selinux
# 关闭防火墙
$ systemctl stop firewalld
$ systemctl stop iptables
# 关闭selinux,临时关闭
$ setenforce 0
# 永久关闭selinux
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
安装NFS
# nfs-utils包依赖rpcbind,所以只要安装nfs-utils包即可,rpcbind被依赖也会安装上
$ yum install -y nfs-utils
创建共享文件夹目录
$ mkdir /data
# 授权
$ chown -R nfsnobody.nfsnobody /data
配置NFS
# 编辑 /etc/exports,添加如下内容:
$ vim /etc/exports
/data 192.168.18.0/24(rw,sync,all_squash)
启动服务
# 启动服务,先启动rpcbind, 然后再启动nfs
$ systemctl start rpcbind
# 启动nfs
$ systemctl start nfs-server
# 检查是否启动成功
$ ps aux | grep nfs
启动成功后,可以通过看 /var/lib/nfs/etab
这个文件,看文件有没有配置的nfs信息,如果有则表明启动服务没什么问题。
$ cat /var/lib/nfs/etab
/data 192.168.18.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
3.3 NFS客户端配置
关闭防火墙
# 关闭防火墙
$ systemctl stop firewalld
$ systemctl stop iptables
# 关闭selinux,临时关闭
$ setenforce 0
# 永久关闭selinux
$ sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
安装 rpcbind
和 nfs-utils
$ yum install -y nfs-utils
查看是否有可用的NFS地址
$ showmount -e 192.168.18.150
Export list for 192.168.18.150:
/data 192.168.18.0/24
挂载
$ mount 192.168.18.150:/data /opt
$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 12K 1.9G 1% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 18G 6.8G 12G 38% /
/dev/sda1 197M 171M 27M 87% /boot
tmpfs 378M 0 378M 0% /run/user/0
192.168.18.150:/data 18G 6.3G 12G 36% /opt
验证
# 客户端在挂载目录增删改查文件
$ echo "test nfs" > 1.txt
# 在服务端查看是否一致
$ cat 1.txt
test nfs
这样,一个NFS服务器就配置完成了。
3.4 其他说明
在服务端安装nfs-utils包之后,默认的配置文件是: /etc/exports
上面步骤中配置的内容如下:
/data 192.168.18.0/24(rw,sync,all_squash)
/data
: 表示要共享哪个目录192.168.18.0/24
:指定一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上(rw,sync,all_squash)
:括号里面定义的是共享参数
共享参数如下:
一般配置的参数是:(rw,all_squash,sync,anonuid=666,anongid=666)
在NFS的客户端使用 showmount -e
命令查看是否有可用的NFS地址
如果希望开机自动挂载NFS共享目录,可以编辑 /etc/fstab
,添加如下内容:
192.168.18.150:/data /opt nfs defaults 0 0