MFS高可用负载均衡

基于 iSCSI 共享块存储的 Pacemaker 主备高可用服务

本文旨在构建一个结合了 Pacemaker 高可用集群iSCSI 共享块存储 的完整高可用解决方案。该方案的核心目标是为上层应用(例如 MooseFS 元数据服务器)提供一个稳定、可靠且具备故障自动切换能力的基础架构。

架构概览: 我们将 server1 和 server5 配置为 Pacemaker 双节点集群,负责管理应用服务的高可用性。同时,将 server4 配置为独立的 iSCSI Target 存储服务器,为集群节点提供共享的网络块存储。集群节点(server1 和 server5)作为 iSCSI Initiator 客户端,挂载并使用该共享存储,确保应用数据在节点间保持一致。

核心价值: 通过 Pacemaker 实现服务的自动故障转移(Failover),结合 iSCSI 提供的共享存储,避免了传统主备模式中数据同步的复杂性和延迟问题。当主节点发生故障时,Pacemaker 能够将虚拟 IP(VIP)和关联的服务快速切换到备用节点,而备用节点通过 iSCSI 访问同一份数据,保证了服务的连续性和数据的一致性。

下文将分步详解 Pacemaker 高可用环境部署独立 iSCSI Target 存储服务器搭建 以及 iSCSI Initiator 客户端配置 三大核心环节,最终实现一个可投入生产环境测试的高可用存储集群。

Pacemaker 高可用环境部署

1. 环境准备与软件安装

首先,在两台节点上配置高可用软件仓库并安装必要的软件包。

cpp 复制代码
# 进入 yum 仓库目录
[root@server1 ~]# cd /etc/yum.repos.d
查看现有仓库文件
[root@server1 yum.repos.d]# ls
MooseFS.repo  rocky-addons.repo  rocky-devel.repo  rocky-extras.repo  rocky.repo
启用 Rocky Linux 的 addons 仓库(通常包含高可用组件)
[root@server1 yum.repos.d]# vim rocky-addons.repo
将文件中第一块(通常是 [rocky-addons])的 enable=0 改为 enable=1
安装 Pacemaker、Corosync 集群通信层、PCS 管理工具及隔离代理
[root@server1 yum.repos.d]# yum install -y pacemaker corosync pcs fence-agents
启动并启用 pcsd 服务(PCS 守护进程,用于远程管理)
[root@server1 ~]# systemctl enable --now pcsd

**注意:**请在 server1 和 server5 上均执行以上步骤。

2. 集群节点认证

配置节点间的免密 SSH 访问,并为集群管理账户 `hacluster` 设置统一密码,以便后续认证。

cpp 复制代码
# 在 server1 上生成 SSH 密钥对(如果尚未生成)
[root@server1 ~]# ssh-keygen
为集群管理账户 hacluster 设置密码
[root@server1 ~]# echo 001003 | passwd --stdin hacluster
将相同的密码同步设置到 server5 上的 hacluster 账户
[root@server1 ~]# ssh server5 'echo 001003 | passwd --stdin hacluster'
验证 hacluster 用户是否存在
[root@server1 ~]# id hacluster
uid=189(hacluster) gid=189(haclient) groups=189(haclient)
使用 pcs 命令对两个节点进行认证
[root@server1 ~]# pcs host auth server1 server5 -u hacluster -p 001003
server5: Authorized
server1: Authorized

3. 创建并启动集群

使用认证信息初始化一个名为 `mycluster` 的 Pacemaker 集群。

