ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 手把手教你搭建NFS数据共享服务!

手把手教你搭建NFS数据共享服务!

原创 Linux操作系统 作者:老男孩Linux 时间:2025-11-28 14:42:13 0 删除 编辑

  在企业集群架构中通常会有数台web服务器来做负载均衡,而这些web服务器对外访问的内容必须是一致的

  但是在用户上传文件时是只是上传至当前访问的服务器内,并不会上传到所有服务器上,这就会导致在访问其他服务器时并不会得到用户上传的文件,这个时候就需要用到 nfs数据共享服务了

   NFS服务介绍

   | 什么是NFS?

  NFS就是 Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件

  NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利

  NFS一般用来存储共享视频,图片等静态数据

  NFS挂载原理

   如上图示:

  当我们在NFS服务器设置好一个共享目录  /oldboy/blog/images 后,其他的有权访问NFS服务器的web服务器就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义

  挂载好后我们在本地能够看到服务端  /oldboy/blog/images 的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,可以通过  df –h 命令来查看磁盘信息

  既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有对应的网络端口

  那么NFS服务器到底使用哪个端口来进行数据传输呢?

  ①基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,这个随机端口为小于1024的端口

  既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?

  ②这时就需要通过远程过程调用  RPC(Remote Procedure Call) 协议来实现了!

   | RPC与NFS通讯原理

  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定

  客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而 RPC 就是用来统一管理NFS端口的服务,并且统一对外的端口是111

  RPC 会记录NFS端口的信息,如此我们就能够通过 RPC 实现服务端和客户端沟通端口信息

  PRC最主要的功能就是指定每个NFS功能所对应的 port number,并且通知客户端,可以连接到正常端口上去

  那么RPC又是如何知道每个NFS功能的端口呢?

  ①首先当NFS启动后,就会随机使用一些端口

  ②然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端

  ③如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了

   注意:在启动NFS SERVER之前,首先要启动RPC服务(即 portmap 服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。

   特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效

  | NFS客户端和NFS服务器通讯过程

  ①首先服务端启动 RPC 服务,并开启111端口

  ②服务端启动NFS服务,并向 RPC 注册端口信息

  ③客户端启动 RPC 服务,向服务端的 RPC 服务请求服务端的NFS端口

  ④服务端的 RPC 服务反馈NFS端口信息给客户端

  ⑤客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输

   NFS服务部署

  | 环境准备

  | 检查当前系统是否支持NFS服务

# cat /etc/redhat-releaseCentOS Linux release 7.9.2009 (Core)# uname -r3.10.0-1160.31.1.el7.x86_64# uname -mx86_64# uname -nnfs01# uname -aLinux nfs01 3.10.0-1160.31.1.el7.x86_64 #1 SMP Thu Jun 10 13:32:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

  | 安装 NFS 和 rpc

# 服务器端和客户端都要安装yum install nfs-utils rpcbind -y# 检查是否安装成功rpm -qa nfs-utils rpcbind

  | 启动RPC

systemctl start rpcbind.service
systemctl enable rpcbind.service# 看看有没有注册的端口rpcinfo -p 127.0.0.1

  | 启动NFS

systemctl start nfs
systemctl enable nfs# 看看有没有注册的端口rpcinfo -p 127.0.0.1# 检查服务是否都已启动netstat -lntup|egrep "rpc|nfs"

   | 配置nfs

  NFS配置文件 /etc/exports

  ①待共享的目录 存东西的目录 取东西的目录例如:/data

  ②访问的主机

  ③() 权限

echo '/data 172.16.1.0/24(rw,sync)' >> /etc/exports
mkdir -p /data# 重启 NFS 下述二者等价,选一个即可systemctl reload nfs # 生产场景必须要实现平滑重启exportfs -r# NFS默认用户【nfsnobody】grep nfsno /etc/passwd# 如果没有就创建groupadd -g 65534 nfsnobody
useradd nfsnobody -u 65534 -g nfsnobody -s /sbin/nologin -M# 目录授权chown -R nfsnobody.nfsnobody /data# 查看nfs服务器共享信息,输出格式为“共享的目录名称 允许使用客户端地址”showmount -e 172.16.1.31

  | 服务本地测试挂载

# mount -t nfs 172.16.1.31:/data /mnt# df -h172.16.1.31:/data   19G  1.8G   18G   10% /mnt# touch /mnt/oldboy.txt# ls /mnt/oldboy.txt

  | 客户端测试

# 安装yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind# 安装nfs-utils的目的是为了获得showmount命令# 启动systemctl start rpcbind
systemctl enable rpcbind# 查看NFS服务器提供的共享目录showmount -e 172.16.1.31# 挂载测试mount -t nfs 172.16.1.31:/data /mnt
df -h
touch /mnt/oldgirl.txt
ls /mnt/

   NFS服务扩展

  | NFS客户端开机自启动挂载

   方法1:把挂载的命令放入/etc/rc.local中,以实现开机自动挂载

echo "#mount by oldboy" >>/etc/rc.local
echo "/bin/mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

  方法2:放入/etc/fstab

echo '172.16.1.31:/data /mnt                   nfs   defaults       0 0' >> /etc/fstab# 由于在开机启动流程中加载/etc/fstab会在网卡之前,这会导致无法实现NFS挂载,所以要做延迟启动开启remote-fs.target开机自启动
systemctl enable remote-fs.target

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69952968/viewspace-3103813/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
老男孩it教育——致力于帮助有志向的年轻人通过努力学习获得体面的工作和生活。专注于Linux云计算运维、Python全栈开发、网络安全、新媒体运营、容器云架构师、MySQL数据库、go语言的培训。学习可call:18710030740

注册时间:2019-11-06

  • 博文量
    393
  • 访问量
    1014481