NFS 网络文件系统完整实战|原理 + RPC 架构 + 多 Web 集群共享存储

NFS网络文件系统完整自学实战博客

前言

在多服务器集群场景下,多台Web节点需要统一存放网站静态资源、附件文件,如果每台服务器单独存储,文件同步繁琐、版本不一致。NFS(Network File System)网络文件系统可以实现一台服务器统一共享目录,多客户端远程挂载,像本地磁盘一样读写文件,是中小企业Web集群、内网文件共享最常用轻量存储方案。

本文完整讲解NFS底层RPC工作原理、版本差异、优缺点、适用场景,附带三台CentOS7虚拟机完整实验,包含服务端共享配置、客户端临时挂载、fstab永久挂载、root权限放开实战,全部命令可直接复制执行。

一、NFS基础概述

1.1 什么是NFS

NFS由Sun公司在80年代推出,专为类Unix/Linux/macOS系统打造的网络文件共享协议,采用C/S架构:

NFS服务端开放本地目录,授权客户端远程挂载,客户端操作远程文件和本地文件无感知,无需拷贝文件到本地。

1.2 NFS版本区别

  1. NFSv3:行业广泛通用,无状态协议,支持UDP/TCP传输,兼容性强,但缺少原生加密、强认证机制;
  2. NFSv4:状态连接,内置Kerberos安全认证、完善文件锁,安全性大幅提升,公网/高安全环境优先使用。

1.3 核心C/S架构

  • NFS Server:存放原始文件,运行nfs-server、rpcbind服务,通过exports配置共享权限;
  • NFS Client:安装nfs-utils,使用mount命令挂载远程共享目录到本地挂载点,读写文件走网络RPC调用。

1.4 NFS工作流程(RPC远程调用机制)

NFS本身不处理端口注册、端口发现,依赖rpcbind(RPC服务)协同工作,完整流程:

  1. 服务端启动nfs-server,向rpcbind注册NFS监听端口;
  2. 客户端先连接服务端rpcbind,查询NFS服务端口;
  3. 客户端发送挂载请求,服务校验IP/网段权限;
  4. 挂载成功后,客户端所有读写、创建、删除操作转为RPC远程调用;
  5. 服务端执行本地文件操作,结果通过网络返回客户端;
  6. 权限校验依托系统UID/GID用户ID匹配控制读写权限。

1.5 NFS传输特性

  1. 无状态(v3) 服务器不保存客户端连接记录,断网重连无需重建会话,容错简单;
  2. 双协议支持:UDP低延迟适合内网,TCP可靠传输适合大文件跨机房场景。

1.6 NFS优缺点

优势
  1. 访问透明:远程目录和本地磁盘操作方式完全一致;
  2. 跨平台:Linux、macOS、UNIX全兼容;
  3. 部署简单,配置量少,轻量无复杂组件;
  4. 集中式存储,集群统一文件,无需同步脚本。
局限性
  1. NFSv3无加密、无强身份认证,仅靠IP白名单,仅适合内网;
  2. 极度依赖网络,延迟、丢包会直接影响文件读写速度;
  3. 多主机同时修改同一文件时,文件锁机制复杂,易出现数据错乱。

1.7 典型使用场景

  1. 企业内网办公文件集中共享;
  2. Apache/Nginx Web集群统一静态资源存储(本次实验场景);
  3. 小型数据库、日志集中存储;
  4. 嵌入式设备、NAS内网文件交互。

二、实验环境节点规划

三台CentOS7虚拟机,同网段互通

主机名 IP地址 角色
nfs-server 10.1.8.20/24 NFS共享服务端
nfs-client1 10.1.8.21/24 Web客户端1
nfs-client2 10.1.8.22/24 Web客户端2

所有节点基础静态IP配置

bash 复制代码
# nfs-server执行
hostnamectl set-hostname nfs-server
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.20/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33

# nfs-client1
hostnamectl set-hostname nfs-client1
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.21/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33

# nfs-client2
hostnamectl set-hostname nfs-client2
nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.1.8.22/24 ipv4.gateway 10.1.8.2 ipv4.dns 10.1.8.2 autoconnect yes
nmcli connection up ens33

三、NFS服务端完整部署

3.1 安装依赖软件

nfs-utils包含NFS主程序、rpcbind工具;http用于模拟Web业务目录

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

3.2 创建共享目录并修改属主

网站运行用户apache,目录归属apache保证客户端读写权限

bash 复制代码
mkdir -p /shares/webapp
chown apache /shares/webapp

3.3 启动并开机自启NFS服务

bash 复制代码
systemctl enable nfs-server --now

3.4 防火墙放行NFS相关服务

NFS依赖nfs、rpc-bind、mountd三个服务端口

bash 复制代码
firewall-cmd --add-service=nfs --add-service=rpc-bind --add-service=mountd --permanent
firewall-cmd --reload

3.5 核心配置文件 /etc/exports

