一、集群规划
| 主机名 | IP 地址 | 角色 | 安装包 |
|---|---|---|---|
| server1 | 192.168.247.142 | Master + Metalogger + CGI 监控 | moosefs-master, moosefs-metalogger, moosefs-cli, moosefs-gui |
| server2 | 192.168.247.143 | ChunkServer(数据节点) | moosefs-chunkserver |
| server3 | 192.168.247.145 | ChunkServer(数据节点) | moosefs-chunkserver |
| server4 | 192.168.247.146 | Client | moosefs-client |
二、所有节点统一准备(4 台都执行)
1. 设置主机名与 hosts 解析
[root@server1 ~]# vim /etc/hosts

2. 添加 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-master)
1. 安装
dnf install -y moosefs-master moosefs-metalogger moosefs-cli moosefs-gui
2. 准备配置文件
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.cfg
3. 配置 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 = *
EOF
4. 配置 mfsexports.cfg(客户端挂载权限)
# 允许整个网段读写,无需密码
cat > /etc/mfs/mfsexports.cfg << 'EOF'
192.168.247.0/24 / rw,alldirs,maproot=0
EOF
5. 初始化元数据
cd /var/lib/mfs
# 首次启动需要metadata.mfs文件,用empty模板
cp metadata.mfs.empty metadata.mfs
chown mfs:mfs metadata.mfs
6. 启动 Master 并设为开机自启
systemctl enable --now moosefs-master
systemctl status moosefs-master
7. 启动 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-gui
8. 启动 Web 监控界面(CGI)
systemctl enable --now moosefs-cgiserv
# 默认监听9425端口,浏览器访问 http://192.168.247.142:9425

四、ChunkServer 节点部署(两台操作相同)
1. 安装
dnf install -y moosefs-chunkserver
2. 准备配置文件
cd /etc/mfs
cp mfschunkserver.cfg.sample mfschunkserver.cfg
cp mfshdd.cfg.sample mfshdd.cfg
3. 配置 mfschunkserver.cfg
# 指定Master地址(关键!)
sed -i 's/^# MASTER_HOST = mfsmaster/MASTER_HOST = mfsmaster/' /etc/mfs/mfschunkserver.cfg
# 可选:调整HDD空间预留
# HDD_LEAVE_SPACE_DEFAULT = 256MiB
4. 配置数据存储目录 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
⚠️注意:两台 chunkserver(server2 server3 )每台都完整执行上面全部步骤,每台各自使用本机的
/dev/nvme0n2。
5. 启动 ChunkServer
systemctl enable --now moosefs-chunkserver
systemctl status moosefs-chunkserver

五、客户端挂载(mfs-chunk3 或任意需要访问存储的机器)
1. 安装客户端
dnf install -y moosefs-client
2. 加载 fuse 模块并创建挂载点
modprobe fuse
echo "fuse" > /etc/modules-load.d/fuse.conf
mkdir -p /mnt/mfs
3. 挂载 MooseFS
# 临时挂载
mount -t moosefs mfsmaster:/ /mnt/mfs
# 开机自动挂载(写入fstab)
echo "mfsmaster:/ /mnt/mfs moosefs defaults,_netdev 0 0" >> /etc/fstab
mount -a
4. 验证
df -h /mnt/mfs
# 应看到类似:mfs-master:/ XXXG XXXG 0% /mnt/mfs

搭建高可用
部署Pacemaker集群
安装软件
[root@server1 ~]# vim /etc/yum.repos.d/rocky-addons.repo
[root@server5 ~]# vim /etc/yum.repos.d/rocky-addons.repo