cs 复制代码
# 初始化集群,指定集群名称和节点
[root@server1 ~]# pcs cluster setup mycluster server1 server5
No addresses specified for host 'server1', using 'server1'
No addresses specified for host 'server5', using 'server5'
Destroying cluster on hosts: 'server1', 'server5'...
server5: Successfully destroyed cluster
server1: Successfully destroyed cluster
Requesting remove 'pcsd settings' from 'server1', 'server5'
server1: successful removal of the file 'pcsd settings'
server5: successful removal of the file 'pcsd settings'
Sending 'corosync authkey', 'pacemaker authkey' to 'server1', 'server5'
server1: successful distribution of the file 'corosync authkey'
server1: successful distribution of the file 'pacemaker authkey'
server5: successful distribution of the file 'corosync authkey'
server5: successful distribution of the file 'pacemaker authkey'
Sending 'corosync.conf' to 'server1', 'server5'
server1: successful distribution of the file 'corosync.conf'
server5: successful distribution of the file 'corosync.conf'
Cluster has been successfully set up.
在所有节点上启动集群服务
[root@server1 ~]# pcs cluster start --all
server5: Starting Cluster...
server1: Starting Cluster...
设置集群服务开机自启
[root@server1 ~]# pcs cluster enable --all
server1: Cluster Enabled
server5: Cluster Enabled

4. 配置双节点集群关键参数

在双节点 Pacemaker 集群中,必须调整以下核心参数以确保集群在故障场景下仍能正常运行。

背景说明: 对于双节点集群,当其中一个节点故障导致仲裁(quorum)不满足时,默认情况下所有资源都会停止。为避免这种情况,必须进行以下配置。

cpp 复制代码
# 在实验环境中关闭 STONITH(隔离)功能
[root@server1 ~]# pcs property set stonith-enabled=false
配置双节点集群在丢失仲裁时忽略仲裁丢失,使剩余单节点继续运行资源
[root@server1 ~]# pcs property set no-quorum-policy=ignore

5. 创建并管理虚拟 IP(VIP)资源

创建一个虚拟 IP 地址资源,作为高可用服务对外提供访问的入口。

cs 复制代码
# 创建名为 VIP 的 IPaddr2 资源,指定 IP 地址和监控间隔
[root@server1 ~]# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.223.200 cidr_netmask=24 op monitor interval=30s
查看集群状态,确认资源已创建并运行在某个节点上(此处显示在 server1)
[root@server1 ~]# pcs status
Cluster name: mycluster
Cluster Summary:
Stack: corosync (Pacemaker is running)
Current DC: server5 (version 2.1.10-3.el9_8-5693eaeee) - partition with quorum
Last updated: Thu Aug 20 16:05:51 2026 on server1
Last change:  Thu Aug 20 16:05:43 2026 by root via root on server1
2 nodes configured
1 resource instance configured
Node List:
Online: [ server1 server5 ]
Full List of Resources:
VIP (ocf:heartbeat:IPaddr2):         Started server1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

输出解读: 状态显示 VIP 资源已在 server1 上启动(Started server1)。

后续配置: 为了让应用通过 VIP 访问,需要在所有集群节点的 /etc/hosts 文件中进行相应映射。

cs 复制代码
# 编辑 hosts 文件,添加 VIP 映射并移除旧的映射(如果存在)
[root@server1 ~]# vi /etc/hosts
# 在文件末尾添加一行:192.168.223.200 mfsmaster
# 同时,删除可能存在的将 mfsmaster 指向 server1 本地 IP 的条目。
重要:此修改需要同步到集群中的所有节点(server1 和 server5)。

搭建独立 iSCSI Target 存储服务器

将 server4 配置为 iSCSI Target 存储服务器,为其添加一块新磁盘,并将其通过网络共享给其他主机(Initiator 客户端)作为网络块设备使用。

1. 安装 Target 软件包

首先,在 server4 上安装 targetcli 工具并启动服务。

cs 复制代码
# 安装Target 存储服务器
[root@server4 ~]# yum install -y targetcli
[root@server4 ~]# systemctl enable --now target
Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.

2. 配置 iSCSI Target

进入 targetcli 交互式命令行界面,执行以下步骤:

cs 复制代码
# 把本地磁盘 `/dev/nvme0n2`,通过网络共享出去,给其他主机(Initiator 客户端)当网络块磁盘使用。
[root@server4 ~]# targetcli
targetcli shell version 2.1.57
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
创建后端存储对象 block 类型 my_disk
/>/backstores/block create my_disk /dev/nvme0n2
创建 iSCSI Target(目标),IQN 名称:iqn.2026‑08.com.example:mfsdata
/> /iscsi create iqn.2026-08.com.example:mfsdata
创建 LUN,把后端存储 my_disk 绑定给 Target
/> /iscsi/iqn.2026-08.com.example:mfsdata/tpg1/luns create /backstores/block/my_disk
创建 ACL 访问控制列表:限制哪些 iSCSI 客户端 IQN 可以接入这个存储。
/> /iscsi/iqn.2026-08.com.example:mfsdata/tpg1/acls create iqn.2026-08.com.example:client

