公司动态
集群多台 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 服务。