参考网址Requirements for Chunkservers | MooseFS Documentationiphostsrole192.168.73.171server1master192.168.73.172server2chunkserver192.168.73.173server3chunkserver192.168.73.174server4clientmfsmaster管理主节点保存全集群元数据目录树、文件权限、文件分块位置统一调度读写社区版默认单点元数据常驻内存文件越多内存占用越高。mfschunkserver数据存储节点真正存放业务数据文件默认切分为64MB 的 chunk 块支持副本复制 / 纠删码 EC 冗余节点可横向在线扩容、下线维护读写并行分担压力。mfsmetalogger元数据日志备份节点持续同步 master 元数据操作日志周期性拉取完整元数据快照master 宕机后可手动升级 metalogger 为新 master用于故障恢复社区版无自动切换MooseFS。mfsmount客户端FUSE 实现挂载程序mfsmount /mnt/mfs -H mfsmaster挂载使用Linux、FreeBSD、macOS 支持PRO 版提供 Windows 原生客户端MooseFS。MooseFs四台机子全部操作导入 MooseFS 官方 GPG 密钥 配置 yum 软件源[rootserver1 ~]# curl https://repository.moosefs.com/RPM-GPG-KEY-MooseFS /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS[rootserver1 ~]# curl http://repository.moosefs.com/MooseFS-4-el9.repo /etc/yum.repos.d/MooseFS.repo分别安装对应的软件[rootserver1 ~]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli[rootserver2 ~]# yum install moosefs-chunkserver[rootserver3 ~]# yum install moosefs-chunkserver[rootserver4 ~]# yum install moosefs-client[rootserver5 ~]# yum install moosefs-chunkserver添加master解析五台机子都添加所有节点必须能解析mfsmaster指向 server1后续客户端、chunkserver 均使用该域名通信。Master Server设置开机自启[rootserver1 ~]# systemctl enable --now moosefs-gui[rootserver1 ~]# systemctl enable --now moosefs-master查看端口是否正常开启[rootserver1 ~]# netstat -antlp浏览器访问192.168.73.171:9425chunkservers操作步骤添加新磁盘----分区---格式化--挂载server2 server3添加新磁盘MooseFS 的 ChunkServer严禁直接使用系统盘存放 chunk 数据生产环境必须使用独立数据磁盘这里演示 VMware 虚拟机新增 NVMe 磁盘并格式化挂载给 mfschunkserver 使用。注意关闭虚拟机添加避免出现引导磁盘顺序混乱问题查看磁盘添加是否成功[rootserver2 ~]# fdisk -l创建分区[rootserver2 ~]# fdisk /dev/nvme0n2格式化[rootserver2 ~]# mkfs.xfs /dev/nvme0n2p1注意这里填写的是刚刚划分出来的分区查看UUID[rootserver2 ~]# blkid/dev/nvme0n2p1: UUIDc7e76afd-60a5-46a9-8619-4f5f09349ffb TYPExfs PARTUUID47b36de4-01写入fstab配置文件[rootserver2 ~]# vim /etc/fstab创建挂载点[rootserver2 ~]# mkdir /mnt/ssd01添加挂载路径[rootserver2 ~]# vim /etc/mfs/mfshdd.cfg刷新服务[rootserver2 ~]# systemctl daemon-reload挂载[rootserver2 ~]# mount -adf 查看挂载效果修改权限否则启动失败MooseFS 运行用户mfs需要目录读写权限[rootserver2 ~]# chown mfs.mfs /mnt/ssd01[rootserver2 ~]# systemctl enable --now moosefs-chunkserverserver3同理Clientserver4通过 FUSE 工具mfsmount将远端 MooseFS 分布式存储挂载到本地目录像普通磁盘一样读写文件无需修改业务代码。[rootserver4 ~]# mkdir -p /mnt/mfs[rootserver4 ~]# mfsmount /mnt/mfs -H mfsmaster这里的主机名称一定要和一开始填写的解析名相同网页查看server5 新建部署chunkserver把分布式数据块chunk存到这个挂载目录下面MooseFS 支持分层存储 一部分 ChunkServer 用 SSD热数据高速存储一部分 ChunkServer 用 HDD冷数据大容量存储通过标签区分指定文件存在固态或者机械盘上docs.moose...。mkdir /mnt/hdd01chown mfs.mfs /mnt/hdd01cd /etc/mfs/vim mfshdd.cfg[rootserver5 ~]# systemctl enable --now moosefs-chunkserver标签命名建议S 代表 SSD 高性能节点H 代表 HDD 大容量归档节点A/B/C 为机房 / 机架分组标签默认不指定标签数据可以存入任意可用 ChunkServer设置标签约束后副本只会调度到拥有对应标签的节点[rootserver2 ~]# vim /etc/mfs/mfschunkserver.cfg这里注意格式逗号我开始没有报错但后面关机重启的时候爆大雷[rootserver2 ~]# systemctl reload moosefs-chunkserver.serviceMooseFS Master 主备高可用完整部署流程iSCSI 共享存储 PacemakerMooseFS 的mfsmaster 是整个集群唯一调度元数据节点单点核心一旦宕机整个 MFS 不可读写。 方案思路iSCSI提供共享块存储存放 Master 全部元数据元数据两份主机共用同一份磁盘保证数据一致PacemakerCorosync双机高可用集群管理器实现故障自动切换VIP虚拟 IP对外统一访问入口切换时 VIP 自动漂移资源组顺序iSCSI 登录 → 挂载共享磁盘 → 启动 mfsmaster → 绑定 VIPPCS高可用实验环境下关闭防火墙SELinux,设置时间同步server1192.168.73.171mfsmasterserver5192.168.73.175mfsmaster备用节点VIP192.168.73.100 后续直接使用此VIP完整识别连接集群名称ha-cluster1 5 同样操作开启高可用仓库Rocky Linux 9 默认没有启用 HighAvailability高可用仓库pacemaker、pcs、corosync等高可用组件都存放在这个仓库内这一步就是启用 HA 仓库之后才能正常安装 Pacemaker 集群工具用于 MooseFS Master 主备高可用。[rootserver1 ~]# cd /etc/yum.repos.d/[rootserver1 yum.repos.d]# vim rocky-addons.repo将enabled改成 1[rootserver1 yum.repos.d]# yum list pacemaker安装安装高可用工具[rootserver1 yum.repos.d]# dnf install -y pacemaker corosync pcs fence-agents-all resource-agentshacluster 设置相同密码两台节点密码一致[rootserver1 yum.repos.d]# echo westos |passwd --stdin hacluster开启服务[rootserver1 yum.repos.d]# systemctl enable --now pcsdvim /etc/hostsmfsmaster指向VIP节点认证 仅server1这里Rocky9 和CentOs7 操作有些与不同-u hacluster指定认证用户为 hacluster高可用内置账号两台机器必须提前设置相同密码 执行后交互输入两台机器 hacluster 用户的密码输出Authorized代表认证成功。[rootserver1 yum.repos.d]# pcs host auth server1 server5 -u haclusterCentOs7是pcs cluster auth server1 server5创建集群 ha-cluster这里也 不太一样CentOs:pcs cluster setup--namemycluster server1 server5[rootserver1 yum.repos.d]# pcs cluster setup ha-cluster server1 server5所有节点启用开机自启、启动集群[rootserver1 yum.repos.d]# pcs cluster enable --all[rootserver1 yum.repos.d]# pcs cluster start --all设置环境参数实现环境禁用心跳检测后面讲解 SDB Fence时打开[rootserver1 yum.repos.d]# pcs property set stonith-enabledfalse[rootserver1 yum.repos.d]# pcs property set no-quorum-policyignore查看集群状态[rootserver1 yum.repos.d]# pcs status配置iscsi存储存储 Target192.168.73.174集群节点 server1192.168.73.171server5192.168.73.175VIP192.168.73.100iSCSI IQNiqn.2026-08.com.example:mfsdata配置存储server4添加硬盘作为iscsi共享盘[rootserver4 ~]# dnf install -y targetclitargetcli 是 linux 下配置 iSCSI 共享存储的交互式工具[rootserver4 ~]# systemctl enable --now targettarget iSCSI Target 服务进程负责对外提供共享磁盘进入交互式配置界面/dev/nvme0n2本机独立磁盘整块盘不要提前分区格式化只在客户端其中一台格式化一次[rootserver4 ~]# targetcli[rootserver2 ~]# targetcliWarning: Could not load preferences file /root/.targetcli/prefs.bin.targetcli shell version 2.1.53Copyright 2011-2013 by Datera, Inc and others.For help on commands, type help./ lso- / .................................................................... [...]o- backstores ......................................................... [...]| o- block ............................................. [Storage Objects: 0]| o- fileio ............................................ [Storage Objects: 0]| o- pscsi ............................................. [Storage Objects: 0]| o- ramdisk ........................................... [Storage Objects: 0]o- iscsi ....................................................... [Targets: 0]o- loopback .................................................... [Targets: 0]/cd /backstores//backstorescd block/backstores/blockcreate my_disk /dev/nvme0n2Created block storage object my_disk using /dev/nvmen0n2./backstores/blockcd //cd /iscsi/iscsicreate iqn.2026-08.com.example:mfsdataCreated target iqn.2026-08.com.example:mfsdata.Created TPG 1.Global pref auto_add_default_portaltrueCreated default portal listening on all IPs (0.0.0.0), port 3260./iscsicd iqn.2026-08.com.example:mfsdata//iscsi/iqn.20...ample:mfsdatacd tpg1/luns/iscsi/iqn.20...ata/tpg1/lunscreate /backstores/block/my_diskCreated LUN 0./iscsi/iqn.20...ata/tpg1/lunscd ../iscsi/iqn.20...:mfsdata/tpg1 lso- tpg1 ..................................................................................................... [no-gen-acls, no-auth]o- acls ................................................................................................................ [ACLs: 0]o- luns ................................................................................................................ [LUNs: 1]| o- lun0 ...................................................................... [block/my_disk (/dev/nvme0n2) (default_tg_pt_gp)]o- portals .......................................................................................................... [Portals: 1]o- 0.0.0.0:3260 ........................................................................................................... [OK]/iscsi/iqn.20...:mfsdata/tpg1cd acls/iscsi/iqn.20...ata/tpg1/aclscreate iqn.2026-08.com.example:clientCreated Node ACL for iqn.2026-08.com.example:clientCreated mapped LUN 0./iscsi/iqn.20...ge1/tpg1/aclsexitGlobal pref auto_save_on_exittrueConfiguration saved to /etc/target/saveconfig.json配置客户端从这里开始为所有的实验经过存在实验错误和步骤回退后面有解决方案行文叙述整体以实验步骤进行但是会进行阐述说明正确的思路server1 主 mfsmaster安装 iSCSI 客户端工具包[rootserver1 ~]# yum install -y iscsi-initiator-utils.x86_64配置客户端唯一 InitiatorName[rootserver1 ~]# vim /etc/iscsi/initiatorname.iscsi使用 iscsiadm 执行发现指定 Target 服务端 IP示例192.168.73.174[rootserver1 ~]# iscsiadm -m discovery -t st -p 192.168.73.174登录连接远端 iSCSI 块设备[rootserver1 ~]# iscsiadm -m node -l查看iscsi磁盘已就位分区[rootserver1 ~]# fdisk /dev/sda输入m查看帮助n是新建分区p是划分磁盘w是保存退出[rootserver1 ~]# lsblk格式化[rootserver1 ~]# mkfs.xfs /dev/sda1挂载[rootserver1 ~]# mount /dev/sda1 /mnt/我们老师有这样一步操作 /dev/sda1 挂载到 /mnt/ 修改/mnt/权限为 mfs mfs 进入 /var/lib/mfs 复制全部到 /mnt/ 取消挂载 又挂载到 /var/lib/mfs 又取消[rootserver1 ~]# umount /mntmount /dev/sda1 /mnt/chown mfs:mfs /mntcp /var/lib/mfs/* /mnt这一步操作是提前拷贝模版进iscsi共享盘umount /mnt挂载再卸载一次提前发现 iSCSI 磁盘能不能正常挂载避免集群拉起资源的时候才炸。mount /dev/sda1 /var/lib/mfsumount /var/lib/mfs/var/lib/mfs默认服务器本地就有空目录。 如果你不先把模板文件拷贝到 iSCSI 共享盘后续集群挂载失败的时候master 会直接读取本地空目录/mnt只是临时挂载入口真正操作的底层设备永远是/dev/sda1这块 iSCSI 磁盘。 你在/mnt上改权限改的是磁盘里文件本身的属性之后把同一块盘挂载到/var/lib/mfs看到的还是这批文件权限自然继承下来。server5安装master工具[rootserver5 ~]# yum install -y moosefs-master moosefs-cli moosefs-gui[rootserver5 ~]# yum install -y iscsi-initiator-utils.x86_64[rootserver5 ~]# iscsiadm -m discovery -t st -p 192.168.73.174[rootserver5 ~]# vim /etc/iscsi/initiatorname.iscsi从这里开始就是错误的开始建议两台mfsmaster设置不一样的 IQN 为了防止后续虚拟机不停地抖动甚至闪退TCP会话连接虚拟机界面频繁打印告警信息同样的server4进入 进入交互式配置界面,也要将相应的 IQN 添加进去/iscsi/iqn.20...:mfsdata/tpg1cd acls/iscsi/iqn.20...ata/tpg1/aclscreate server5的IQN我这里的配图是当时实验的流程重启 iscsid让 iqn 名称配置生效-m node操作已经发现存储节点-l login登录 iSCSI 共享存储[rootserver5 ~]# systemctl restart iscsid[rootserver5 ~]# iscsiadm -m node -l整合iscsi存储和MooseFsvip自定义资源名ocf:heartbeat:IPaddr2VIP 资源代理管理浮动虚拟 IPip192.168.73.100对外提供服务的漂移 VIPop monitor interval30s每 30 秒检测 VIP 是否正常运行[rootserver1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip192.168.73.100 op monitor interval30s创建共享文件系统资源mfsdatamfsdata资源名ocf:heartbeat:Filesystem文件系统代理自动挂载 / 卸载共享盘device/dev/sda1iSCSI 共享磁盘分区替换成你的真实共享设备directory/var/lib/mfs挂载点fstypexfs文件系统类型[rootserver1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device/dev/sda1 directory/var/lib/mfs fstypexfs op monitor interval30s创建 MooseFS-Master 系统服务资源mfsmastersystemd:moosefs-master调用 systemd 管理 moosefs-master 服务启动、停止、监控监控间隔60 秒检查一次服务状态[rootserver1 ~]# pcs resource create mfsmaster systemd:moosefs-master op monitor interval1min创建资源组把 3 个资源打包在一起mfsgroup资源组名称组内顺序vip → mfsdata → mfsmaster启动顺序先绑 VIP → 挂载共享盘 → 启动服务 故障切换停止顺序停服务 → 卸载磁盘 → 释放 VIP 同一时刻整个组只会在一台节点运行实现主备自动漂移[rootserver1 ~]# pcs resource group add mfsgroup vip mfsdata mfsmaster报错两台mfsmaster都不能正常启动然后我从这里开始排错先进入 /var/lib/mfs 查看 发现没有元数据于是我开始回退这里其实就是重复老师之前的步骤 因为我没有操作所以会没有数据模版和权限清除集群内记录的故障状态、失败计数Pacemaker 内部会记录 “这个资源启动失败多少次”达到阈值后不再重试cleanup 清空故障标记[rootserver1 ~]# pcs resource cleanup mfsgroup临时解除集群托管Pacemaker 不再自动管控这一组资源不会反复尝试拉起 / 卸载允许我们手动操作磁盘避免集群和手动操作互相抢占冲突非常关键不然你 mount 会被 pacemaker 立刻 umount[rootserver1 ~]# pcs resource unmanage mfsgroup手动挂载 iSCSI 共享分区这时你进入的才是共享存储所以能看到真正的元数据文件metadata.mfs[rootserver1 ~]# mount /dev/sda1 /var/lib/mfs[rootserver1 ~]# cd /var/lib/mfs[rootserver1 mfs]# lschangelog.1.mfs metadata.crc metadata.mfs metadata.mfs.back.1 stats.mfs[rootserver1 mfs]# chown -R mfs:mfs /var/lib/mfs手动卸载交还控制权留给后面 Pacemaker 的 Filesystem 资源来负责挂载不能集群托管期间自己永久挂载会产生挂载冲突。[rootserver1 /]# umount /var/lib/mfsmanage重新交给 Pacemaker 全权托管资源组cleanup再次清理残留故障计数enable启用资源允许集群自动按顺序启动整套资源[rootserver1 /]# pcs resource manage mfsgroup[rootserver1 /]# pcs resource cleanup mfsgroup[rootserver1 /]# pcs resource enable mfsgroup[rootserver1 /]# pcs status故障检测Pacemaker 在 server1 上执行 VIP 资源监控检测发现IPaddr2 资源代理在 server1 上识别异常 / 配置不一致判定监控失败触发资源组整体迁移到另外一台节点 server5。重启有报错启动不了这里在前面提到过我这也是修复的过程按照前面的建议走大概率不会遇到这个问题直接把两个master的IQN设置成不一样的 防止抢占资源[rootserver1 ~]# iscsi-inameiqn.1994-05.com.redhat:550531ea54[rootserver1 ~]# vi /etc/iscsi/initiatorname.iscsi/iscsi cd iqn.2026-08.com.example:mfsdata/tpg1/acls//iscsi/iqn.20...ata/tpg1/acls lso- acls .................................................................................................................. [ACLs: 1]o- iqn.2026-08.com.example:client ............................................................................... [Mapped LUNs: 1]o- mapped_lun0 ....................................................................................... [lun0 block/my_disk (rw)]/iscsi/iqn.20...ata/tpg1/acls create iqn.1994-05.com.redhat:550531ea54Created Node ACL for iqn.1994-05.com.redhat:550531ea54Created mapped LUN 0.停止所有iSCSI相关服务systemctl stop iscsid.socket iscsid.service iscsi.service退出已登录的远端存储会话注销LUN连接iscsiadm -m node --logout删除本机保存的target节点记录iscsiadm -m node -o delete删除iscsi本地缓存文件彻底清理旧配置rm -rf /var/lib/iscsi/nodes/* /var/lib/iscsi/send_targets/*重新启动服务systemctl start iscsid.socket iscsid.service iscsi.servicesystemctl enable iscsid.socket iscsid.service iscsi.serviceiscsiadm -m discovery -t sendtargets -p server4:3260iscsiadm -m node --login验证[rootserver5 ~]# pcs node standby故障正常切换配置 fence集群强行把故障节点断电 / 重启保证同一时间只有一台机器操作共享存储保护元数据文件安全为了防止添加新的磁盘后磁盘名称的迁移导致磁盘报错我们先将PCS集群的iscsi存储盘改为UUID的识别方式 上面我们操作 共享盘是名称为sda1 但是当你添加新盘后这个名称自己就变成了sdb1,为了避免连锁错误直接改成 UUID 识别[rootserver1 ~]# blkid /dev/sda1/dev/sda1: UUIDbf679923-a094-4e32-a19f-39a6bd82b62a TYPExfs PARTUUID572b2587-01[rootserver1 ~]# pcs resource update mfsdata device/dev/disk/by-uuid/bf679923-a094-4e32-a19f-39a6bd82b62a[rootserver1 ~]# pcs resource configwindows新建SDB盘以管理员身份运行cmd查看添加的新磁盘虚拟机关机添加刚才创建 的这块磁盘保持现有格式点击高级选择 SCSI 1:0 独立---永久在windows找到这个虚拟机对应的文件夹里面有一个 vmx结尾的文件选择在记事本中打开在末尾添加下述内容disk.locking FALSEdisk.EnableUUID TRUEscsi1.sharedBus virtualscsi1:0.mode independent‑persistent注意有的文件有这个最后一行的就不要重复写否则会启动不了此时就去修改server5的操作添加磁盘并修改vmx 文件避免后续一台机子启动产生磁盘锁另一台在修改vmx文件会无法生效表现为开机后lsblk能查看到这块磁盘但是blkid始终无法看到这块磁盘的UUID两台都操作完毕后进入VM点击电源----打开虚拟机时进入固件左箭头 选中 Boot shift和 将NUMe (B:0:0:1) 顺序上调作为系统的引导盘否则启动会直接进入单用户紧急模式保存退出[rootserver1 ~]# lsblk这里是我当时错误的操作顺序造成的报错错误两台虚拟机不能一台开着、另一台修改 vmx会产生磁盘锁导致第二台看不到共享盘[rootserver1 ~]# ll /dev/disk/by-id确保两台虚拟机的这块盘的UUID一样安装SDB工具两台节点全部都要执行这套操作dnf install -y sbd fence-agents-all加载 softdog 软件看门狗内核模块modprobe softdog临时加载软件看门狗驱动/etc/modules-load.d/softdog.conf开机自动加载 softdogls /dev/watchdog验证看门狗设备文件是否生成modprobe softdogecho softdog /etc/modules-load.d/softdog.confls /dev/watchdoglsmod | grep softdog这里能看到 /dev/watchdog 才代表操作成功初始化 SBD仅在其中一个节点执行 createSBD 在共享磁盘初始化在这块共享盘写入 SBD 头部信息划分槽位作为集群仲裁隔离盘[rootserver1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29fa13d4bb4e581e8a75783a2ad create查看 SBD 磁盘头部信息验证初始化成功[rootserver1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29fa13d4bb4e581e8a75783a2ad dump创建 STONITH 隔离资源 sbd-fencefence_sbdSBD 专用隔离代理devices填写磁盘 WWID 软链接推荐设备名不会漂移不要写 /dev/sdb 这种别名op定义监控、启停超时时间[rootserver1 ~]# pcs stonith create sbd-fence fence_sbd devices/dev/disk/by-id/scsi-36000c29fa13d4bb4e581e8a75783a2ad op monitor interval30s timeout20s op start timeout20s op stop timeout20s查看 STONITH 隔离设备配置[rootserver1 ~]# pcs stonith config[rootserver1 ~]# pcs property set stonith-enabledtruepcs cluster stop --all pcs cluster start --all作用滚动重启整个集群让stonith-enabledtrue配置生效[rootserver1 ~]# pcs cluster stop --all[rootserver1 ~]# pcs cluster start --all[rootserver1 ~]# pcs status✅ softdog 软件看门狗双节点部署完成✅ SBD 共享磁盘初始化✅ fence_sbd STONITH 隔离设备创建✅ stonith-enabledtrue 开启✅ 业务资源组VIPFilesystemmfsmaster全部正常运行✅ 双节点集群高可用部署完毕今天的博客到这里就结束了886~