部署 iSCSI Initiator(客户端)

iSCSI Initiator(客户端)用于连接远端的 iSCSI Target 存储服务器,将网络上的块存储设备映射为本地磁盘使用。

cpp 复制代码
# 安装 iSCSI 客户端软件包 iscsi-initiator-utils
[root@server1 ~]# yum install -y iscsi-initiator-utils
[root@server1 ~]# cd /etc/iscsi/
cs 复制代码
# 配置 iSCSI 客户端的 InitiatorName,使其与 Target 服务端的 ACL 白名单匹配,完成存储接入的身份鉴权
[root@server1 iscsi]# vim initiatorname.iscsi
InitiatorName=iqn.2026-08.com.example:client
# 将配置文件同步到集群中的另一个节点(server5)
[root@server1 iscsi]# scp initiatorname.iscsi server5:/etc/iscsi/
cs 复制代码
# 使用 sendtargets 方式发现 iSCSI 目标,获取存储信息并保存连接记录
[root@server1 ~]# iscsiadm -m discovery -t st -p 192.168.223.149
192.168.223.149:3260,1 iqn.2026-08.com.example:mfsdata
使用已发现的节点记录发起登录,建立 iSCSI 会话,使内核识别远端共享块存储设备
[root@server1 ~]# iscsiadm -m node -l
Login to [iface: default, target: iqn.2026-08.com.example:mfsdata, portal: 192.168.223.149,3260] successful.
在另一个节点(server5)上执行相同的发现和登录操作
[root@server5 ~]# iscsiadm -m discovery -t st -p 192.168.223.149
192.168.223.149:3260,1 iqn.2026-08.com.example:mfsdata
[root@server5 ~]# iscsiadm -m node -l
Login to [iface: default, target: iqn.2026-08.com.example:mfsdata, portal: 192.168.223.149,3260] successful.
最后使用 fdisk -l 命令查看识别到的共享磁盘

验证: 执行 fdisk -l 命令后,若出现 model 为 my_disk/dev/sda 设备,则表明 iSCSI Initiator 客户端已成功登录 Target,并识别到了远端共享的块存储设备。

通过以上步骤,我们成功构建了一个具备高可用性的存储集群环境:Pacemaker 确保了服务的高可用性,而 iSCSI 提供了共享块存储能力,两者结合为上层应用(如 MooseFS)提供了稳定、可靠的存储基础架构。

相关推荐
ITyunwei09871 小时前
SSL 证书过期排查实战:openssl + Nginx 4步从发现到续签
运维·网络
郝开1 小时前
Docker Compose 本地环境搭建:kkFileView
运维·docker·容器
QYR_111 小时前
2032年气相分解设备市场规模达2.25亿美元:VPD向高灵敏度、自动化晶圆污染检测升级
运维·自动化
RisunJan1 小时前
Linux命令-vgchange(修改 LVM 卷组属性)
linux·运维·服务器
仓储管理员20252 小时前
不同业务场景下,如何匹配适配的WMS系统?
大数据·运维·云计算·精选
Είναι η κοπέλα2 小时前
游戏窗口自动化点击与防误点设计:模板匹配 + 区域限制 + 强制置顶
运维·游戏·自动化
六年码农2 小时前
2026最新开源 屏译ScreenTranslator 0.4.4 开源 全屏实时翻译教程
运维·人工智能·flutter·开源
深念Y2 小时前
AI Agent 时代运维安全:rm 防误删方案对比
linux·运维·人工智能·安全·自动化·agent
hkNaruto2 小时前
【Linux】Ubuntu 22.04 LTS GNOME 原生远程桌面配置:告别vnc、nomachine
linux·运维·ubuntu