前言
在Linux服务器集群中,如何让多台机器共享同一份软件包或数据?NFS(网络文件系统)是最经典的解决方案。本文将带你从零开始,在CentOS/Rocky Linux环境下搭建NFS服务,实现目录的高效共享。
1. NFS 基本介绍
NFS(Network File System,网络文件系统) 是一种允许不同计算机通过网络共享文件和目录的协议。
- 核心功能:使得远程主机能够像访问本地磁盘一样访问和操作服务器上的文件。
- 架构模式 :基于 客户端-服务器(Client-Server) 架构。
- NFS服务器:将本地文件系统共享出去。
- NFS客户端:通过网络挂载共享目录,进行读写操作。
- 应用场景:主要应用于 Linux/Unix 系统之间的文件共享。虽然支持跨操作系统,但兼容性相对较差。

2. NFS 环境规划与配置
2.1 需求分析与服务器规划
需求背景 :
在 node2 服务器的根目录下有一个 /export/software 目录,存储了大量软件包。为了节省空间并方便管理,需要将其共享给集群中的其他服务器使用。
服务器规划表:
| 主机名 | 角色 | IP地址 (示例) | 任务 |
|---|---|---|---|
| node2 | NFS 服务端 | 192.168.88.102 | 提供共享目录 /export/software |
| node1 | NFS 客户端 | 192.168.88.101 | 挂载并使用共享目录 |
2.2 安装 NFS 服务
在 服务端 (node2) 和 客户端 (node1) 上都需要安装 NFS 工具包。
bash
# 服务端与客户端均需执行
dnf install nfs-utils -y
🔥 关键步骤:防火墙配置
必须在服务端开放 NFS 服务端口,否则客户端无法连接。
bash# 开放 NFS 服务 firewall-cmd --add-service=nfs --permanent # 重新加载防火墙配置 firewall-cmd --reload
2.3 配置共享目录 (服务端 node2)
第一步:创建共享目录
bash
mkdir -p /export/software
第二步:编辑 exports 配置文件
使用 vi 编辑 /etc/exports 文件,添加共享规则:
bash
vi /etc/exports
添加以下内容:
properties
/export/software *(rw,sync,no_root_squash)
参数详解:
| 参数 | 说明 |
|---|---|
/export/software |
要共享的目录路径。 |
* |
访问控制 :表示允许所有客户端访问。也可以指定网段(如 192.168.1.0/24)或特定IP。 |
rw |
权限:读写权限 (Read-Write)。若不指定,默认为只读 (ro)。 |
sync |
同步策略 :数据同步写入内存和硬盘。async 表示先缓存在内存,性能高但数据安全性略低。 |
no_root_squash |
Root权限映射 :重要! 允许客户端的 root 用户拥有服务端 root 的权限。默认情况下,root 会被映射为匿名用户(nfsnobody)以增强安全性。 |
2.4 启动服务并验证
启动 NFS 服务并设置开机自启:
bash
systemctl enable nfs-server
systemctl start nfs-server

验证共享是否成功:
在服务端执行以下命令查看共享信息:
bash
# 查看本机共享出的目录列表
showmount -e
# 或者使用 exportfs 查看更详细的信息
exportfs

3. 客户端挂载与测试 (客户端 node1)
3.1 挂载共享目录
-
创建挂载点 (必须是空目录):
bashmkdir -p /export/software -
执行挂载命令 :
bash# 格式:mount -t nfs <服务端IP>:<共享目录> <本地挂载点> mount -t nfs 192.168.88.102:/export/software /export/software -
查看挂载状态 :
bashdf -h

3.2 双向读写测试
为了验证共享是否生效,我们在两端分别创建文件进行测试。
测试 1:服务端写入,客户端读取
-
node2 (服务端) 执行:
bashecho 'DNS Hello' >> /export/software/a.txt -
node1 (客户端) 查看:
bashcat /export/software/a.txt # 输出: DNS Hello

测试 2:客户端写入,服务端读取
-
node1 (客户端) 执行:
bashecho 'DNS Hello2' >> /export/software/b.txt -
node2 (服务端) 查看:
bashcat /export/software/b.txt # 输出: DNS Hello2

4. 拓展:NFS 工作原理 (了解)
NFS 的数据传输机制在不同版本中有所差异,主要涉及 RPC (远程过程调用) 协议。
4.1 RPC 与 NFS 的通信机制
在 NFS 早期版本(如 NFSv3)中,NFS 服务依赖 rpcbind 工具来管理端口。
- 动态端口问题 :NFS 的某些组件(如
mountd,nlockmgr)启动时会随机使用端口,客户端无法预知。 - RPC 的作用 :
- NFS 服务启动后,向
rpcbind注册自己使用的端口。 rpcbind监听在固定端口 111。- 客户端请求数据时,先询问
rpcbind(端口111),获取 NFS 服务的实际端口号,再进行数据传输。
- NFS 服务启动后,向
4.2 NFSv4 的改进
NFSv4 对架构进行了简化:
- 端口固定 :所有功能整合,固定使用 TCP 2049 端口。
- 无需 rpcbind:客户端不再需要查询端口,直接与服务端通信,效率更高,配置更简单。
总结
本文详细介绍了如何在 Linux 环境下搭建 NFS 文件共享服务。通过配置
/etc/exports和简单的mount命令,我们实现了服务器间的数据互通。在实际生产环境中,建议根据安全需求合理配置rw/ro权限及 IP 访问限制。