全局共享配置文件,也可拆分/etc/exports.d/*.exports独立配置,避免修改主文件出错。

配置语法规则
共享目录 复制代码

访问源支持:单个IP、网段、域名、通配域名、IPv6地址;

常用权限参数:

  • rw:读写权限,默认ro只读
  • no_root_squash:关闭root映射为nobody(默认root_squash,客户端root创建文件会变成nobody无权限)
实验配置(允许整个10.1.8网段读写)
bash 复制代码
vim /etc/exports
/shares/webapp 10.1.8.0/24(rw)

3.6 重载共享配置,生效导出规则

修改exports后必须重载,两种方式任选

bash 复制代码
# 方式1 重载配置
exportfs -r
# 方式2 重启nfs服务
systemctl reload nfs-server
# 查看当前共享及完整参数
exportfs -v

输出示例:

复制代码
/shares/webapp  10.1.8.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

四、NFS客户端挂载实操(两台Web节点)

4.1 客户端统一安装工具

bash 复制代码
yum install -y nfs-utils httpd
systemctl enable httpd --now
systemctl stop firewalld

4.2 查看服务端共享列表

showmount 查询NFS服务器开放目录

bash 复制代码
showmount -e 10.1.8.20

返回:

复制代码
Export list for 10.1.8.20:
/shares/webapp 10.1.8.0/24

4.3 临时挂载(重启失效)

将服务端共享目录挂载到Apache网站根目录/var/www/html

bash 复制代码
mount -t nfs 10.1.8.20:/shares/webapp /var/www/html
# 验证挂载
df -h | grep www

4.4 默认权限问题:客户端root无法创建文件

默认开启root_squash,客户端root操作会被映射为nobody用户,写入拒绝

bash 复制代码
touch /var/www/html/root-f1
# 报错 Permission denied
# apache用户正常写入
su -l -s /bin/bash apache
echo apache website > /var/www/html/web1.html

4.5 服务端放开root权限(修改exports)

bash 复制代码
vim /etc/exports
/shares/webapp 10.1.8.0/24(rw,no_root_squash)
exportfs -r

重新测试,客户端root可正常创建文件:

bash 复制代码
touch /var/www/html/root-f1
ls /var/www/html

4.6 多客户端数据同步验证

nfs-client1创建文件,nfs-client2可实时查看,证明多Web节点共用一份存储

bash 复制代码
# client1执行
touch /var/www/html/xiyangyang
# client2查看
ls /var/www/html

在client1写入首页内容,两台服务器网页访问完全一致

bash 复制代码
echo heihei > /var/www/html/index.html

五、永久开机自动挂载(/etc/fstab)

临时挂载服务器重启后失效,生产环境必须写入fstab实现开机自动挂载

客户端操作

bash 复制代码
vim /etc/fstab
# 末尾添加一行
10.1.8.20:/shares/webapp /var/www/html nfs defaults 0 0

参数说明:

  1. 远端NFS共享地址
  2. 本地挂载点
  3. 文件系统类型nfs
  4. defaults默认挂载参数
  5. 0 0:dump备份、fsck自检关闭

验证配置无报错并重启测试

bash 复制代码
mount -a
reboot
# 重启后检查自动挂载
df -h | grep www

六、自学整体总结

  1. NFS基于RPC远程调用实现跨Linux主机文件共享,v3内网兼容性好,v4安全性更强;
  2. 架构分为服务端nfs-server+rpcbind、客户端nfs-utils,依靠/etc/exports控制IP访问权限;
  3. 核心权限参数:rw读写、root_squash默认限制root、no_root_squash放开管理员权限;
  4. 企业Web集群最佳实践:NFS统一存储网站资源,多节点挂载实现文件数据完全同步;
  5. 挂载分临时mount(重启失效)和fstab永久挂载,线上业务必须配置自动挂载;
  6. 适用场景仅限内网,NFSv3无加密,禁止公网直接暴露;
  7. 实操流程记忆:服务端安装→创建共享目录→配置exports→重载共享→客户端showmount查询→挂载→fstab持久化。
相关推荐
zlinear数据采集卡4 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
壹玖玖肆4 小时前
医院后勤智能运维系统实用性评测
运维
cjy_14 小时前
2026人工智能产业发展深度剖析:落地化、垂直细分、安全合规成行业核心赛道
人工智能·安全
数据知道4 小时前
反序列化漏洞:Java、PHP、Python 三条线各讲透
java·网络·python·安全·网络安全·php
香菜TTT4 小时前
主从架构锁丢失问题-----RedLock
架构
江畔柳前堤4 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
LabVIEW开发5 小时前
LabVIEW 通过以太网控制 Yokogawa WT3000 功率分析仪:tmctl.dll 与原始套接字方案
网络·labview·labview知识·labview功能·labview程序
听你说325 小时前
推进具身智能安全评测:丈八科技与季华实验室达成战略合作
人工智能·科技·安全
这个DBA有点耶5 小时前
DBA进阶之路:从“修数据库”到“管架构债”
数据库·架构·dba
wengqidaifeng5 小时前
1.从“会敲命令”到理解 Linux:15 个基础指令、文件树与命令执行的本质
linux·运维·服务器·ubuntu