NFS实现多服务器文件的共享

文章目录

一、简介

NFS是network file sytem的缩写,它允许网络中的计算机之间共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

因为NFS服务有很多功能,提供不同功能的进程使用的端口号也就会各不相同,如果客户端想要请求NFS服务器的某项功能,势必需要先知道其功能的目的端口号,才能从NFS服务器哪里获得服务。那么NFS服务这么多功能端口号,客户端如何知道NFS服务器的某项功能使用的什么端口号呢?这就需要RPC远程过程调用协议来记录NFS服务器各功能所使用的端口号。其过程如下:

1.首先在服务端,NFS服务启动以后,就会随机的使用一些端口号,然后NFS服务就会将自己使用的端口号告诉本系统内的RPC服务,RPC记录下NFS各个功能所使用的端口。并开启RPC服务的111端口等待客户端通过RPC请求来获取到NFS服务所使用的端口号。

2.客户端启动自身的RPC(portmap)服务,向服务端的RPC(portmap)服务请求NFS文件共享服务开放的端口号。

3.服务端RPC服务收到用户的请求后,查阅NFS服务所使用的端口号,并将其使用的端口号告诉给客户端。

4.客户端知道NFS服务器使用的端口号后,就可以通过获取到的目的端口号与NFS服务器进行数据传输。

注意:在服务端上,因为NFS服务需要向RPC服务注册自己所使用的端口号,因此RPC只有先于NFS服务启动,NFS服务才能将自己使用的端口号注册到本地的RPC服务上。

二、部署

1、准备

我们这里准备了三台服务器,一台服务端,两台客户端进行测试。

1、服务端和客户端:安装nfs-utils

bash 复制代码
yum -y install nfs-utils

2、服务端:创建共享目录

bash 复制代码
# 创建两个共享目录
mkdir -p /root/nfs/files1
mkdir -p /root/nfs/files2

# 创建测试文件
touch /root/nfs/files1/111.txt
touch /root/nfs/files1/222.txt
touch /root/nfs/files2/333.txt
touch /root/nfs/files2/444.txt

3、服务端:配置exports文件

bash 复制代码
# 默认是空的,需要编辑
vi /etc/exports

# 里面的内容,我们将两个目录共享给另外两台服务器,配置详细内容请查看下面的附录
/root/nfs/files1 192.168.56.11(rw,sync,no_root_squash)
/root/nfs/files2 192.168.56.11(rw,sync,no_root_squash)
/root/nfs/files1 192.168.56.12(rw,sync,no_root_squash)
/root/nfs/files2 192.168.56.12(rw,sync,no_root_squash)

导出(广播)编辑的文件,并启动nfs服务,如果已经启动可以直接重启或者exportfs -r

bash 复制代码
# 可以使用exportfs命令使新修改的配置文件生效
exportfs -r
# 启动
systemctl start nfs

# 重启
systemctl restart nfs

4、客户端挂载

注意:两台客户端都需要执行以下命令!

bash 复制代码
# 1、显示NFS服务器(IP为192.168.56.10)的输出目录列表:
#  showmount 选项
# -d:仅显示已被NFS客户端加载的目录;
# -e:显示NFS服务器上所有的共享目录。
[root@localhost ~]# showmount -e 192.168.56.10
Export list for 192.168.56.10:
/root/nfs/files2 192.168.56.12,192.168.56.11
/root/nfs/files1 192.168.56.12,192.168.56.11

# 2、创建目录,用于挂载
mkdir -p /root/nfs/files1
mkdir -p /root/nfs/files2

# 3、执行挂载
mount -t nfs 192.168.56.10:/root/nfs/files1 /root/nfs/files1
mount -t nfs 192.168.56.10:/root/nfs/files2 /root/nfs/files2

# 4、查看是否挂载成功
[root@localhost files1]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        2.1G     0  2.1G   0% /dev
tmpfs                           2.1G     0  2.1G   0% /dev/shm
tmpfs                           2.1G   17M  2.1G   1% /run
tmpfs                           2.1G     0  2.1G   0% /sys/fs/cgroup
/dev/sda1                        40G  8.0G   33G  20% /
192.168.56.10:/root/nfs/files1   40G  8.0G   33G  20% /root/nfs/files1
192.168.56.10:/root/nfs/files2   40G  8.0G   33G  20% /root/nfs/files2

