openEuler 22.03 NFS + mergerfs 分布式存储池部署完整文档

发布时间:2026/7/23 21:43:21

openEuler 22.03 NFS + mergerfs 分布式存储池部署完整文档 openEuler 22.03 NFS mergerfs 分布式存储池部署完整文档文档概述本文档详细记录了在 openEuler 22.03 系统上将多台存储服务器的/bak目录通过 NFS 共享并在客户端使用 mergerfs 合并为统一存储池的完整流程。架构示意图┌─────────────────────────────────────────────────────────────────┐ │ 客户端服务器 (192.168.20.3) │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ /bak (mergerfs 统一挂载点) │ │ │ │ 总容量 本地138T NFS14 139T NFS19 139T ... │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │localbak │ │ nfs14 │ │ nfs19 │ │ nfs20 │ │ │ │(本地存储)│ │(NFS挂载) │ │(NFS挂载) │ │(NFS挂载) │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 本地存储设备 │ │192.168.20.14│ │192.168.20.19│ │192.168.20.20│ │ /bak 138T │ │ /bak 139T │ │ /bak 139T │ │ /bak 139T │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘第一部分存储服务器NFS 服务端配置适用于所有需要共享/bak目录的存储服务器如 192.168.20.14、192.168.20.19、192.168.20.20 等。1.1 安装 NFS 服务sudodnfinstall-ynfs-utilsNFS 服务的实现依赖于 RPCRemote Procedure Call机制RPC 服务rpcbind负责统一管理 NFS 的动态端口。1.2 启动并启用服务按照正确的顺序启动服务必须先启动 rpcbind再启动 nfs-server因为 NFS 服务需要向 RPC 注册端口信息。sudosystemctlenablerpcbind nfs-serversudosystemctl start rpcbindsudosystemctl start nfs-server1.3 配置共享目录/etc/exports编辑 NFS 核心配置文件/etc/exports定义需要共享的目录和访问权限sudovi/etc/exports添加以下内容将192.168.20.3替换为实际的客户端 IP/bak 192.168.20.3(rw,sync,no_root_squash,no_subtree_check)参数说明参数说明/bak要共享的目录192.168.20.3允许访问的客户端 IP可指定网段如192.168.20.0/24rw可读可写sync同步写入磁盘数据更安全推荐生产环境使用async异步写入性能更高但有数据丢失风险谨慎使用no_root_squash允许客户端 root 用户保持 root 权限有安全风险按需使用no_subtree_check禁用子目录检查提升性能安全建议生产环境中建议使用rw,sync,no_root_squash并严格限制客户端 IP。1.4 使配置生效sudoexportfs-r修改 NFS 配置后无需重启服务执行exportfs -r即可使/etc/exports的变更生效。验证共享是否成功sudoexportfs-v# 或showmount-elocalhost1.5 配置防火墙如果防火墙已开启需要放行 NFS 相关服务sudofirewall-cmd--permanent--add-servicenfssudofirewall-cmd--permanent--add-servicemountdsudofirewall-cmd--permanent--add-servicerpc-bindsudofirewall-cmd--reload说明NFS 依赖 RPC 服务需要放行 rpcbind端口 111和 nfs端口 2049等相关服务。第二部分客户端服务器配置在客户端服务器192.168.20.3上执行以下操作。2.1 安装 NFS 客户端工具sudodnfinstall-ynfs-utils2.2 准备本地存储如果客户端有本地存储设备如/dev/mapper/vgdata-lvdata138TB需要将其挂载到独立目录供 mergerfs 使用# 创建挂载点sudomkdir-p/mnt/localbak# 挂载本地存储设备请根据实际设备路径调整sudomount/dev/mapper/vgdata-lvdata /mnt/localbak2.3 挂载远程 NFS 存储为每个远程存储服务器创建独立的挂载点并挂载# 创建挂载点sudomkdir-p/mnt/nfs14 /mnt/nfs19# 挂载远程存储使用性能优化参数sudomount-tnfs-orw,hard,intr,rsize1048576,wsize1048576,noatime192.168.20.14:/bak /mnt/nfs14sudomount-tnfs-orw,hard,intr,rsize1048576,wsize1048576,noatime192.168.20.19:/bak /mnt/nfs19挂载参数说明参数说明rw读写模式hard硬挂载请求会持续重试直到成功保证数据一致性intr允许中断卡住的 NFS 操作rsize1048576读取块大小设为 1MB提升大文件传输吞吐量wsize1048576写入块大小设为 1MBnoatime不更新访问时间戳减少元数据写入开销验证挂载是否成功df-h/mnt/nfs14 /mnt/nfs19第三部分mergerfs 存储池配置3.1 安装 mergerfs# 从 GitHub 下载 RPM 包安装以 2.40.2 版本为例wgethttps://github.com/trapexit/mergerfs/releases/download/2.40.2/mergerfs-2.40.2-1.el8.x86_64.rpmsudodnfinstall-y./mergerfs-2.40.2-1.el8.x86_64.rpm最新版本请访问 mergerfs releases 获取。3.2 创建 mergerfs 合并挂载点# 如果 /bak 已存在且被占用先处理sudoumount/bak2/dev/nullsudomkdir-p/bak3.3 挂载 mergerfs合并所有分支将所有存储分支本地 所有远程 NFS合并到/baksudomergerfs-odefaults,allow_other,category.createmfs,minfreespace10240G /mnt/localbak:/mnt/nfs14:/mnt/nfs19 /bak参数说明参数说明defaults使用默认选项allow_other允许其他用户访问需在/etc/fuse.conf中启用user_allow_othercategory.createmfs创建新文件时选择剩余空间最多的分支most free spaceminfreespace10240G每个分支至少保留 10TB 空闲空间3.4 验证合并结果# 查看总容量应约为所有分支容量之和df-h/bak# 查看各分支独立容量df-h/mnt/localbak /mnt/nfs14 /mnt/nfs19# 查看文件列表ls/bak第四部分开机自动挂载systemd 服务4.1 配置 /etc/fstab编辑/etc/fstab确保所有存储分支在开机时自动挂载sudovi/etc/fstab添加以下内容# 本地存储挂载到 /mnt/localbak而非 /bak /dev/mapper/vgdata-lvdata /mnt/localbak xfs defaults 0 0 # 远程 NFS 存储 192.168.20.14:/bak /mnt/nfs14 nfs rw,hard,intr,rsize1048576,wsize1048576,noatime,_netdev 0 0 192.168.20.19:/bak /mnt/nfs19 nfs rw,hard,intr,rsize1048576,wsize1048576,noatime,_netdev 0 0_netdev选项确保网络就绪后再尝试挂载 NFS避免系统启动卡住。测试 fstab 配置是否正确sudomount-a4.2 创建 systemd 服务创建服务文件/etc/systemd/system/mergerfs-bak.servicesudovi/etc/systemd/system/mergerfs-bak.service写入以下内容[Unit] DescriptionMergerfs pool for /bak Requiresnetwork-online.target Afternetwork-online.target remote-fs.target Wantsremote-fs.target [Service] Typesimple ExecStartPre/bin/mount -a ExecStart/usr/bin/mergerfs -f -o defaults,allow_other,category.createmfs,minfreespace10240G /mnt/localbak:/mnt/nfs14:/mnt/nfs19 /bak ExecStop/bin/umount /bak Restarton-failure [Install] WantedBymulti-user.target注意Typesimplemergerfs 默认在前台运行。-f选项强制前台运行确保 systemd 能正确管理进程。ExecStartPre/bin/mount -a确保 fstab 中的所有挂载已生效。4.3 启用并启动服务sudosystemctl daemon-reloadsudosystemctlenablemergerfs-bak.servicesudosystemctl start mergerfs-bak.servicesudosystemctl status mergerfs-bak.service第五部分热添加新 NFS 分支在线扩容当需要添加新的存储服务器如 192.168.20.20时可以使用 mergerfs 的运行时接口进行热添加无需停机。5.1 挂载新 NFS 到临时目录sudomkdir-p/mnt/nfs20sudomount-tnfs-orw,hard,intr,rsize1048576,wsize1048576,noatime192.168.20.20:/bak /mnt/nfs205.2 验证挂载成功df-h/mnt/nfs205.3 通过控制接口热添加分支mergerfs 提供了伪文件/mountpoint/.mergerfs用于运行时修改配置和执行命令。echoadd /mnt/nfs20|sudotee/bak/.mergerfs/ctl或者使用setfattr命令sudosetfattr-nuser.mergerfs.branches-v/mnt/nfs20/bak/.mergerfs5.4 验证扩容成功df-h/bak# 总容量应增加约 139TB5.5 持久化配置确保重启后保留① 更新/etc/fstabecho192.168.20.20:/bak /mnt/nfs20 nfs rw,hard,intr,rsize1048576,wsize1048576,noatime,_netdev 0 0|sudotee-a/etc/fstab② 更新 systemd 服务文件编辑/etc/systemd/system/mergerfs-bak.service在分支列表中添加/mnt/nfs20ExecStart/usr/bin/mergerfs -f -o defaults,allow_other,category.createmfs,minfreespace10240G /mnt/localbak:/mnt/nfs14:/mnt/nfs19:/mnt/nfs20 /bak③ 重载 systemdsudosystemctl daemon-reload第六部分性能优化针对 64 核 188GB 内存的高性能服务器可以进行以下优化6.1 NFS 客户端参数优化在挂载时使用以下参数mount-tnfs-o\rw,hard,intr,\rsize4194304,wsize4194304,\noatime,nodiratime,\timeo300,retrans3,\tcp\192.168.20.14:/bak /mnt/nfs14参数说明rsize4194304读取块大小设为 4MB需服务端支持wsize4194304写入块大小设为 4MBnodiratime禁用目录访问时间更新timeo300超时时间设为 30 秒局域网环境可适当降低retrans3重传次数6.2 内核网络调优编辑/etc/sysctl.conf# 最大 TCP 缓冲区提升至 64MB net.core.rmem_max 67108864 net.core.wmem_max 67108864 # TCP 自动调优缓冲区范围 net.ipv4.tcp_rmem 4096 87380 33554432 net.ipv4.tcp_wmem 4096 65536 33554432使配置生效sudosysctl-p6.3 服务端优化在 NFS 服务端各存储服务器增加 nfsd 线程数编辑/etc/nfs.conf[nfsd] threads128重启服务sudosystemctl restart nfs-server6.4 openEuler eNFS 特性可选openEuler 提供了增强的 NFS 客户端 eNFS支持多链路负载均衡可显著提升性能和可靠性。当前版本负载均衡仅支持NFSv3。配置文件/etc/enfs/config.inipath_detect_interval10 path_detect_timeout10 multipath_timeout0 multipath_disable0使用 eNFS 挂载mount-tnfs-overs3,localaddrs192.168.20.3,remoteaddrs192.168.20.14192.168.20.14:/bak /mnt/nfs14第七部分运维管理命令速查7.1 查看存储池状态# 查看合并总容量df-h/bak# 查看各分支独立容量df-h/mnt/localbak /mnt/nfs14 /mnt/nfs19# 查看当前 mergerfs 挂载选项mount|grepmergerfs# 查看控制接口信息如果可用cat/bak/.mergerfs/ctl2/dev/null7.2 管理 mergerfs 服务# 启动服务sudosystemctl start mergerfs-bak.service# 停止服务sudosystemctl stop mergerfs-bak.service# 重启服务sudosystemctl restart mergerfs-bak.service# 查看服务状态sudosystemctl status mergerfs-bak.service# 查看服务日志sudojournalctl-xeumergerfs-bak.service-n507.3 管理 NFS 挂载# 查看所有 NFS 挂载mount|grepnfs# 手动挂载所有 fstab 条目sudomount-a# 卸载 NFS 挂载sudoumount/mnt/nfs14# 查看服务端共享列表客户端showmount-e192.168.20.14第八部分故障排查8.1 服务启动失败# 查看详细错误sudosystemctl status mergerfs-bak.servicesudojournalctl-xeumergerfs-bak.service-n50常见原因及解决方案问题解决方案target is busy使用sudo fuser -km /bak强制结束占用进程unknown option controlmergerfs 版本不支持该选项移除即可分支路径不存在检查 NFS 是否已正确挂载到/mnt/nfs*服务启动后立即退出在ExecStart中添加-f选项强制前台运行8.2 热添加失败# 检查控制接口是否存在ls-la/bak/.mergerfs如果/bak/.mergerfs是普通文件而非目录删除后重新挂载 mergerfssudorm-f/bak/.mergerfssudoumount/baksudomergerfs-odefaults,allow_other,category.createmfs,minfreespace10240G /mnt/localbak:/mnt/nfs14:/mnt/nfs19 /bak8.3 NFS 挂载卡住# 使用软挂载intr 允许中断mount-tnfs-ointr,timeo30192.168.20.14:/bak /mnt/nfs14# 检查服务端 NFS 服务状态systemctl status nfs-server# 在服务端执行# 检查防火墙sudofirewall-cmd --list-all# 在服务端执行附录常用命令速查表操作命令安装 NFSsudo dnf install -y nfs-utils配置共享sudo vi /etc/exports生效共享配置sudo exportfs -r查看共享showmount -e localhost挂载 NFSsudo mount -t nfs IP:/dir /mountpoint安装 mergerfssudo dnf install -y ./mergerfs-*.rpm合并存储池sudo mergerfs -o ... branch1:branch2 /mountpoint热添加分支echo add /new/branch | sudo tee /mountpoint/.mergerfs/ctl查看服务状态sudo systemctl status mergerfs-bak.service查看日志sudo journalctl -xeu mergerfs-bak.service -n 50文档版本1.0 | 更新日期2026-07-13 | 适用环境openEuler 22.03

相关新闻