集群多台 Web 同步文件太麻烦?NFS 简单搞定统一存储
Linux NFS 网络文件服务一、NFS 基础概念介绍1.1 什么是 NFSNFSNetwork File System网络文件系统是经典跨主机文件共享技术能让客户端像访问本地磁盘一样透明读写远程服务器共享目录广泛用于 Linux 集群统一存储、企业内部文件共享场景。1.2 NFS 版本迭代NFSv3使用最广泛无状态协议支持大文件兼容 UDP/TCP 传输性能稳定NFSv4新增 Kerberos 安全认证、状态化连接、完善文件锁安全性大幅提升。1.3 核心架构C/S 架构NFS 服务端存放原始文件运行 nfs-server、rpc 相关进程通过配置文件导出共享目录管控客户端访问权限NFS 客户端通过mount将远程共享挂载到本地目录操作逻辑和本地文件完全一致。1.4 工作原理RPC 远程调用机制NFS 不固定端口依赖 RPCportmap做端口协调完整流程注册服务端 NFS 启动向 portmap 注册自身监听端口端口查询客户端先访问服务端 portmap获取 NFS 服务端口挂载鉴权客户端发起挂载请求服务端校验客户端IP/域名权限读写转发挂载完成后所有文件读写操作通过 RPC 转发给服务端执行结果回传给客户端权限校验依靠 Linux UID/GID 用户组机制控制文件读写权限。1.5 传输与协议特性无状态NFSv3服务端不保存客户端连接状态断网重连无需恢复会话容错简单双传输协议UDP低开销适合局域网实时小文件TCP面向连接可靠传输大数据、公网环境首选。1.6 NFS 优缺点优势访问透明远程文件和本地操作无感知跨平台支持 Linux、UNIX、macOS性能高效自带缓存机制局域网读写速度优秀配置简单仅需修改 exports 配置文件即可完成共享发布。局限性早期版本安全弱NFSv3 无加密仅靠IP鉴权易被伪造NFSv4 安全增强高安全场景仍需搭配防火墙/VPN强依赖网络延迟、丢包会直接降低读写速度多客户端文件锁逻辑复杂并发写入不当易出现数据不一致。1.7 典型应用场景企业内网办公文件、软件包统一共享Web/数据库集群统一后端存储本篇实战场景路由器、NAS 嵌入式设备简易文件互通。二、实验环境规划使用 CentOS7 系统克隆3台虚拟机规划如下节点名称IP地址角色nfs-server10.1.8.20/24NFS共享存储服务端nfs-client110.1.8.21/24Web客户端节点1nfs-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 ens333.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 ens333.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.204.1 安装依赖包NFS 核心工具nfs-utils本次实验同步安装 Apache 用于Web测试yuminstall-ynfs-utils httpd4.2 创建共享目录并配置属主Web服务运行用户为 apache目录归属 apache 用户避免权限报错mkdir-p/shares/webappchownapache /shares/webapp/4.3 开机自启并立即启动 NFS 服务systemctlenablenfs-server--now4.4 防火墙放行 NFS 相关服务临时放行 永久写入防火墙规则# 临时生效firewall-cmd --add-servicenfs --add-servicerpc-bind --add-servicemountd# 永久保存firewall-cmd --add-servicenfs --add-servicerpc-bind --add-servicemountd--permanent4.5 NFS 共享导出配置详解核心配置文件主配置/etc/exports扩展配置目录/etc/exports.d/目录下以.exports结尾的文件自动加载推荐使用该目录拆分配置避免改坏全局配置。配置语法说明共享目录 客户端匹配规则(权限参数)客户端匹配支持格式主机域名nfs-client1.chenxin.cloud域名通配*.chenxin.cloudchenxin 域下所有主机单IP10.1.8.21网段10.1.8.0/24/10.1.8.0/255.255.255.0IPv6地址/网段fde2:6494:1e09:2::20、fde2:6494:1e09:2::/64多客户端空格分隔/shares/webapp10.1.8.0/24 client.chenxin.cloud *.example.net常用权限参数rw读写权限默认ro只读no_root_squash关闭root压制。默认客户端root访问会被转换成nobody用户开启后保留真实root权限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-av4.7 查看当前已发布的共享目录# 简洁查看exportfs# 完整查看包含权限参数exportfs-v输出示例/shares/webapp10.1.8.0/24(sync,wdelay,hide,no_subtree_check,secsys,rw,secure,root_squash,no_all_squash)五、客户端挂载与权限测试nfs-client15.1 客户端安装工具包yuminstall-ynfs-utils httpd# 查看apache用户ID所有节点apache uid48保证跨机权限统一idapache# 启动httpd并开机自启systemctlenablehttpd--now# 实验环境直接关闭防火墙简化操作systemctl stop firewalld5.2 查看服务端发布的共享列表showmount-e10.1.8.20返回结果Export listfor10.1.8.20: /shares/webapp10.1.8.0/245.3 手动挂载NFS共享将服务端/shares/webapp挂载到本地网站根目录/var/www/htmlmount-tnfs10.1.8.20:/shares/webapp /var/www/html5.4 验证挂载状态df-h|grepwww输出10.1.8.20:/shares/webapp 50G4.4G 46G9% /var/www/html5.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 websiteWeb服务读取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 firewalld6.2 查看共享并挂载showmount-e10.1.8.20mount-tnfs10.1.8.20:/shares/webapp /var/www/htmldf-h|grepwww6.3 验证多客户端数据互通在 client1 创建文件touch/var/www/html/xiyangyangclient2 直接可见该文件证明两台Web节点共用同一存储ls/var/www/html/# root-f1 web1.html xiyangyang七、集群Web共享存储实战验证在 nfs-client1 首页写入内容echoheihei/var/www/html/index.html分别访问两台Web节点地址http://10.1.8.21http://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 defaults008.2 nfs-client2 同步配置vim/etc/fstab同样添加10.1.8.20:/shares/webapp /var/www/html nfs defaults008.3 重启验证自动挂载两台客户端分别重启reboot重启后执行挂载查询无需手动mount即可自动加载df-h|grepwww# 依然能看到NFS挂载条目九、总结NFS 依靠 RPC 端口映射实现跨主机文件共享架构简单、适配 Linux 集群场景root_squash是核心安全机制线上环境不建议随意开启no_root_squashWeb 集群搭配 NFS 共享静态资源可实现多节点网站内容完全同步生产环境优化建议使用 NFSv4、搭配防火墙 IP 白名单、结合 VPN 提升安全性避免公网直接暴露 NFS 服务。

