当前位置: 首页 > news >正文

集群多台 Web 同步文件太麻烦?NFS 简单搞定统一存储

Linux NFS 网络文件服务

一、NFS 基础概念介绍

1.1 什么是 NFS

NFS(Network File System,网络文件系统)是经典跨主机文件共享技术,能让客户端像访问本地磁盘一样透明读写远程服务器共享目录,广泛用于 Linux 集群统一存储、企业内部文件共享场景。

1.2 NFS 版本迭代

  1. NFSv3:使用最广泛,无状态协议,支持大文件,兼容 UDP/TCP 传输,性能稳定;
  2. NFSv4:新增 Kerberos 安全认证、状态化连接、完善文件锁,安全性大幅提升。

1.3 核心架构(C/S 架构)

  • NFS 服务端:存放原始文件,运行 nfs-server、rpc 相关进程,通过配置文件导出共享目录,管控客户端访问权限;
  • NFS 客户端:通过mount将远程共享挂载到本地目录,操作逻辑和本地文件完全一致。

1.4 工作原理(RPC 远程调用机制)

NFS 不固定端口,依赖 RPC(portmap)做端口协调,完整流程:

  1. 注册:服务端 NFS 启动,向 portmap 注册自身监听端口;
  2. 端口查询:客户端先访问服务端 portmap,获取 NFS 服务端口;
  3. 挂载鉴权:客户端发起挂载请求,服务端校验客户端IP/域名权限;
  4. 读写转发:挂载完成后,所有文件读写操作通过 RPC 转发给服务端执行,结果回传给客户端;
  5. 权限校验:依靠 Linux UID/GID 用户组机制控制文件读写权限。

1.5 传输与协议特性

  1. 无状态(NFSv3):服务端不保存客户端连接状态,断网重连无需恢复会话,容错简单;
  2. 双传输协议
    • UDP:低开销,适合局域网实时小文件;
    • TCP:面向连接可靠传输,大数据、公网环境首选。

1.6 NFS 优缺点

优势
  1. 访问透明:远程文件和本地操作无感知;
  2. 跨平台:支持 Linux、UNIX、macOS;
  3. 性能高效:自带缓存机制,局域网读写速度优秀;
  4. 配置简单:仅需修改 exports 配置文件即可完成共享发布。
局限性
  1. 早期版本安全弱:NFSv3 无加密,仅靠IP鉴权,易被伪造;NFSv4 安全增强,高安全场景仍需搭配防火墙/VPN;
  2. 强依赖网络:延迟、丢包会直接降低读写速度;
  3. 多客户端文件锁逻辑复杂,并发写入不当易出现数据不一致。

1.7 典型应用场景

  1. 企业内网办公文件、软件包统一共享;
  2. Web/数据库集群统一后端存储(本篇实战场景);
  3. 路由器、NAS 嵌入式设备简易文件互通。

二、实验环境规划

使用 CentOS7 系统,克隆3台虚拟机,规划如下:

节点名称IP地址角色
nfs-server10.1.8.20/24NFS共享存储服务端
nfs-client110.1.8.21/24Web客户端节点1
nfs-client210.1.8.22/24Web客户端节点2

网关、DNS统一:10.1.8.2

三、三台主机基础网络与主机名配置

3.1 nfs-server 配置

# 修改主机名hostnamectl set-hostname nfs-server# 静态IP配置nmcli connection modify ens33 ipv4.method manual ipv4.address10.1.8.20/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyes# 重启网卡生效nmcli connection up ens33

3.2 nfs-client1 配置

hostnamectl set-hostname nfs-client1 nmcli connection modify ens33 ipv4.method manual ipv4.address10.1.8.21/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyesnmcli connection up ens33

3.3 nfs-client2 配置

hostnamectl set-hostname nfs-client2 nmcli connection modify ens33 ipv4.method manual ipv4.address10.1.8.22/24 ipv4.gateway10.1.8.2 ipv4.dns10.1.8.2 autoconnectyesnmcli connection up ens33

四、NFS 服务端完整部署(10.1.8.20)

4.1 安装依赖包

NFS 核心工具:nfs-utils,本次实验同步安装 Apache 用于Web测试

yuminstall-ynfs-utils httpd

4.2 创建共享目录并配置属主

Web服务运行用户为 apache,目录归属 apache 用户,避免权限报错

mkdir-p/shares/webappchownapache /shares/webapp/

4.3 开机自启并立即启动 NFS 服务

systemctlenablenfs-server--now

4.4 防火墙放行 NFS 相关服务

