Pacemaker集群SBD共享磁盘隔离配置实战指南

目录

[一、SBD 共享磁盘创建与配置](#一、SBD 共享磁盘创建与配置)

[1.1 创建 SBD 共享 VMDK 磁盘](#1.1 创建 SBD 共享 VMDK 磁盘)

[1.2 为集群虚拟机添加 SBD 磁盘](#1.2 为集群虚拟机添加 SBD 磁盘)

[二、系统磁盘识别与 SBD 安装](#二、系统磁盘识别与 SBD 安装)

[2.1 查看磁盘设备信息](#2.1 查看磁盘设备信息)

[2.2 安装 SBD 和软看门狗](#2.2 安装 SBD 和软看门狗)

[三、SBD 磁盘初始化与配置](#三、SBD 磁盘初始化与配置)

[3.1 初始化 SBD 磁盘](#3.1 初始化 SBD 磁盘)

[3.2 启用 SBD 隔离](#3.2 启用 SBD 隔离)

[3.3 启动集群](#3.3 启动集群)

四、故障排查与资源调整

[4.1 解决设备 ID 不匹配问题](#4.1 解决设备 ID 不匹配问题)

[4.2 创建 SBD STONITH 资源](#4.2 创建 SBD STONITH 资源)

[五、SBD 功能测试与验证](#五、SBD 功能测试与验证)

[5.1 SBD 隔离机制测试](#5.1 SBD 隔离机制测试)

[5.2 验证故障转移效果](#5.2 验证故障转移效果)

六、总结与注意事项


一、SBD 共享磁盘创建与配置

1.1 创建 SBD 共享 VMDK 磁盘

在 VMware 环境中创建 SBD(Storage-Based Death)共享磁盘,用于 Pacemaker 集群的节点隔离。

bash 复制代码
以管理员身份打开 Windows cmd,进入 VMware 安装目录
cd "C:\Program Files (x86)\VMware\VMware Workstation"
创建 1GB 厚置备磁盘
vmware-vdiskmanager.exe -c -s 1GB -a lsilogic -t 2 "D:\vm\sbd.vmdk"

参数说明:

  • -c:创建磁盘

  • -s 1GB:指定磁盘大小为 1GB

  • -a lsilogic:使用 LSI Logic 控制器

  • -t 2:创建厚置备磁盘

1.2 为集群虚拟机添加 SBD 磁盘

操作步骤:

  1. 所有虚拟机必须关机,不能在开机状态下操作

  2. 编辑虚拟机设置 → 添加 → 硬盘 → SCSI → 使用现有虚拟磁盘;浏览选中:D:\vm\sbd.vmdk

  3. 弹出转换提示:选择【保持现有格式】 ;选中刚添加的硬盘 →【高级】 模式勾选:独立‑永久

  4. 虚拟设备节点:统一选同一个 SCSI 控制器,例如 SCSI 1:0(两台虚拟机节点设备节点必须完全一致)

  1. 设置完成后在 rocky 1.vmx 和 rocky 5.vmx 文件中添加以下配置:
properties 复制代码
disk.locking = "FALSE"
disk.EnableUUID = "TRUE"
scsi1.sharedBus = "virtual"

之后重启虚拟机

**注意:**重启虚拟机后如果提示引导错误,需要进入 BIOS 将磁盘引导顺序调整到第一位,然后重启即可。

二、系统磁盘识别与 SBD 安装

2.1 查看磁盘设备信息

cs 复制代码
[root@server1 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda           8:0    0    1G  0 disk
sdb           8:16   0   20G  0 disk
└─sdb1        8:17   0   20G  0 part
sr0          11:0    1  2.1G  0 rom
nvme0n1     259:0    0   20G  0 disk
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   19G  0 part
  ├─rl-root 253:0    0   17G  0 lvm  /
  └─rl-swap 253:1    0    2G  0 lvm  [SWAP]
[root@server1 ~]# cd /dev/disk/by-id/
···
lrwxrwxrwx. 1 root root  9 Aug 22 17:21 wwn-0x6000c299fefb68e2e6f49e8ac1a8130b -> ../../sda
lrwxrwxrwx. 1 root root  9 Aug 22 17:21 wwn-0x6001405a185f74eb3274b85b0bafdd0b -> ../../sdb
lrwxrwxrwx. 1 root root 10 Aug 22 17:21 wwn-0x6001405a185f74eb3274b85b0bafdd0b-part1 -> ../../sdb1

关键信息: SBD 磁盘为 sda(1GB),共享存储为 sdb(20GB)。

2.2 安装 SBD 和软看门狗

cs 复制代码
[root@server5 by-id]# dnf install -y sbd fence-agents-all
[root@server5 by-id]# modprobe softdog
[root@server1 by-id]# echo "softdog" > /etc/modules-load.d/softdog.conf
[root@server5 by-id]# lsmod |grep softdog
softdog                16384  0

**说明:**需要在所有集群节点上安装 SBD 和 fence-agents-all 软件包,并加载软看门狗模块。

三、SBD 磁盘初始化与配置

3.1 初始化 SBD 磁盘

cs 复制代码
[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b create
Initializing device /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b
Creating version 2.1 header on device 3 (uuid: 04f0ddf4-be65-45d6-8f07-5313de575c58)
Initializing 255 slots on device 3
Device /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b is initialized.
Did you check sbd service down on all nodes before? If not do so now and restart afterwards.
[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b dump
==Dumping header on disk /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b
Header version     : 2.1
UUID               : 04f0ddf4-be65-45d6-8f07-5313de575c58
Number of slots    : 255
Sector size        : 512
Timeout (watchdog) : 5
Timeout (allocate) : 2
Timeout (loop)     : 1
Timeout (msgwait)  : 10
==Header on disk /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b is dumped

3.2 启用 SBD 隔离

cs 复制代码
[root@server1 ~]# pcs stonith sbd enable device="/dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b" watchdog=/dev/watchdog
Running SBD pre-enabling checks...
server1: SBD pre-enabling checks done
server5: SBD pre-enabling checks done
Distributing SBD config...
server1: SBD config saved
server5: SBD config saved
Enabling sbd...
server1: sbd enabled
server5: sbd enabled
Warning: Cluster restart is required in order to apply these changes.
[root@server1 ~]# cat /etc/sysconfig/sbd
This file has been generated by pcs.
SBD_DELAY_START=no
SBD_DEVICE="/dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b"
SBD_OPTS="-n server1"
SBD_PACEMAKER=yes
SBD_STARTMODE=always
SBD_WATCHDOG_DEV=/dev/watchdog
SBD_WATCHDOG_TIMEOUT=5

3.3 启动集群

cs 复制代码
[root@server1 ~]# pcs cluster start --all
server5: Starting Cluster...
server1: Starting Cluster...

四、故障排查与资源调整

4.1 解决设备 ID 不匹配问题

启动集群后出现以下报错,原因是设备 by-id 不匹配,需要更新为当前 sdb1 对应的 by-id(之前的共享存储):

cs 复制代码
[root@server5 by-id]# pcs resource update mfsdata device="/dev/disk/by-id/scsi-36001405a185f74eb3274b85b0bafdd0b-part1"
[root@server5 by-id]# pcs resource config mfsdata
Resource: mfsdata (class=ocf provider=heartbeat type=Filesystem)
  Attributes: mfsdata-instance_attributes
    device=/dev/disk/by-id/scsi-36001405a185f74eb3274b85b0bafdd0b-part1
    directory=/var/lib/mfs
    fstype=xfs
  Operations:
    monitor: mfsdata-monitor-interval-1min
      interval=1min
    start: mfsdata-start-interval-0s
      interval=0s timeout=60s
    stop: mfsdata-stop-interval-0s
      interval=0s timeout=60s
[root@server5 by-id]# pcs resource cleanup mfscluster
[root@server5 by-id]# pcs resource restart mfsdata
mfsdata successfully restarted
[root@server5 by-id]# 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: Sat Aug 22 17:56:56 2026 on server5
Last change:  Sat Aug 22 17:56:47 2026 by root via root on server5
2 nodes configured
3 resource instances configured
Node List:
Online: [ server1 server5 ]
Full List of Resources:
Resource Group: mfscluster:
VIP       (ocf:heartbeat:IPaddr2):         Started server1
mfsdata   (ocf:heartbeat:Filesystem):      Started server1
mfsmaster (systemd:moosefs-master):        Started server1

4.2 创建 SBD STONITH 资源

cs 复制代码
[root@server1 ~]# sbd -d /dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b list
0       server5 clear
1       server1 clear
[root@server1 ~]# pcs stonith create sbd-stonith fence_sbd devices="/dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b" op monitor interval=30s timeout=20s op start timeout=20s op stop timeout=20s
[root@server1 ~]# pcs stonith config
Resource: sbd-stonith (class=stonith type=fence_sbd)
Attributes: sbd-stonith-instance_attributes
devices=/dev/disk/by-id/scsi-36000c299fefb68e2e6f49e8ac1a8130b
Operations:
monitor: sbd-stonith-monitor-interval-30s
interval=30s timeout=20s
start: sbd-stonith-start-interval-0s
interval=0s timeout=20s
stop: sbd-stonith-stop-interval-0s
interval=0s timeout=20s
[root@server1 ~]# pcs property set stonith-enabled=true
[root@server1 ~]# pcs property
Cluster Properties: cib-bootstrap-options
cluster-infrastructure=corosync
cluster-name=mycluster
dc-version=2.1.10-3.el9_8-5693eaeee
have-watchdog=true
last-lrm-refresh=1787388226
no-quorum-policy=ignore
stonith-enabled=true

五、SBD 功能测试与验证

5.1 SBD 隔离机制测试

**测试目的:**验证 SBD 隔离功能是否正常工作

**测试步骤:**杀掉 corosync 进程

原理说明: 环境开启了 SBD (Storage-Based Death) 磁盘隔离 ,SBD 检测到 corosync/Pacemaker 进程消失,判定节点失联故障,按照 SBD 策略直接强制重启本机

**SBD 设计目的:**防止脑裂。当节点集群进程挂掉时,SBD 会立刻重启节点,防止节点继续读写共享 iSCSI 存储。

cs 复制代码
[root@server1 ~]# pidof corosync
876
[root@server1 ~]# kill -9 876
[root@server1 ~]#
Broadcast message from systemd-journald@server1 (Sat 2026-08-22 18:14:43 CST):
sbd[4929]:    emerg: do_exit: Rebooting system: reboot

5.2 验证故障转移效果

cs 复制代码
重启后资源被 server5 接管
[root@server5 by-id]# 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: Sat Aug 22 18:14:58 2026 on server5
  * Last change:  Sat Aug 22 18:11:35 2026 by root via root on server1
  * 2 nodes configured
  * 4 resource instances configured
Node List:
Online: [ server5 ]
OFFLINE: [ server1 ]
Full List of Resources:
Resource Group: mfscluster:
VIP       (ocf:heartbeat:IPaddr2):         Started server5
mfsdata   (ocf:heartbeat:Filesystem):      Started server5
mfsmaster (systemd:moosefs-master):        Started server5
sbd-stonith (stonith:fence_sbd):     Started server5

六、总结与注意事项

通过本文的实践,我们成功在 VMware 环境中为 Pacemaker 集群配置了 SBD(Storage-Based Death)共享磁盘隔离机制。

重要注意事项

  • 虚拟机配置一致性 :所有集群节点的 SBD 磁盘必须使用相同的虚拟设备节点(如 SCSI 1:0),且虚拟机配置文件需添加 disk.locking = "FALSE"disk.EnableUUID = "TRUE"scsi1.sharedBus = "virtual" 参数。

  • 操作时机:添加共享磁盘时,所有虚拟机必须处于关机状态,避免数据损坏。

  • 设备路径 :始终使用 /dev/disk/by-id/ 下的持久化设备标识符,而非 /dev/sdX 这类可能变化的设备名。

  • 引导顺序:若重启后出现引导错误,需进入 BIOS 调整磁盘引导顺序,确保系统从正确磁盘启动。

  • 资源匹配 :如遇设备 ID 不匹配报错,需使用 pcs resource update 更新资源配置中的设备路径。

SBD 机制优势

SBD 作为基于存储的隔离机制,在 Pacemaker 高可用集群中扮演着关键角色:

  • 防止脑裂:当节点失去集群通信时,SBD 能迅速检测并强制重启故障节点,避免多个节点同时访问共享存储。

  • 快速响应:相比网络隔离,SBD 响应更迅速,减少服务中断时间。

  • 配置简单:通过标准命令即可完成配置,与多种存储方案兼容。

在实际生产环境中,建议结合监控告警系统,定期检查 SBD 磁盘状态和看门狗功能,确保隔离机制始终处于就绪状态。通过本文的配置和测试流程,您已掌握了在 VMware 虚拟化环境中部署 SBD 共享磁盘隔离的完整方法。