# 5、测试
# 任何一台服务器在/root/nfs/files1修改文件,都会同步修改。

5、客户端:卸载

bash 复制代码
#使用以下命令强行解除挂载
umount -l /root/nfs/files2 
umount -l /root/nfs/files1

或者使用
#将会显示使用这个模块的pid
fuser -m /root/nfs/files1
#将会直接kill那个pid
fuser -mk /root/nfs/files1

三、附录

1、NFS服务基本命令

bash 复制代码
systemctl start nfs  	启动NFS服务
systemctl stop nfs 	停止nfs服务
systemctl restart nfs	重新启动nfs服务
systemctl status nfs 	查看nfs服务状态
systemctl enable nfs	设置开机自启动nfs服务

2、/etc/exports参数解释

/etc/exports是NFS服务器配置文件,它用于定义共享目录和访问权限。它的格式如下:

bash 复制代码
<目录路径> <允许访问的主机>(<选项>)

其中,目录路径表示要共享的服务端目录路径,允许访问的主机表示可以访问该目录的主机名或IP。

参数解释:
(1) ro 该主机对该共享目录有只读权限

(2) rw 该主机对该共享目录有读写权限

(3) root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户

(4) no_root_squash 客户机用root访问该共享文件夹时,不映射root用户

(5) all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户

(6) anonuid 将客户机上的用户映射成指定的本地用户ID的用户

(7) anongid 将客户机上的用户映射成属于指定的本地用户组ID

(8) sync 资料同步写入到内存与硬盘中

(9) async 资料会先暂存于内存中,而非直接写入硬盘

(10) insecure 允许从这台机器过来的非授权访问

(11) subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

(12) no_subtree_check 和上面相对,不检查父目录权限

(13) wdelay 如果多个用户要写入NFS目录,则归组写入(默认)

(14 )no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

(15) hide 在NFS共享目录中不共享其子目录

(16) no_hide 共享NFS目录的子目录

(17) secure NFS通过1024以下的安全TCP/IP端口发送

(18) insecure NFS通过1024以上的端口发送

3、exportfs命令

bash 复制代码
exportfs命令提供了一系列参数,‌用于控制NFS共享的设置和状态。‌以下是一些常用的参数及其功能:‌

-a:‌用于打开或取消所有目录的共享。‌
-r:‌重新共享所有目录,‌使/var/lib/nfs/xtab和/etc/exports同步,‌删除/etc/exports中已删除的条目,‌并移除内核共享表中任何不再有效的条目。‌
-u:‌取消一个或多个目录的共享。‌
-f:‌在"新"模式下,‌刷新内核共享表之外的任何东西,‌任何活动的客户程序将在它们的下次请求中得到mountd添加的新的共享条目。‌
-v:‌输出详细信息,‌显示在共享或取消共享时正在做什么,‌以及显示当前共享列表时的共享选项。‌

使用exportfs命令时,‌无需重启NFS服务即可使配置文件生效,‌这对于动态调整NFS共享非常有用。‌例如,‌当修改了/etc/exports配置文件后,‌可以通过执行exportfs -arv命令来立即使更改生效,‌而不是重新启动NFS服务

参考资料

https://zhuanlan.zhihu.com/p/78114809
https://blog.csdn.net/liebe_u/article/details/139708752
https://www.cnblogs.com/hanfe1/p/16642948.html

相关推荐
软件技术员7 分钟前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
耗同学一米八20 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
东华果汁哥1 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
肖永威2 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
mengao12342 小时前
centos 服务器 docker 使用代理
服务器·docker·centos
布鲁格若门2 小时前
CentOS 7 桌面版安装 cuda 12.4
linux·运维·centos·cuda
Eternal-Student2 小时前
【docker 保存】将Docker镜像保存为一个离线的tar归档文件
运维·docker·容器
C-cat.2 小时前
Linux|进程程序替换
linux·服务器·microsoft
dessler2 小时前
云计算&虚拟化-kvm-扩缩容cpu
linux·运维·云计算