临时放行 + 永久写入防火墙规则

# 临时生效firewall-cmd --add-service=nfs --add-service=rpc-bind --add-service=mountd# 永久保存firewall-cmd --add-service=nfs --add-service=rpc-bind --add-service=mountd--permanent

4.5 NFS 共享导出配置详解

核心配置文件
  1. 主配置:/etc/exports
  2. 扩展配置目录:/etc/exports.d/,目录下以.exports结尾的文件自动加载,推荐使用该目录拆分配置,避免改坏全局配置。
配置语法说明
共享目录 客户端匹配规则(权限参数)

客户端匹配支持格式:

  1. 主机域名:nfs-client1.chenxin.cloud
  2. 域名通配:*.chenxin.cloud(chenxin 域下所有主机)
  3. 单IP:10.1.8.21
  4. 网段:10.1.8.0/24/10.1.8.0/255.255.255.0
  5. IPv6地址/网段:fde2:6494:1e09:2::20fde2:6494:1e09:2::/64

多客户端空格分隔:

/shares/webapp10.1.8.0/24 client.chenxin.cloud *.example.net
常用权限参数
  1. rw:读写权限;默认ro只读;
  2. no_root_squash:关闭root压制。默认客户端root访问会被转换成nobody用户,开启后保留真实root权限;
  3. sync:同步写入,数据落盘后再返回结果,保证数据安全(默认开启)。
实战配置:允许10.1.8.0/24网段读写共享

编辑主配置文件

vim/etc/exports

写入内容:

/shares/webapp10.1.8.0/24(rw)

4.6 重载共享配置生效

修改 exports 后必须重载,三种方式任选其一:

# 重载导出配置(推荐)exportfs-r# 重载nfs服务systemctl reload nfs-server# 查看并同步所有导出规则exportfs-av

4.7 查看当前已发布的共享目录

# 简洁查看exportfs# 完整查看包含权限参数exportfs-v

输出示例:

/shares/webapp10.1.8.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

五、客户端挂载与权限测试(nfs-client1)

5.1 客户端安装工具包

yuminstall-ynfs-utils httpd# 查看apache用户ID(所有节点apache uid=48,保证跨机权限统一)idapache# 启动httpd并开机自启systemctlenablehttpd--now# 实验环境直接关闭防火墙简化操作systemctl stop firewalld

5.2 查看服务端发布的共享列表

showmount-e10.1.8.20

返回结果:

Export listfor10.1.8.20: /shares/webapp10.1.8.0/24

5.3 手动挂载NFS共享

将服务端/shares/webapp挂载到本地网站根目录/var/www/html

mount-tnfs10.1.8.20:/shares/webapp /var/www/html

5.4 验证挂载状态

df-h|grepwww

输出:

10.1.8.20:/shares/webapp 50G4.4G 46G9% /var/www/html

5.5 默认root_squash权限测试

默认配置开启root压制,客户端root无法创建文件:

touch/var/www/html/root-f1# 报错:Permission denied

切换apache用户可正常写入:

su-l-s/bin/bash apacheechoapache website>/var/www/html/web1.html


浏览器访问http://10.1.8.21/web1.html,页面输出apache website,Web服务读取NFS共享文件成功。

5.6 修改服务端配置关闭root压制

1. 修改exports配置
vim/etc/exports

更新配置行:

/shares/webapp10.1.8.0/24(rw,no_root_squash)
2. 重载配置并验证参数
exportfs-rexportfs-v

参数中可见no_root_squash代表关闭root压制。

3. 重新测试root写入

客户端root可正常创建文件:

touch/var/www/html/root-f1ls/var/www/html# 输出 root-f1 web1.html

六、第二台客户端 nfs-client2 同步挂载测试

6.1 客户端基础环境部署

yuminstall-ynfs-utils httpdidapache systemctlenablehttpd--nowsystemctl stop firewalld

6.2 查看共享并挂载

showmount-e10.1.8.20mount-tnfs10.1.8.20:/shares/webapp /var/www/htmldf-h|grepwww

6.3 验证多客户端数据互通

在 client1 创建文件:

touch/var/www/html/xiyangyang

client2 直接可见该文件,证明两台Web节点共用同一存储:

ls/var/www/html/# root-f1 web1.html xiyangyang

七、集群Web共享存储实战验证

在 nfs-client1 首页写入内容:

echoheihei>/var/www/html/index.html

分别访问两台Web节点地址:

  • http://10.1.8.21
  • http://10.1.8.22

两台服务器页面完全一致,实现集群统一静态资源存储。

