共享文件服务NFS服务器:NFS实战详解

前言

在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 挂载共享目录
  1. 创建挂载点 (必须是空目录):

    bash 复制代码
    mkdir -p /export/software
  2. 执行挂载命令

    bash 复制代码
    # 格式:mount -t nfs <服务端IP>:<共享目录> <本地挂载点>
    mount -t nfs 192.168.88.102:/export/software /export/software
  3. 查看挂载状态

    bash 复制代码
    df -h
3.2 双向读写测试

为了验证共享是否生效,我们在两端分别创建文件进行测试。

测试 1:服务端写入,客户端读取

  • node2 (服务端) 执行:

    bash 复制代码
    echo 'DNS Hello' >> /export/software/a.txt
  • node1 (客户端) 查看:

    bash 复制代码
    cat /export/software/a.txt
    # 输出: DNS Hello

测试 2:客户端写入,服务端读取

  • node1 (客户端) 执行:

    bash 复制代码
    echo 'DNS Hello2' >> /export/software/b.txt
  • node2 (服务端) 查看:

    bash 复制代码
    cat /export/software/b.txt
    # 输出: DNS Hello2

4. 拓展:NFS 工作原理 (了解)

NFS 的数据传输机制在不同版本中有所差异,主要涉及 RPC (远程过程调用) 协议。

4.1 RPC 与 NFS 的通信机制

在 NFS 早期版本(如 NFSv3)中,NFS 服务依赖 rpcbind 工具来管理端口。

  1. 动态端口问题 :NFS 的某些组件(如 mountd, nlockmgr)启动时会随机使用端口,客户端无法预知。
  2. RPC 的作用
    • NFS 服务启动后,向 rpcbind 注册自己使用的端口。
    • rpcbind 监听在固定端口 111
    • 客户端请求数据时,先询问 rpcbind (端口111),获取 NFS 服务的实际端口号,再进行数据传输。
4.2 NFSv4 的改进

NFSv4 对架构进行了简化:

  • 端口固定 :所有功能整合,固定使用 TCP 2049 端口。
  • 无需 rpcbind:客户端不再需要查询端口,直接与服务端通信,效率更高,配置更简单。

总结

本文详细介绍了如何在 Linux 环境下搭建 NFS 文件共享服务。通过配置 /etc/exports 和简单的 mount 命令,我们实现了服务器间的数据互通。在实际生产环境中,建议根据安全需求合理配置 rw/ro 权限及 IP 访问限制。

相关推荐
一叶之秋14122 小时前
通信之道:解锁Linux进程间通信的无限可能(三)
linux·运维·服务器
光泽雨2 小时前
c#MVVM中的消息通知机制
服务器·c#
闻道且行之2 小时前
frp+Nginx 内网穿透详细配置教程
运维·网络·nginx·frp·内网穿透
ictI CABL2 小时前
Linux环境下Tomcat的安装与配置详细指南
linux·运维·tomcat
小小码农Come on2 小时前
QPainter双缓冲区实现一个简单画图软件
linux·服务器·前端
郝学胜-神的一滴2 小时前
深入理解 epoll_wait:高性能 IO 多路复用核心解密
linux·服务器·开发语言·c++·网络协议
小陈99cyh2 小时前
最新ubuntu22.04服务器上安装vmware虚拟机,附vmware的安装包
linux·运维·服务器·vmware
广州灵眸科技有限公司3 小时前
瑞芯微(EASY EAI)RV1126B rknn-toolkit-lite2使用方法
linux·网络·人工智能·物联网·算法
张3233 小时前
Ansible实施任务控制
linux·ansible