相关新闻

BepInEx.ConfigurationManager:让游戏插件配置变得前所未有的简单

BepInEx.ConfigurationManager:让游戏插件配置变得前所未有的简单

BepInEx.ConfigurationManager:让游戏插件配置变得前所未有的简单 【免费下载链接】BepInEx.ConfigurationManager Plugin configuration manager for BepInEx 项目地址: https://gitcode.com/gh_mirrors/be/BepInEx.ConfigurationManager 还在为游戏插件的复…

2026/10/18 13:02:43 阅读更多 →
Obsidian插件汉化终极指南:5分钟让英文插件变中文的完整方案

Obsidian插件汉化终极指南:5分钟让英文插件变中文的完整方案

Obsidian插件汉化终极指南:5分钟让英文插件变中文的完整方案 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 还在为Obsidian插件全是英文界面而烦恼吗?想要轻松将心爱的插件变成中文版,…

2026/10/18 13:02:47 阅读更多 →
从零开始掌握Ryujinx:高性能Switch模拟器完整使用指南

从零开始掌握Ryujinx:高性能Switch模拟器完整使用指南

从零开始掌握Ryujinx:高性能Switch模拟器完整使用指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上畅玩《塞尔达传说:王国之泪》、《集合啦&#…

2026/10/19 18:59:52 阅读更多 →

最新新闻

智能家居Agent落地实践:OpenClaw技能编排与避坑指南

智能家居Agent落地实践:OpenClaw技能编排与避坑指南

1. 从一场产业园沙龙说起:智能家居Agent到底在解决什么问题前阵子参加了一场在智能家居产业园举办的社区沙龙,主题围绕智能体(Agent)在家庭场景里的落地展开。现场来了做硬件的、做云平台的、做语音交互的,还有几位专门…

2026/10/20 9:17:26 阅读更多 →
Python文件操作避坑指南:从open()到csv读写与编码实战

Python文件操作避坑指南:从open()到csv读写与编码实战

最近帮一位刚入门Python的朋友调脚本,他照着网上的教程写文件读写,结果光一个“中文乱码”就折腾了一晚上,紧接着又踩了“文件不存在”和“路径找不到”的连环坑。这事让我觉得,文件读写虽然看起来是Python最基础的一课&#xff0…

2026/10/20 9:17:26 阅读更多 →
大一微积分核心知识梳理:极限、导数与积分的高效复习指南

大一微积分核心知识梳理:极限、导数与积分的高效复习指南

简介:面向大一学生的微积分基本知识点整理资料,以可编辑的Word电子文档形式呈现,覆盖函数、极限与无穷小量、连续性、导数与不定积分等核心模块。资料从函数定义域和对应法则讲起,结合数形结合方法分析单调性、周期性、奇偶性&…

2026/10/20 9:17:26 阅读更多 →
难题揭榜退稿复盘:从概念拼盘到可验证技术方案的五个教训

难题揭榜退稿复盘:从概念拼盘到可验证技术方案的五个教训

我最近跟一个"难题揭榜"活动较上劲了。茶思屋难题揭榜第3期如期开榜,一共放出5道核心题,聚焦在智能计算与工程交叉方向上。我花了两周时间把每道题都拆了一遍,整理了一份接近长文的解题思路,顺手投了过去。结果两天后收…

2026/10/20 9:17:26 阅读更多 →
JavaScript AST反混淆实战:破解默认难度混淆的核心方法

JavaScript AST反混淆实战:破解默认难度混淆的核心方法

1. 为什么“默认难度”的AST反混淆反而最考验基本功“AST反混淆实战-默认难度”——这个标题乍看平平无奇,甚至有点刻意低调。没有“零基础速成”“一键破解”这类流量词,也没有“高阶进阶”“逆向天花板”之类的情绪拉满的修饰。但恰恰是这个“默认难度…

2026/10/20 9:17:26 阅读更多 →
AI生成架构图与流程图:10分钟完成传统1天工作

AI生成架构图与流程图:10分钟完成传统1天工作

1. 为什么架构图和流程图成了“时间黑洞”?——从真实协作场景说起我带过不下二十个跨职能项目,每次开需求评审会,总有人提前半小时到会议室,默默打开Visio或draw.io,手指在键盘上敲得飞快,嘴里还念叨着“这…

2026/10/20 9:16:21 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →