MooseFs
2026/8/22 11:28:19 网站建设 项目流程

一、部署分布式文件系统

添加moosefs的repo源,每个节点都需要

[root@server1 ~]# curl "https://repository.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
[root@server1 ~]# curl "https://repository.moosefs.com/MooseFS-4-el9.repo" > /etc/yum.repos.d/MooseFS.repo

每个节点分别安装每个节点需要的软件

master节点:

[root@server1 ~]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli

chunkserver节点:

[root@server2 ~]# yum install install moosefs-chunkserver

[root@server3 ~]# yum install install moosefs-chunkserver

client节点:

[root@server4 ~]# yum install moosefs-client

每个节点都添加解析,方便后面挂载和操作

1.1 master节点部署

先开启gui,再开启master

[root@server1 ~]# systemctl enable --now moosefs-gui.service

[root@server1 ~]# systemctl enable --now moosefs-master.service

浏览器访问没有问题

1.2 chunkserver节点部署

chunkserver分别添加一块新的硬盘,记得关机添加,否则会将引导硬盘换成你新添加的硬盘

新添加的硬盘

然后进行分区,格式化,挂载

格式化

[root@server2 ~]# mkfs.xfs /dev/nvme0n2p1

UUID进行挂载

[root@server2 ~]# mkdir /mnt/ssd01
[root@server2 ~]# blkid
[root@server2 ~]# vim /etc/fstab

[root@server2 ~]# systemctl daemon-reload
[root@server2 ~]# mount -a

修改权限属性,否则服务会起不来

[root@server2 ~]# chown mfs.mfs /mnt/ssd01/

添加文件内容

[root@server2 ~]# cd /etc/mfs
[root@server2 mfs]# ls
mfschunkserver.cfg mfschunkserver.cfg.sample mfshdd.cfg mfshdd.cfg.sample
[root@server2 mfs]# vim mfshdd.cfg

启动服务

[root@server2 mfs]# systemctl enable --now moosefs-chunkserver

server3是相同的步骤

1.3 client节点部署:server4

[root@server4 ~]# mkdir /mnt/mfs

[root@server4 ~]# mfsmount /mnt/mfs -H mfsmaster #后面替换成自己的解析域名

1.4 自定义副本策略

Storage Class(存储类):MooseFS可以自定义副本策略,不再使用全局默认副本数,针对目录 / 文件单独指定副本数量、存储节点,实现不同数据差异化存储。

进入MFS挂载目录,须进入MooseFS挂载点,所有mfs管理命令只对挂载点内文件生效

创建自定义存储类 hot_1cp,返回ok代表存储类创建成功,该策略注册到MFS元数据服务

[root@server4 ~]# cd /mnt/mfs
[root@server4 mfs]# mfsscadmin create -K 1* hot_1cp
storage class make hot_1cp: ok
[root@server4 mfs]# mkdir dir1
[root@server4 mfs]# cd dir1/
[root@server4 dir1]# cp /etc/hosts .
[root@server4 dir1]# ls
hosts
[root@server4 dir1]# mfsfileinfo hosts

创建测试目录,上传测试文件,建立测试环境,拷贝/etc/hosts作为测试文件,此时文件继承MFS全局默认副本策略(默认 2 副本)。

给目录递归应用存储类,执行这条命令,仅仅修改元数据信息,告诉master:这里的文件要遵守 hot_1cp 策略;磁盘上的chunk副本不会立刻删除,master后台异步任务慢慢调整副本数量。

[root@server4 dir1]# mfssclass set hot_1cp -r .

查询文件绑定的存储类

[root@server4 dir1]# mfssclass get hosts

执行完策略后异步删除其中一份,只剩1份,真正实现hot_1cp(1 副本)。

[root@server4 dir1]# mfsfileinfo hosts

命令查看对象作用
mfssclass get hosts元数据看文件绑定哪个存储类模板,只是标记,不代表磁盘实际状态
mfsfileinfo hosts底层磁盘数据看真实副本几份、存哪些服务器,用来确认策略真正落地

1.5 标签 (LABELS) + 按标签分配存储类

新增server5作为chunkserver节点

创建/mnt/hdd01是server5这台chunkserver用来存放MooseFS数据块的本地目录。

moosefs‑chunkserver服务运行身份是mfs用户,目录权限必须属于mfs,否则服务启动失败,无法读写磁盘

[root@server5 ~]# mkdir /mnt/hdd01
[root@server5 ~]# chown mfs.mfs /mnt/hdd01/
[root@server5 ~]# cd /etc/mfs
[root@server5 mfs]# vim mfshdd.cfg

mfshdd.cfg指定chunkserver使用哪些本地磁盘目录存储数据;一行代表一个存储目录。

[root@server5 mfs]# systemctl enable --now moosefs-chunkserver

给所有chunkserver节点打LABELS标签

[root@server2 ~]# cd /etc/mfs

[root@server2 mfs]# vim mfschunkserver.cfg

S表示固态盘,H表示机械盘

server2

server3

添加一台server5

要重启服务

存储类指定只存标签A的节点

server2的IP是192.168.159.152,标签为A;server3的IP是192.168.159.153,标签为B

[root@server4 dir1]# mfsscadmin create -K A 1CP_A
[root@server4 mfs]# mfssclass set -r 1CP_A dir1/
[root@server4 dir1]# mfsfileinfo hosts

原先文件副本在server3(153);应用存储类‑K A之后,master后台迁移数据块,副本迁移到带 A 标签的server2(192.168.159.152)。

存储类的‑K 参数可以根据标签约束副本存放节点。

存储类,同时指定A、C两个标签,保存2份副本

[root@server4 mfs]# mkdir dir2
[root@server4 mfs]# cd dir2
[root@server4 dir2]# cp /etc/passwd .

2份副本,一份放在标签A(server2 SSD),一份放在标签C(server5 HDD 机械盘)。

[root@server4 dir2]# mfsscadmin create -K A,C 2CP_AC
[root@server4 dir2]# mfssclass set -r 2CP_AC dir2/
[root@server4 dir2]# mfsfileinfo passwd

1.6 pacemaker高可用

server1对server5进行免密

server1和server5都将repo源中的高可用打开

[root@server1 ~]# cd /etc/yum.repos.d
[root@server1 yum.repos.d]# vim rocky-addons.repo

部署集群只需要在1 干

[root@server1 ~]# pcs host auth server1 server5 -u hacluster -p 123456

设置密码

[root@server5 yum.repos.d]# passwd hacluster

[root@server1 ~]# pcs cluster setup mycluster server1 server5

解决警告

[root@server1 ~]# pcs property set stonith-enabled=false
[root@server1 ~]# pcs property set no-quorum-policy=ignore

[root@server1 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.159.100 cidr_netmask=24 op monitor interval=30s


master解析指向VIP

[root@server1 ~]# vim /etc/hosts

二、pacemaker与iscsi存储配合实现MooseFS Master高可用

target:服务端(提供磁盘,server4),把本地磁盘对外发布

initiator:客户端(server1、server5),通过网络远程挂载这块共享磁盘。

后续交给 pacemaker 高可用集群管理这个iSCSI存储资源。

2.1 iSCSI Target服务端配置

给server4添加新的磁盘,安装target服务端工具包

[root@server4 ~]# yum install -y targetcli

[root@server4 ~]# systemctl start target
[root@server4 ~]# targetcli

进入targetcli交互 shell

iscsi底层存储

创建后端存储,绑定server4本地磁盘分区/dev/nvme0n2,命名my_disk

/> /backstores/block create my_disk /dev/nvme0n2

创建iSCSI target,定义对外共享的iqn名称
/iscsi> create iqn.2026-08.com.example:mfsdata

在target下创建lun,把后端磁盘my_disk映射给iSCSI共享
/iscsi> iqn.2026-08.com.example:mfsdata/tpg1/luns create /backstores/block/my_disk

添加访问ACL,允许指定iqn名称的客户端接入访问磁盘
/iscsi> iqn.2026-08.com.example:mfsdata/tpg1/acls create iqn.2026-08.com.example:client

2.2 iSCSI Initiator客户端配置

通过网络,发现并挂载server4共享出来的iSCSI磁盘

server1和server5安装,步骤一样

[root@server1 ~]# yum install -y iscsi-initiator-utils

[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi

[root@server1 ~]# systemctl restart iscsid #文件编辑后需要重启

[root@server1 ~]# iscsiadm -m discovery -t st -p 192.168.159.154

[root@server5 ~]# yum install -y iscsi-initiator-utils

[root@server5 ~]# vim /etc/iscsi/initiatorname.iscsi #文件编辑后需要重启

[root@server5 ~]# systemctl restart iscsid

[root@server5 ~]# iscsiadm -m discovery -t st -p 192.168.159.154

修改客户端initiatorname,必须和服务端ACL里面写的iqn完全一致

[root@server5 ~]# yum install -y iscsi-initiator-utils

[root@server5 ~]# vim /etc/iscsi/initiatorname.iscsi #文件编辑后需要重启

[root@server5 ~]# systemctl restart iscsid

[root@server5 ~]# iscsiadm -m discovery -t st -p 192.168.159.154

发现iSCSI target服务端(server4 IP:192.168.159.154)

iSCSI客户端登录target存储

iscsiadm -m node -l

如果做错了,有缓存,以下操作

[root@server1 ~]# iscsiadm -m node -o delete -T 你创建的iqn名称

2.3 磁盘分区、格式化,迁移MooseFS Master元数据

提前手动停掉moosefs‑master服务,不能让旧元数据目录还在读写。

对iSCSI磁盘/dev/sda做分区

[root@server1 ~]# fdisk /dev/sda

格式化为XFS文件系统

[root@server1 ~]# mkfs.xfs /dev/sda1

临时挂载到/mnt,用来迁移原有元数据

[root@server1 ~]# mount /dev/sda1 /mnt/

moosefs‑master运行身份mfs,目录权限必须匹配
[root@server1 ~]# chown mfs.mfs /mnt/

进入原有master元数据存放目录

[root@server1 ~]# cd /var/lib/mfs/

完整拷贝全部元数据到iSCSI磁盘,‑p保留权限、时间属性
[root@server1 mfs]# cp -p * /mnt/
[root@server1 mfs]# umount /mnt/

iSCSI磁盘挂载到mfs master真实工作目录
[root@server1 ~]# mount /dev/sda1 /var/lib/mfs

[root@server1 ~]# chown mfs.mfs /var/lib/mfs

[root@server1 ~]# umount /var/lib/mfs

2.4 Pacemaker创建集群资源

先挂载文件系统 (mfsdata) → 再启动 moosefs‑master (mfsmaster);资源组统一管理,故障整体漂移;组内已经预先存在VIP虚拟IP资源。

#创建Filesystem资源:挂载iSCSI分区/dev/sda1到/var/lib/mfs,xfs文件系统

[root@server1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=xfs op monitor interval=1min

#创建moosefs‑master系统服务资源
[root@server1 ~]# pcs resource create mfsmaster systemd:moosefs-master op monitor interval=30s

#将VIP、mfsdata、mfsmaster加入同一个资源组 mfscluster
[root@server1 ~]# pcs resource group add mfscluster VIP mfsdata mfsmaster

最开始在server5上,将server5休眠后,会回到server1

让server5成为备机

访问MooseFS WEB页面,使用集群VIP地址192.168.159.100,无论资源漂移到哪台主机,访问地址不变。WEB界面Metadata server显示的IP就是VIP。

如果发现有错误,导致VIP或mfsmaster一直是stopped状态,可以清理一下纪录缓存

[root@server1 ~]# pcs resource cleanup mfsmaster
[root@server1 ~]# pcs resource cleanup VIP

三、Pacemaker SBD磁盘隔离

集群脑裂风险:两个节点网络断开,两边都认为对方挂掉,同时挂载iSCSI共享磁盘,直接损坏 MooseFS元数据。SBD通过一块共享磁盘做 “投票板”,节点收不到对方心跳,就向磁盘写reset指令,把故障机器强制重启,保证同一时间只有一个节点接管业务。

3.1 Windows端VMware命令创建共享磁盘

以管理员身份运行cmd,进入VMware安装目录,创建100MB的SBD共享磁盘sbd.vmdk

cd "D:\Program Files (x86)\VMware\VMware Workstation"

.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "E:\vm\sbd.vmdk"

创建虚拟磁盘

修改之前mfsdata资源,替换为by‑uuid路径,防止新添加的磁盘造成漂移,集群起不来

[root@server1 ~]# ll /dev/disk/by-uuid/

# 更新Filesystem资源,把原来device=/dev/sda1换成uuid路径

[root@server1 ~]# pcs resource update mfsdata device=/dev/disk/by-uuid/6e502f00-32f2-4ee5-a941-c32c81651290
[root@server1 ~]# pcs resource clear mfscluster
[root@server1 ~]# pcs resource debug-start mfsdata
[root@server1 ~]# pcs resource enable mfscluster
[root@server1 ~]# pcs status

添加虚拟磁盘,选择1:0,并且是独立、永久,如果有快照,则是灰色的,无法选择

将引导磁盘放在新添加的磁盘前面,否则会进入单机引导界面

编辑.vmx文件,记事本打开,添加三行

查看是否识别到新加的虚拟磁盘

保证server1和server5上的id要一致

3.2 加载看门狗模块

# 安装sbd隔离代理包

[root@server1 ~]# dnf install -y sbd fence-agents-all

# 加载内核软看门狗softdog,SBD隔离依赖看门狗设备/dev/watchdog
[root@server1 ~]# modprobe softdog

# 设置开机自动加载softdog模块
[root@server1 ~]# echo "softdog" > /etc/modules-load.d/softdog.conf

# 验证看门狗设备是否生成
[root@server1 ~]# ls /dev/watchdog

确认内核模块加载成功

[root@server1 ~]# lsmod | grep softdog

3.3 初始化SBD共享磁盘

用刚才的id初始化

用自己本机真实的uuid

[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29e9fc1cf4aafb997fc68715d52 create

查看SBD磁盘头部信息,确认初始化成功

[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29e9fc1cf4aafb997fc68715d52 dump

3.4 Pacemaker创建STONITH SBD隔离资源

创建stonith隔离资源fence_sbd

[root@server1 ~]# pcs stonith create sbd-fence fence_sbd devices="/dev/disk/by-id/scsi-36000c29e9fc1cf4aafb997fc68715d52" op monitor interval=30s timeout=20s op start timeout=20s op stop timeout=20s

全局开启stonith隔离功能

[root@server1 ~]# pcs property set stonith-enabled=true

重启整个集群,加载SBD隔离配置
[root@server1 ~]# pcs cluster stop --all

[root@server1 ~]# pcs cluster start --all

stonith 资源 → fence 代理 → sbd 底层。

[root@server1 ~]# pcs cluster stop --all

[root@server1 ~]# systemctl unmask sbd
[root@server1 ~]# systemctl enable sbd

[root@server1 ~]# systemctl daemon-reload
[root@server1 ~]# pcs cluster start --all

3.5 SBD 隔离功能测试实验

[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29e9fc1cf4aafb997fc68715d52 list

查看SBD磁盘slot槽位状态,两个节点都是clear正常状态

执行完server5会重启

[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c29e9fc1cf4aafb997fc68715d52 message server5 reset

server5执行stonith隔离,强制重启server1

[root@server5 ~]# pcs stonith fence server1

server1强制重启

资源被server5接管

四、提醒与坑点

  1. VMware环境必须修改vmx的4行参数,关闭磁盘锁、开启共享SCSI总线;两台虚拟机都改。
  2. SBD磁盘只需要100M,不需要大空间。
  3. 全部磁盘配置禁止写/dev/sda这种设备名,统一使用/dev/disk/by‑id,防止开机磁盘顺序漂移集群瘫痪。
  4. 虚拟机没有硬件看门狗,必须加载softdog内核模块生成/dev/watchdog,否则SBD隔离失效。
  5. 磁盘模式必须【独立‑永久】,有快照会灰色无法勾选,先删除快照。
  6. STONITH 隔离作用:集群高可用不允许关闭stonith‑enabled,没有隔离的集群生产环境不安全。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询