[root@server1 ~]# yum install -y pacemaker corosync pcs fence-agents
[root@server5 ~]# yum install -y pacemaker corosync pcs fence-agents
启动服务
[root@server1 ~]# systemctl enable --now pcsd.service
[root@server5 ~]# systemctl enable --now pcsd.service
设置密码
[root@server1 ~]# echo westos | passwd --stdin hacluster
执行主机认证
[root@server1 ~]# pcs host auth server1 server5 -u hacluster -p westos
创建集群
[root@server1 ~]# pcs cluster setup mycluster server1 server5
启动并启用集群
[root@server1 ~]# pcs cluster start --all
[root@server1 ~]# pcs cluster enable --all
创建vip
[root@server1 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.247.200 cidr_netmask=24 op monitor interval=30s
禁用 STONITH(仅测试/学习环境)
[root@server1 ~]# pcs property set stonith-enabled=false
设置集群失去仲裁时的策略
[root@server1 ~]# pcs property set no-quorum-policy=ignore
验证
[root@server1 ~]# pcs status

修改主机解析
[root@server1 ~]# vim /etc/hosts

同步所有节点
[root@server1 ~]# scp /etc/hosts server2:/etc/hosts
[root@server1 ~]# scp /etc/hosts server3:/etc/hosts
[root@server1 ~]# scp /etc/hosts server4:/etc/hosts
[root@server1 ~]# scp /etc/hosts server5:/etc/hosts

部署iSCSI服务
一、server4 部署 iSCSI Target
添加一块硬盘

1. 安装并启动 targetcli
dnf install -y targetcli
systemctl enable --now target.service
2. 配置 Target(直接使用整盘 /dev/nvme0n2)
进入 targetcli 交互命令行:
targetcli
在 targetcli 交互界面依次执行下面命令:
# 使用整块 NVMe 盘作为后端存储(无需分区/格式化)
/backstores/block create name=mfs_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
exit
3. 验证 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 "InitiatorName=iqn.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" \
fstype=xfs \
options="noatime,nodiratime,inode64" \
op monitor interval=30s
# MooseFS Master 服务资源
pcs resource create MFS_Master systemd:moosefs-master \
op monitor interval=30s
# 加入资源组(顺序 = 启动顺序:FS → Service → VIP)
pcs resource group add mfs_ha_group MFS_Meta_FS MFS_Master VIP
验证最终状态

server1宕机后服务自动切换到server5

pacemaker + 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 = "FALSE"
disk.EnableUUID = "TRUE"
scsi1.sharedBus = "virtual"

说明:
- disk.locking="FALSE":关闭 VMware 磁盘锁,允许多台虚机同时打开同一块 vmdk;不加会报磁盘被占用
- disk.EnableUUID="TRUE":让 Linux 识别磁盘 UUID,SBD、udev 依赖
- scsi1.sharedBus="virtual":SCSI 总线共享,多虚机共享该 SCSI 总线
保存 vmx,再打开 VMware 启动虚拟机。
调整虚拟机磁盘引导顺序
VMware 顶部菜单:【虚拟机】→【电源】→打开电源时进入固件
切换到 Boot 选项卡
光标移动选中 +Hard Drive,按下 Enter 回车键,展开硬盘子列表,就会看到两块磁盘
- 硬盘 (NVMe) 40G(系统盘,需要放到第一位)
- 硬盘 (SCSI) 1G
在展开的硬盘列表中:
- 方向键选中
硬盘(NVMe) - 按键盘上的
+加号键 向上移动,把 NVMe 移动到硬盘列表最顶部
按 F10 → 选择 Yes,保存退出 BIOS

SBD配置
Linux 虚拟机内确认识别磁盘
两台节点开机执行
#查看块设备,sbd磁盘是裸盘,无分区
lsblk


#查看磁盘UUID,SBD推荐用by‑id路径
ls /dev/disk/by-id/
不要 fdisk 分区、不要 mkfs 格式化!SBD 直接使用整块裸设备。
安装sbd组件
dnf install -y sbd fence-agents-all
加载 softdog 软件看门狗
modprobe softdog
#开机自动加载
echo "softdog" > /etc/modules-load.d/softdog.conf
#验证,出现/dev/watchdog即为成功
ls /dev/watchdog
lsmod | grep softdog


初始化 SBD(仅在其中一个节点执行 create)
只在 server1 执行 SBD 磁盘初始化 create(server5 不要执行!)
#获取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 dump

Pacemaker 集群配置 SBD STONITH(任意一台节点执行,推荐 server1)
pcs 一键配置 fence_sbd
pcs 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 interval=30s timeout=20s \
op start timeout=20s \
op stop timeout=20s
查看 stonith 配置
pcs stonith config
开启 stonith 隔离总开关
pcs property set stonith-enabled=true
重启整个集群使配置全部生效
pcs cluster stop --all
pcs cluster start --all
#查看集群整体状态
pcs status

SBD 隔离功能测试
在 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


530

被折叠的 条评论
为什么被折叠?