八、开机自动持久化挂载(/etc/fstab)

手动挂载重启后失效,写入/etc/fstab实现开机自动挂载。

8.1 nfs-client1 配置开机挂载

vim/etc/fstab

文件末尾追加一行:

10.1.8.20:/shares/webapp /var/www/html nfs defaults00

8.2 nfs-client2 同步配置

vim/etc/fstab

同样添加:

10.1.8.20:/shares/webapp /var/www/html nfs defaults00

8.3 重启验证自动挂载

两台客户端分别重启:

reboot

重启后执行挂载查询,无需手动mount即可自动加载:

df-h|grepwww# 依然能看到NFS挂载条目

九、总结

  1. NFS 依靠 RPC 端口映射实现跨主机文件共享,架构简单、适配 Linux 集群场景;
  2. root_squash是核心安全机制,线上环境不建议随意开启no_root_squash
  3. Web 集群搭配 NFS 共享静态资源,可实现多节点网站内容完全同步;
  4. 生产环境优化建议:使用 NFSv4、搭配防火墙 IP 白名单、结合 VPN 提升安全性,避免公网直接暴露 NFS 服务。
http://www.jsqmd.com/news/1362533/

相关文章:

  • Crow Translate:轻量级多引擎翻译工具完整指南
  • 即时通讯软件厂家哪家好?企业应该根据需求选择 - BeeWorks
  • 无磁弹簧企业推荐几家?2026年采购决策指南 - 热点品牌推荐
  • 上海交通大学LaTeX幻灯片模板终极指南:告别排版烦恼,5分钟创建专业演示
  • 如何用Deep-Live-Cam实现三键操作的实时AI换脸创作
  • 图解TLS/SSL握手全过程:从加密原理到实战排查
  • 2026年苏州财税服务公司推荐:苏州公司注册、苏州代理记账、苏州财税代办、苏州工商资质服务优选指南 - 海棠依旧大
  • 如何快速掌握XUnity.AutoTranslator:Unity游戏翻译神器完全指南
  • Dystopia C2:揭秘利用Discord/Telegram/GitHub作为控制端的Windows远程管理工具
  • 雁塔区专业挂机空调安装服务选哪家 卓联航达制冷(雁塔区销售部) - 热点品牌推荐
  • 2026年逆向磨砂吊牌公司哪家好 品牌商选购实用参考指南 - 热点品牌推荐
  • 2026年公路路沿石热门厂家及工程采购实用参考 - 热点品牌推荐
  • 从零开始学习GDScript:28课免费教程带你掌握游戏开发核心技能
  • 如何轻松降级你的经典iPhone和iPad?LeetDown完整实用指南
  • 2026年挑选运动护膝厂家需要注意这几点 - 热点品牌推荐
  • 2026 年庆城正规的简约风球场围栏网供货厂家找哪家,打羽毛球总被球滚走?试试这玩意儿,让场地规整又好看还不占地儿-铭丰金属制品 - 行业推荐官[官方】--
  • Windows终极优化指南:3步掌握WinUtil,告别系统卡顿与隐私泄露
  • 河北g型螺杆泵厂家电话查询 工业泵选型采购实用参考指南 - 热点品牌推荐
  • # AI视频生成2026:多模态控制与工程化落地的技术跃迁
  • 【电商项目】商品服务模块的问题解决与代码逻辑思考
  • ProperTree:终极跨平台Plist编辑器,让OpenCore配置变得如此简单
  • 星盘接口开发文档:星历表接口指南
  • 找2026年高速糊箱机生产厂家联系方式,选厂参考元鼎包装机械 - 热点品牌推荐
  • 【Bug已解决】[Version 0.39.0]AttributeError: ‘CLIPTextModel‘ object has no attribute ‘text_model‘ WHEN SE
  • VRChat改模开发环境搭建指南:VCC、SDK与Unity版本兼容性全解析
  • 【转载】STM32使用PWM驱动无源蜂鸣器实现8bit音乐播放
  • ​ ⛳️赠与读者[特殊字符]第一部分——内容介绍考虑多渗透率电动汽车接入的配电网承载能力评估研究摘要大规模电动汽车无序充电会加剧配电网电压越限、线路与变压器过载、负荷峰谷差扩大等运
  • 2026年芝麻白603路沿石直销厂商实力 - 热点品牌推荐
  • 前几天家庭聚会,我二叔喝了点酒
  • 【Bug已解决】`DiffusionPipeline.download()` breaks with huggingface_hub>=1.22.0 in offline mode (Incomple