原理
NFS(Network File System)是文件服务器之一。它的功能是可以通过网络,让不同的机器、不同的操作系统可以彼此共享数据文件。
NFS服务器可以让服务端的共享目录挂载到本地端的文件系统中,其他服务器如果想访问共享目录,那可以在本地服务器上安装客户端,并在客户端上设置映射,这样在本地端的系统中看来,远程主机的目录就好像自己的一个磁盘分区(partition)一样,相互使用比较便利。
背景
平台导出的报告,期望生成的文件可以共享
环境配置
ip | 用途 |
---|---|
192.168.0.1 | 服务端 |
192.168.0.2 | 客户端,设置多个文件映射到同一个目录 |
192.168.0.3 | 客户端 |
步骤
服务端部署
##首先查看一下自己是否已下载nfs和rpc的安装包,如果安装了就不需要了,目前看麒麟操作系统有默认安装
rpm -qa nfs-utils rpcbind
1、在线安装rpc、nfs服务端,服务端有先后顺序
yum install -y rpcbind nfs-utils
2、执行命令启动 NFS 服务
systemctl start rpcbind
systemctl start nfs-server
3、执行命令将务设置为开机自启动
systemctl enable rpcbind
systemctl enable nfs-server
#查看是否启用成功
systemctl status rpcbind
systemctl status nfs-server
4、创建共享目录
1)服务端创建共享目录
mkdir -p /share
chmod -R 777 /share
2)配置文件设置
vi /etc/exports
#添加内容,设置客户端访问范围*代表所有,
/share 192.168.10.0/24(rw,no_root_squash,no_all_squash,sync)
/share *(rw,no_root_squash,sync)
#5、在服务端所在的服务器上
#查看NFS已开启目录
rpcinfo -p localhost
#查看NFS已加载共享目录
showmount -e ip地址#这里ip是服务端地址
6、在防火墙上添加开放端口
1. portmap 端口 111 udp/tcp;
2. nfsd 端口 2049 udp/tcp;
3. /etc/services查看,mountd 端口 20048
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
或者执行以下命令开放 NFS 服务的端口:
sudo firewall-cmd --permanent --zone=public --add-service=nfs
sudo firewall-cmd --permanent --zone=public --add-service=rpc-bind
sudo firewall-cmd --permanent --zone=public --add-service=mountd
sudo firewall-cmd --reload
客户端部署
1、客户端安装
yum install nfs-utils -y
2、启动服务
systemctl start nfs-server
3、执行命令将 NFS 服务设置为开机自启动
systemctl enable nfs-server
综合命令
yum install nfs-utils -y && systemctl start nfs-server && systemctl enable nfs-server
4、确认要共享到服务端的路径
/opt/pipt-flask-01/app/api/piptool/biz/assets
/opt/pipt-flask-01/app/api/piptool/
/opt/pipt-flask-02/app/api/piptool/biz/assets
/opt/pipt-flask-02/app/api/piptool/logs
5、配置vi /etc/fstab
服务器ip:服务器共享路径 客户端需要映射的路径 nfs defaults 0 0
如下示例
6、自动挂载
mount -a
7、查看挂载是否成功
df -haT
-a, --all:显示所有文件系统,包括虚拟文件系统
-h, --human-readable:以人类可读的格式显示输出结果。
-T, --print-type:显示文件系统的类型。
8、验证
可以在客户端目录下创建文件,然后再服务端映射的共享目录下查看是否同步,反之亦然
问题
1、在服务端上不设置NFS主要开放port,那么客户端访问查看共享目录是看不到的,showmount -e ip地址#这里ip是服务端地址
1. portmap 端口 111 udp/tcp;
2. nfsd 端口 2049 udp/tcp;
3. /etc/services查看,mountd 端口 20048
2、如果在客户端共享的目录下存在文件,而在服务端创建的共享目录是空的,此时设置映射后,客户端的目录则同步清空,所以在设置映射之前需要把客户端对应的目录文件备份一下,映射之后再放进来。