Centos7.x 安装配置NFS服务和挂载
背景
由于目前公司的项目都是直接将上传的文件存放到服务的某个位置,所以如果部署多台服务器进行集群的话,获取上传了的文件将会是一个问题。
例如:在192.168.118.225
部署了项目,那么用户上传的文件则会将文件存放到192.168.118.225
服务器;但是如果我再多个服务器都部署了项目(192.168.118.225
,192.168.118.226
、192.168.118.227
),那么用户在使用负载均衡
的时候会切换到不同节点,就会将文件上传到不同的服务器,那么上传的文件会分散在不同的服务器(有可能会找不到附件)。
所以就需要将文件统一存放到一个服务器中(例如:192.168.118.225
)的某个目录(/nfs/data
),然后将服务器(192.168.118.225
)的目录影响到本地的某个文件夹,这样就完美解决了问题
一、环境介绍
本地使用三台服务器,具体说明如下:
- 服务器:192.168.118.225
- 客户端:192.168.118.226、192.168.118.227
- 服务器nfs文件的存放目录:
/nfs/data
- 客户端映射到本地的目录:
/upload
二、服务端的操作
2.1、启动rpcbind
因为centos7自带了rpcbind
,所以不用安装rpc
服务,rpc监听在111端口,可以使用ss -tnulp | grep 111
查看rpc服务是否自动启动,如果没有启动,就systemctl start rpcbind
启动rpc服务。
rpc在nfs服务器搭建过程中至关重要,因为rpc能够获得nfs服务器端的端口号等信息,nfs服务器端通过rpc获得这些信息后才能连接nfs服务器端。
如果执行完systemctl start rpcbind
命令发现程序没有报错,然而111端口也没有启动,则需要检查一下rpcbind
的启动命令;本人在安装的过程中就遇到了这种问题:
# 查看一下rpcbind命令路径
$ find /etc/ -name '*rpcbind.socket*'
/etc/systemd/system/sockets.target.wants/rpcbind.socket
# 编辑查看上一步查询到的结果,例如:
$ vim /etc/systemd/system/sockets.target.wants/rpcbind.socket
[Unit]
Description=RPCbind Server Activation Socket
[Socket]
ListenStream=/var/run/rpcbind.sock
[Install]
WantedBy=sockets.target
将启动命令修改为如下内容:
[Unit]
Description=RPCbind Server Activation Socket
[Socket]
ListenStream=/var/run/rpcbind.sock
ListenStream=[::]:111
ListenStream=0.0.0.0:111
BindIPv6Only=ipv6-only
[Install]
WantedBy=sockets.target
重新加载之后,然后重启
$ systemctl daemon-reload
$ systemctl start rpcbind
2.2、安装nfs-utils,并检查是否安装成功
$ yum -y install nfs-utils
查看是否安装成功
$ rpm -qa nfs-utils
nfs-utils-1.3.0-0.68.el7.x86_64
2.3、创建文件存放目录并编辑/etc/exports
创建文件存放目录:
$ mkdir -p /nfs/data
编辑/etc/exports
,添加以下内容
/nfs/data 192.168.118.0/24(rw,sync,no_root_squash)
2.3.1、内容介绍
/nfs/data
:nfs共享的文件夹目录(共享哪个目录)192.168.118.0/24
:共享的IP网段(允许哪个客户端去访问)rw
:允许读写sync
:同步写入no_root_squash
:当客户机以root身份访问时,赋予root权限(即超级用户保留权限),否则,root用户所有请求映射成anonymous用户一样的权限(默认)
2.4、启动nfs服务
# 启动nfs服务
$ systemctl start nfs
# 使用命令进行查看
$ rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 34354 status
100024 1 tcp 51370 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 52382 nlockmgr
100021 3 udp 52382 nlockmgr
100021 4 udp 52382 nlockmgr
100021 1 tcp 41087 nlockmgr
100021 3 tcp 41087 nlockmgr
100021 4 tcp 41087 nlockmgr
2.5、开机自启服务设置
# nfs服务开机自启
$ systemctl enable nfs-server.server
# rpc服务开机自启
$ systemctl enable rpcbind
2.6、将服务端的/nfs/data
映射到/upload
目录
$ ln -s /nfs/data/ /upload
2.7、防火墙添加规则
如果要能够关闭防火墙,则可以不用进行当前设置,如果防火墙必须开启的话,则可以参考如下操作:
# 添加入站规则:192.168.0.0 范围端的内容都可入站
$ firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.0/16" accept"
# 添加操作后别忘了执行重载
firewall-cmd --reload
2.8、创建一个文件到共享目录中
# 创建一个测试文件
$ touch /nfs/data/abc.txt
# 往测试文件中添加数据
$ echo "hello nfs" >> /nfs/data/abc.txt
三、客户端的操作
3.1、安装nfs-utils
# 客户端上不需要启动nfs服务,只是为了使用showmount工具
$ yum -y install nfs-utils
3.2、检测rpc是否启动
3.3、使用showmount -e 192.168.118.225查看
$ showmount -e 192.168.118.225
Export list for 192.168.118.225:
/nfs/data 192.168.118.0/24
3.3、远程目录挂载至本地/upload目录
# 挂载之前先创建挂载的文件夹
$ mkdir /upload
# 执行挂载的命令
$ mount -t nfs 192.168.118.225:/nfs/data /upload
3.4、查看挂载的数据
$ cat /upload/abc.txt
hello nfs