
一、集群规划主机名IP 地址角色安装包server1192.168.247.142Master Metalogger CGI 监控moosefs-master, moosefs-metalogger, moosefs-cli, moosefs-guiserver2192.168.247.143ChunkServer数据节点moosefs-chunkserverserver3192.168.247.145ChunkServer数据节点moosefs-chunkserverserver4192.168.247.146Clientmoosefs-client二、所有节点统一准备4 台都执行1. 设置主机名与 hosts 解析[rootserver1 ~]# vim /etc/hosts2. 添加 MooseFS 官方 EL9 YUM 仓库curl https://repository.moosefs.com/RPM-GPG-KEY-MooseFS /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS curl http://repository.moosefs.com/MooseFS-4-el9.repo /etc/yum.repos.d/MooseFS.repo dnf makecache三、Master 节点部署mfs-master1. 安装dnf install -y moosefs-master moosefs-metalogger moosefs-cli moosefs-gui2. 准备配置文件cd /etc/mfs cp mfsmaster.cfg.sample mfsmaster.cfg cp mfsexports.cfg.sample mfsexports.cfg cp mfstopology.cfg.sample mfstopology.cfg cp mfsmetalogger.cfg.sample mfsmetalogger.cfg3. 配置 mfsmaster.cfg关键项# 基本默认即可确认以下项 cat /etc/mfs/mfsmaster.cfg EOF # 数据目录 DATA_PATH /var/lib/mfs # 工作用户 WORKING_USER mfs WORKING_GROUP mfs # 监听地址默认0.0.0.0即可 # MATOML_LISTEN_HOST * # MATOCS_LISTEN_HOST * # MATOCL_LISTEN_HOST * EOF4. 配置 mfsexports.cfg客户端挂载权限# 允许整个网段读写无需密码 cat /etc/mfs/mfsexports.cfg EOF 192.168.247.0/24 / rw,alldirs,maproot0 EOF5. 初始化元数据cd /var/lib/mfs # 首次启动需要metadata.mfs文件用empty模板 cp metadata.mfs.empty metadata.mfs chown mfs:mfs metadata.mfs6. 启动 Master 并设为开机自启systemctl enable --now moosefs-master systemctl status moosefs-master7. 启动 Metalogger元数据备份# mfsmetalogger.cfg 默认MASTER_HOST mfsmaster能解析即可 # 确认 /etc/hosts 里 mfsmaster 指向本机或直接改 MASTER_HOST 127.0.0.1 sed -i s/^# MASTER_HOST mfsmaster/MASTER_HOST 127.0.0.1/ /etc/mfs/mfsmetalogger.cfg systemctl enable --now moosefs-gui8. 启动 Web 监控界面CGIsystemctl enable --now moosefs-cgiserv # 默认监听9425端口浏览器访问 http://192.168.247.142:9425四、ChunkServer 节点部署两台操作相同1. 安装dnf install -y moosefs-chunkserver2. 准备配置文件cd /etc/mfs cp mfschunkserver.cfg.sample mfschunkserver.cfg cp mfshdd.cfg.sample mfshdd.cfg3. 配置 mfschunkserver.cfg# 指定Master地址关键 sed -i s/^# MASTER_HOST mfsmaster/MASTER_HOST mfsmaster/ /etc/mfs/mfschunkserver.cfg # 可选调整HDD空间预留 # HDD_LEAVE_SPACE_DEFAULT 256MiB4. 配置数据存储目录 mfshdd.cfg虚拟机增添一块硬盘对 /dev/nvme0n2 创建 GPT 分区、格式化 xfs# 创建gpt分区表整块磁盘一个分区 parted -s /dev/nvme0n2 mklabel gpt parted -s /dev/nvme0n2 mkpart chunk xfs 0% 100% # 通知内核重新识别分区 udevadm trigger # 格式化xfs mkfs.xfs /dev/nvme0n2p1创建挂载目录写入 /etc/fstab 开机自动挂载mkdir -p /mnt/mfsdata #写入fstab echo /dev/nvme0n2p1 /mnt/mfsdata xfs defaults 0 0 /etc/fstab #挂载 mount -a #确认挂载成功 df -h /mnt/mfsdata输出应该看到/dev/nvme0n2p1 20G挂载到/mnt/mfsdata修改目录权限给 mfs 用户chown mfs:mfs /mnt/mfsdata ls -ld /mnt/mfsdata修改 mfshdd.cfg指向这个数据盘不要用 /mnt/mfschunk 测试目录#覆盖写入只写这一行 echo /mnt/mfsdata /etc/mfs/mfshdd.cfg #确认内容 cat /etc/mfs/mfshdd.cfg⚠️注意两台 chunkserverserver2 server3 每台都完整执行上面全部步骤每台各自使用本机的/dev/nvme0n2。5. 启动 ChunkServersystemctl enable --now moosefs-chunkserver systemctl status moosefs-chunkserver五、客户端挂载mfs-chunk3 或任意需要访问存储的机器1. 安装客户端dnf install -y moosefs-client2. 加载 fuse 模块并创建挂载点modprobe fuse echo fuse /etc/modules-load.d/fuse.conf mkdir -p /mnt/mfs3. 挂载 MooseFS# 临时挂载 mount -t moosefs mfsmaster:/ /mnt/mfs # 开机自动挂载写入fstab echo mfsmaster:/ /mnt/mfs moosefs defaults,_netdev 0 0 /etc/fstab mount -a4. 验证df -h /mnt/mfs # 应看到类似mfs-master:/ XXXG XXXG 0% /mnt/mfs搭建高可用部署Pacemaker集群安装软件[rootserver1 ~]# vim /etc/yum.repos.d/rocky-addons.repo[rootserver5 ~]# vim /etc/yum.repos.d/rocky-addons.repo[rootserver1 ~]# yum install -y pacemaker corosync pcs fence-agents[rootserver5 ~]# yum install -y pacemaker corosync pcs fence-agents启动服务[rootserver1 ~]# systemctl enable --now pcsd.service[rootserver5 ~]# systemctl enable --now pcsd.service设置密码[rootserver1 ~]# echo westos | passwd --stdin hacluster执行主机认证[rootserver1 ~]# pcs host auth server1 server5 -u hacluster -p westos创建集群[rootserver1 ~]# pcs cluster setup mycluster server1 server5启动并启用集群[rootserver1 ~]# pcs cluster start --all[rootserver1 ~]# pcs cluster enable --all创建vip[rootserver1 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip192.168.247.200 cidr_netmask24 op monitor interval30s禁用 STONITH仅测试/学习环境[rootserver1 ~]# pcs property set stonith-enabledfalse设置集群失去仲裁时的策略[rootserver1 ~]# pcs property set no-quorum-policyignore验证[rootserver1 ~]# pcs status修改主机解析[rootserver1 ~]# vim /etc/hosts同步所有节点[rootserver1 ~]# scp /etc/hosts server2:/etc/hosts[rootserver1 ~]# scp /etc/hosts server3:/etc/hosts[rootserver1 ~]# scp /etc/hosts server4:/etc/hosts[rootserver1 ~]# scp /etc/hosts server5:/etc/hosts部署iSCSI服务一、server4 部署 iSCSI Target添加一块硬盘1. 安装并启动 targetclidnf install -y targetcli systemctl enable --now target.service2. 配置 Target直接使用整盘 /dev/nvme0n2进入 targetcli 交互命令行targetcli在 targetcli 交互界面依次执行下面命令# 使用整块 NVMe 盘作为后端存储无需分区/格式化 /backstores/block create namemfs_meta dev/dev/nvme0n2 # 创建 iSCSI Target /iscsi create iqn.2026-08.com.example:server4.mfs-meta # 关联 LUN /iscsi/iqn.2026-08.com.example:server4.mfs-meta/tpg1/luns create /backstores/block/mfs_meta # 配置 ACL仅允许 server1 和 server5 访问 /iscsi/iqn.2026-08.com.example:server4.mfs-meta/tpg1/acls create iqn.2026-08.com.example:server1 /iscsi/iqn.2026-08.com.example:server4.mfs-meta/tpg1/acls create iqn.2026-08.com.example:server5 # 绑定监听地址为 server4 的业务 IP /iscsi/iqn.2026-08.com.example:server4.mfs-meta/tpg1/portals create 192.168.247.146 # 保存配置并退出交互模式 saveconfig exit3. 验证 Target 状态# 查看完整iSCSI配置树确认 backstores、luns、acls、portals 均正常显示 targetcli ls # 检查3260监听端口确认在 192.168.247.146 上监听 ss -tlnp | grep 3260二、server1 server5 部署 Initiator两节点均需执行安装软件包dnf install -y iscsi-initiator-utils device-mapper-multipath配置 iSCSI Initiator# 设置 Initiator Name确保两节点名称不同 echo InitiatorNameiqn.2026-08.com.example:$(hostname) /etc/iscsi/initiatorname.iscsi # 发现 Target iscsiadm -m discovery -t st -p 192.168.247.146 # 登录 Target iscsiadm -m node --login # ⭐ 关键设置为开机自动登录替代 OCF iSCSI Agent iscsiadm -m node -o update -n node.startup -v automatic # 启动并启用 iscsid 服务 systemctl enable --now iscsid.service配置 Multipath# 生成配置文件 cat /etc/multipath.conf EOF defaults { user_friendly_names yes find_multipaths no } devices { device { vendor LIO-ORG product * path_grouping_policy failover path_checker tur failback immediate } } EOF # 启动并启用 multipathd systemctl enable --now multipathd.service # 验证多路径设备确认 mpathb 存在且状态为 active multipath -ll格式化文件系统仅首次任一节点执行mkfs.xfs -f /dev/mapper/mpathb⚠️ 注意此步骤只需执行一次。XFS 不支持多节点同时挂载后续由 Pacemaker 保证单活。三、纳入 Pacemaker 管理由 Pacemaker 管理禁止开机自启systemctl disable moosefs-master创建资源组 mfs_ha_group# 文件系统资源依赖 /dev/mapper/mpathb 已由 multipath 自动就绪 pcs resource create MFS_Meta_FS ocf:heartbeat:Filesystem \ device/dev/mapper/mpathb \ directory/var/lib/mfs \ fstypexfs \ optionsnoatime,nodiratime,inode64 \ op monitor interval30s # MooseFS Master 服务资源 pcs resource create MFS_Master systemd:moosefs-master \ op monitor interval30s # 加入资源组顺序 启动顺序FS → Service → VIP pcs resource group add mfs_ha_group MFS_Meta_FS MFS_Master VIP验证最终状态server1宕机后服务自动切换到server5pacemaker fence_sbd创建 SBD 共享 vmdk 磁盘以管理员身份打开powershell进入 VMware 安装目录创建 1GB 厚置磁盘-c 创建磁盘-s 1GB SBD 不需要很大1G 足够-a lsilogic SCSI 适配器-t 2 预分配厚置磁盘关键SBD 不能用精简置零E:\vm提前手动建好文件夹不要放在单个虚拟机目录内方便多节点共享。给每台集群虚拟机添加 SBD 磁盘所有虚拟机必须关机不能开机状态操作编辑虚拟机设置 → 添加 → 硬盘 → SCSI →使用现有虚拟磁盘浏览选中E:\vm\sbd.vmdk弹出转换提示选择【保持现有格式】不要转换选中刚添加的硬盘 →【高级】 模式勾选独立‑永久虚拟设备节点统一选同一个 SCSI 控制器例如SCSI 1:0两台虚拟机节点设备节点必须完全一致不要用 SCSI0系统盘控制器建议新增独立 SCSI 控制器SCSI 总线共享 虚拟。修改每台虚拟机 .vmx 配置文件最关键关闭 VMware 全部窗口找到虚拟机目录下xxx.vmx记事本打开文件末尾追加下面内容disk.locking FALSEdisk.EnableUUID TRUEscsi1.sharedBus virtual说明disk.lockingFALSE关闭 VMware 磁盘锁允许多台虚机同时打开同一块 vmdk不加会报磁盘被占用disk.EnableUUIDTRUE让 Linux 识别磁盘 UUIDSBD、udev 依赖scsi1.sharedBusvirtualSCSI 总线共享多虚机共享该 SCSI 总线保存 vmx再打开 VMware 启动虚拟机。调整虚拟机磁盘引导顺序VMware 顶部菜单【虚拟机】→【电源】→打开电源时进入固件切换到Boot选项卡光标移动选中Hard Drive按下Enter 回车键展开硬盘子列表就会看到两块磁盘硬盘 (NVMe) 40G系统盘需要放到第一位硬盘 (SCSI) 1G在展开的硬盘列表中方向键选中硬盘(NVMe)按键盘上的加号键向上移动把 NVMe 移动到硬盘列表最顶部按F10→ 选择 Yes保存退出 BIOSSBD配置Linux 虚拟机内确认识别磁盘两台节点开机执行#查看块设备sbd磁盘是裸盘无分区lsblk#查看磁盘UUIDSBD推荐用by‑id路径ls /dev/disk/by-id/不要 fdisk 分区、不要 mkfs 格式化SBD 直接使用整块裸设备。安装sbd组件dnfinstall-ysbd fence-agents-all加载 softdog 软件看门狗modprobe softdog#开机自动加载echo softdog /etc/modules-load.d/softdog.conf#验证出现/dev/watchdog即为成功ls /dev/watchdoglsmod | grep softdog初始化 SBD仅在其中一个节点执行 create只在 server1 执行 SBD 磁盘初始化 createserver5 不要执行#获取SBD磁盘持久by‑id路径复制输出结果ls /dev/disk/by-id/#写入SBD头部 sbd -d /dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 create #校验头部信息必须输出header version不报错 sbd -d /dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 dumpPacemaker 集群配置 SBD STONITH任意一台节点执行推荐 server1pcs 一键配置 fence_sbdpcs stonith sbd enable \ device/dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 \ watchdog/dev/watchdog手动创建 stonith 资源pcs stonith create sbd-fence fence_sbd \ devices/dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 \ op monitor interval30s timeout20s \ op start timeout20s \ op stop timeout20s查看 stonith 配置pcs stonith config开启 stonith 隔离总开关pcs property set stonith-enabledtrue重启整个集群使配置全部生效pcs cluster stop --all pcs cluster start --all #查看集群整体状态 pcs statusSBD 隔离功能测试在 server1 执行给 server5 发送隔离消息server5 机器会立刻看门狗重启sbd -d /dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 message server5 reset在 server5 执行给 server1 发送隔离消息server1 立刻重启sbd -d /dev/disk/by-id/scsi-36000c290ff2b9bdc4bdc0dd80162f848 message server1 reset如果此命令执行成功说明底层sbd工作正常集群层面调用 stonith 隔离集群资源会自动处理故障转移#在server5隔离server1 pcs stonith fence server1