在 Red Hat Enterprise Linux High Availability Add-On 集群中实施 SBD 毒丸围栏
本指南介绍如何在 Power Virtual Server 上的 Red Hat Enterprise Linux High Availability Add-On 集群中实施 SBD(基于存储的死亡)毒丸围栏。
它包括 iSCSI 目标服务器的设置、共享存储的配置和群集资源的配置。
群集围栏对群集至关重要,可确保 HA 群集中的分脑保护和自动故障切换。
SBD 围栏需要共享磁盘和看门狗设备。
- 共享磁盘从 IBM VPC 中的 iSCSI 目标服务器作为块设备进行配置。
- Power Architecture 平台看门狗驱动程序
pseries-wdt
用作硬件看门狗。 该驱动程序适用于 IBM Power10 服务器及更高版本。
iSCSI 是一种基于标准的开放式技术,在 RFC 3720 中有所定义。 它可以通过 IP 网络部署存储区域网络。 iSCSI 软件目标可通过网络共享本地存储。 iSCSI 位于不同区域或系统的启动器可通过 协议在 IP 网络上访问共享存储。iSCSI 该协议将 SCSI 命令封装在 TCP/IP 数据包中,可在标准以太网网络上传输数据,无需专用的 SAN 基础设施。
准备工作
查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。
跨可用性区域调配 iSCSI 目标服务器
要创建跨越三个可用性区域的 IBM VPC,请从 开始使用虚拟专用云(VPC) 开始。 接下来,按照 创建虚拟服务器实例 中的说明配置三个 iSCSI 目标服务器实例--每个区域一个。
每个 iSCSI 目标服务器可用于多个高可用性集群,从而实现高效的资源共享。
创建 IBM VPC
- 浏览 虚拟私有云 并单击创建。
- 选择要创建虚拟私有云的位置。
- 选择地理位置和地区。
- 在详细信息部分,在名称字段中输入
iscsi-tgt-vpc
。 - 选择资源组。
- 在“子网”部分,修改列表中每个子网的名称。
- 单击第一个区域中子网的铅笔图标。
- 将名称更改为
iscsi-tgt-zone-1-sn
,然后单击保存。
- 对其他区重复此步骤,并将名称改为
iscsi-tgt-zone-2-sn
和iscsi-tgt-zone-3-sn
。 - 单击创建虚拟私有云。
修改 IBM VPC 的默认安全组
将 iSCSI 端口添加到默认安全组的入站规则中。
- 浏览到 VPC 的安全组,然后单击列表中的安全组。
- 单击规则部分中的管理规则。
- 单击入站规则下的创建,创建新的入站规则。
- 选择协议
TCP
,并为端口最小值和端口最大值字段指定 iSCSI 端口3260
。 将“ 源类型”和 “目的地类型” 设置为Any
。 - 单击创建。
将 VPC 附加到 Transit Gateway
使用 IBM Transit Gateway 连接虚拟专用云 (VPC) 基础设施和 Power Virtual Server 工作区。
- 浏览至 Transit Gateway.
- 在列表中选择本地中转网关,然后单击添加连接。
- 在网络连接列表中选择
VPC
,然后选择区域。 - 单击添加。
为群集创建虚拟服务器实例
在本例中,配置了三个 iSCSI 目标服务器。 每个目标服务器都提供一个专用的 iSCSI LUN,所有集群节点都可将其作为共享磁盘访问。
要将虚拟服务器实例配置为 iSCSI 目标,请按照以下步骤操作。 部署运行 Red Hat Enterprise Linux 操作系统支持版本的虚拟机。
小型虚拟机实例配置文件(如 cx3d-2x5
或 bx3d-2x10
)就足够了。 创建虚拟服务器实例时,必须选择 SSH 密钥。 请参阅 开始使用 SSH 密钥 生成 SSH 密钥。
- 浏览到 VPC 的虚拟服务器实例,然后单击创建。
- 选择地理、区域和地区
- 在详细信息部分,输入 VSI 的名称。
- 选择资源组。
- 在服务器配置部分,单击更改图像。
- 选择
Red Hat Enterprise Linux
镜像 ( 9.x- 最小安装),然后单击保存。 - 为轮廓选择较小的占地面积,例如
bx2-2x8
。 - 选择 SSH 密钥。
- 在“数据卷”部分,单击“创建”并配置指定用于托管 iSCSI LUN 的 10 GB 卷。
- 输入数据卷的名称。
- 存储容量 (GB) 输入 10。
- 单击创建。
- 在“网络”部分,选择之前创建的 VPC。
- 单击创建虚拟服务器。
开始部署虚拟服务器实例。 重复该过程,在不同的可用性区域创建第二个和第三个虚拟服务器实例,确保它们部署在不同的物理位置。
准备操作系统
以 root
用户身份登录所有 iSCSI 目标虚拟机。
-
更新操作系统。
dnf -y update
可能需要重新启动节点才能应用更改。
shutdown -r now
-
确定为备份存储预置的磁盘卷的设备名称。
lsblk | grep 10G
在本例中,设备被识别为
/dev/vdb
样本输出:
vdb 252:16 0 10G 0 disk
-
创建
xfs
文件系统,块大小为 512 字节。# mkfs.xfs -m crc=0 -b size=512 /dev/vdb
- 创建挂载点,在
/etc/fstab
文件中添加文件系统条目,然后挂载文件系统。
样本输出:
# mkdir /sbd # echo "/dev/vdb /sbd xfs defaults 0 0" >> /etc/fstab # systemctl daemon-reload # mount /sbd
- 创建挂载点,在
-
安装 iSCSI 目标软件包。
dnf -y install targetcli
-
启动 iSCSI 目标机并使其在启动时自动启动。
systemctl enable --now target
样本输出:
# systemctl enable --now target Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /usr/lib/systemd/system/target.service.
在 iSCSI 目标服务器上创建 iSCSI 设备
作为 root
用户,在每个 iSCSI 目标虚拟实例上运行以下命令,为 SBD 设备创建 iSCSI 磁盘。
本示例使用以下名称。
cluster1
是 HA 群集的群集名称。cl1n1
和 是 的群集节点主机名。cl1n2
cluster1
调整以下说明中的命令,以符合您的具体环境配置。
-
为高可用性群集的 SBD 准备 LUN
cluster1
。-
为 SBD LUN 创建
fileio
备份存储。 将write_back
参数设置为false
,以禁用文件系统缓存。targetcli backstores/fileio create cluster1_sbd /sbd/cluster1_sbd 50M write_back=false
样本输出:
# targetcli backstores/fileio create cluster1_sbd /sbd/cluster1_sbd 50M write_back=false Created fileio cluster1_sbd with size 52428800
-
创建 iSCSI 目标定义。
targetcli iscsi/ create iqn.2006-04.cluster1.local:cluster1
样本输出:
# targetcli iscsi/ create iqn.2006-04.cluster1.local:cluster1 Created target iqn.2006-04.cluster1.local:cluster1. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.
-
创建 iSCSI LUN。
targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/luns/ create /backstores/fileio/cluster1_sbd
样本输出:
# targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/luns/ create /backstores/fileio/cluster1_sbd Created LUN 0.
-
创建 iSCSI ACL。
targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/acls/ create iqn.2006-04.cl1n1.local:cl1n1
样本输出:
# targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/acls/ create iqn.2006-04.cl1n1.local:cl1n1 Created Node ACL for iqn.2006-04.cl1n1.local:cl1n1 Created mapped LUN 0.
targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/acls/ create iqn.2006-04.cl1n2.local:cl1n2
样本输出:
# targetcli iscsi/iqn.2006-04.cluster1.local:cluster1/tpg1/acls/ create iqn.2006-04.cl1n2.local:cl1n2 Created Node ACL for iqn.2006-04.cl1n2.local:cl1n2 Created mapped LUN 0.
- 保存
targetcli
配置。
targetcli saveconfig
样本输出:
# targetcli saveconfig Configuration saved to /etc/target/saveconfig.json
- 保存
-
-
检查配置。
targetcli ls
样本输出:
# targetcli ls o- / ......................................................................................................................... [...] o- backstores .............................................................................................................. [...] | o- block .................................................................................................. [Storage Objects: 0] | o- fileio ................................................................................................. [Storage Objects: 1] | | o- cluster1_sbd ........................................................... [/sbd/cluster1_sbd (50.0MiB) write-thru activated] | | o- alua ................................................................................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized] | o- pscsi .................................................................................................. [Storage Objects: 0] | o- ramdisk ................................................................................................ [Storage Objects: 0] o- iscsi ............................................................................................................ [Targets: 1] | o- iqn.2006-04.cluster1.local:cluster1 ............................................................................... [TPGs: 1] | o- tpg1 ............................................................................................... [no-gen-acls, no-auth] | o- acls .......................................................................................................... [ACLs: 2] | | o- iqn.2006-04.cl1n1.local:cl1n1 ........................................................................ [Mapped LUNs: 1] | | | o- mapped_lun0 ......................................................................... [lun0 fileio/cluster1_sbd (rw)] | | o- iqn.2006-04.cl1n2.local:cl1n2 ........................................................................ [Mapped LUNs: 1] | | o- mapped_lun0 ......................................................................... [lun0 fileio/cluster1_sbd (rw)] | o- luns .......................................................................................................... [LUNs: 1] | | o- lun0 ..................................................... [fileio/cluster1_sbd (/sbd/cluster1_sbd) (default_tg_pt_gp)] | o- portals .................................................................................................... [Portals: 1] | o- 0.0.0.0:3260 ..................................................................................................... [OK] o- loopback ......................................................................................................... [Targets: 0]
在群集节点上创建 SBD 设备
在群集节点上,发现并连接之前创建的 iSCSI 设备。 在两个群集节点上运行以下命令。
访问群集节点上的 iSCSI 设备
设置 iSCSI 启动程序
-
在两个群集节点上运行以下命令,安装或更新 iSCSI 启动程序实用程序。
dnf install -y iscsi-initiator-utils
-
在两个群集节点上运行以下命令安装所需的 HA 附加软件包。
dnf install -y pcs pacemaker sbd fence-agents-sbd
要安装
fence-agents-sbd
软件包,请确保使用版本为4.10.0
的62.el9_4.15
或更新版本。 -
每个 iSCSI 启动程序都必须有一个唯一的 IQN( iSCSI 限定名称),用于控制对 iSCSI 目标的访问。 安装过程中会分配一个随机生成的 IQN,但也可以用一个描述性更强的名称代替。 IQN 必须与您在 iSCSI 目标服务器上为 iSCSI 设备创建的访问控制列表 (ACL) 中的名称相匹配。
-
在 NODE1 上,运行以下命令更改 IQN。
echo "InitiatorName=iqn.2006-04.cl1n1.local:cl1n1" > /etc/iscsi/initiatorname.iscsi
-
在 NODE2 上,运行以下命令更改 IQN。
echo "InitiatorName=iqn.2006-04.cl1n2.local:cl1n2" > /etc/iscsi/initiatorname.iscsi
-
-
在两个群集节点上运行以下命令,以启用 iSCSI 服务。
systemctl enable iscsid iscsi
-
在两个群集节点上运行以下命令重新启动 iSCSI 服务。
systemctl restart iscsid
systemctl restart iscsi
发现 iSCSI LUN
-
在两个群集节点上运行以下命令连接 iSCSI 设备。
在下面的示例中,通过 iSCSI 目标虚拟服务器的 IP 地址和 iSCSI 端口
3260
访问 iSCSI 目标服务器。示例中提供的 IP 地址仅供参考。 请务必使用与您的特定 VPC 子网配置相匹配的值来替换它们。
本配置示例中使用的 iSCSI 目标的 IP 地址。 VSI 名称 IP 地址:端口 iscsi-vm-001
10.20.30.4:3260
iscsi-vm-002
10.20.30.69:3260
iscsi-vm-003
10.20.30.132:3260
为简化设置,可为 iSCSI 目标服务器的通信细节创建环境变量。
export ISCSI_TGT_1="10.20.30.4:3260" # IP address and port of the first virtual server (first iSCSI target) export ISCSI_TGT_2="10.20.30.69:3260" # IP address and port of the second virtual server (second iSCSI target) export ISCSI_TGT_3="10.20.30.132:3260" # IP address and port of the third virtual server (third iSCSI target) export ISCSI_TGT_NAME="iqn.2006-04.cluster1.local:cluster1" # iSCSI target name
运行
iscsiadm
discovery 命令,验证目标名称是否正确。 对第二个和第三个 iSCSI 目标服务器重复该步骤。iscsiadm -m discovery --type=st --portal=${ISCSI_TGT_1}
样本输出:
# iscsiadm -m discovery --type=st --portal=${ISCSI_TGT_1} 10.20.30.4:3260,1 iqn.2006-04.cluster1.local:cluster1 # iscsiadm -m discovery --type=st --portal=${ISCSI_TGT_2} 10.20.30.69:3260,1 iqn.2006-04.cluster1.local:cluster1 # iscsiadm -m discovery --type=st --portal=${ISCSI_TGT_3} 10.20.30.132:3260,1 iqn.2006-04.cluster1.local:cluster1
从
iscsiadm -m discovery
命令的输出中,注意 iSCSI 目标名称,并将其分配给 ISCSI_TGT_NAME 环境变量。 -
登录 iSCSI 目标设备。
iscsiadm -m node -T ${ISCSI_TGT_NAME} --login --portal=${ISCSI_TGT_1}
样本输出:
# iscsiadm -m node -T ${ISCSI_TGT_NAME} --login --portal=${ISCSI_TGT_1} Logging in to [iface: default, target: iqn.2006-04.cluster1.local:cluster1, portal: 10.20.30.4,3260] Login to [iface: default, target: iqn.2006-04.cluster1.local:cluster1, portal: 10.20.30.4,3260] successful.
使用
${ISCSI_TGT_2}
和${ISCSI_TGT_3}
作为--portal
参数的值,重复该步骤。 -
启用自动登录 iSCSI 设备。
iscsiadm -m node -p ${ISCSI_TGT_1} -T ${ISCSI_TGT_NAME} --op=update --name=node.startup --value=automatic
使用
${ISCSI_TGT_2}
和${ISCSI_TGT_3}
作为-p
参数的值,重复该步骤。 -
在两个群集节点上运行以下命令。
验证 iSCSI 设备是否可用,并记录设备名称以备日后参考。
lsscsi -i | grep "LIO-ORG"
样本输出:
[5:0:0:0] disk LIO-ORG cluster1_sbd 4.0 /dev/sdck 3600140500874d3cfa724e728b77046a3 [6:0:0:0] disk LIO-ORG cluster1_sbd 4.0 /dev/sdcl 3600140517566c8197884fb9b643b470a [7:0:0:0] disk LIO-ORG cluster1_sbd 4.0 /dev/sdcm 36001405c2ed12b15b0a4c7f8d311ab49
使用 lsscsi 命令的输出结果检索 iSCSI 设备 ID。
所提供的 awk 示例提取了设备 ID,补全了设备名称,并为进一步使用准备了环境变量定义。
lsscsi -i | awk '$3 == "LIO-ORG" { count++; print "export SBD_DEV_" count "=/dev/disk/by-id/scsi-" $7}'
样本输出:
lsscsi -i | awk '$3 == "LIO-ORG" { count++; print "export SBD_DEV_" count "=/dev/disk/by-id/scsi-" $7}'
export SBD_DEV_1=/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3
export SBD_DEV_2=/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a
export SBD_DEV_3=/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49
查看输出中的设备条目,然后使用 eval
命令导出环境变量。
eval $(lsscsi -i | awk '$3 == "LIO-ORG" { count++; print "export SBD_DEV_" count "=/dev/disk/by-id/scsi-" $7}')
验证导出的变量。
echo $SBD_DEV_1 $SBD_DEV_2 $SBD_DEV_3
样本输出:
echo $SBD_DEV_1 $SBD_DEV_2 $SBD_DEV_3
/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3 /dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a /dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49
这些环境变量是创建 SBD 设备所必需的。
在群集中配置 SBD 毒丸围栏
块设备上的 SBD 毒丸围栏需要看门狗定时器设备和共享存储来传输毒丸信息。 要启用围栏,请配置群集、激活共享存储上的 SBD 设备并设置群集围栏。
在群集节点上配置看门狗
pseries_wdt
Power 管理程序看门狗是首选看门狗,可在 IBM Power10 服务器及更高版本上使用。
如果使用 Power9 配置文件部署虚拟服务器实例,则 Power 管理程序看门狗不可用。 作为替代方案,可以使用软件看门狗 softdog
,尽管它的支持有限。
要配置看门狗,请根据您所处的环境,按照以下其中一节中概述的步骤进行操作。
配置 pseries_wdt
硬件看门狗 ( IBM Power10 及更高版本)
在两个群集节点上运行以下命令,验证是否加载了管理程序看门狗驱动程序。
lsmod | grep pseries_wdt
# lsmod | grep pseries_wdt
pseries_wdt 262144 0
您还可以使用以下命令验证看门狗驱动程序是否已加载。
wdctl
样本输出:
wdctl
Device: /dev/watchdog0
Identity: pseries-wdt [version 0]
Timeout: 15 seconds
Pre-timeout: 0 seconds
配置 softdog
软件看门狗 ( IBM Power9 )
在 IBM Power9 服务器上使用 softdog
软件看门狗是一种替代方法,但有支持限制。
在两个群集节点上运行以下命令来执行软件看门狗。
-
加载
softdog
模块。modprobe softdog
-
确保
softdog
在节点重启后自动加载。echo softdog > /etc/modules-load.d/watchdog.conf
-
重新启动
systemd
模块。systemctl restart systemd-modules-load
启用 sbd 设备
-
使用基本的群集配置步骤,如
pcs host auth
和pcs cluster setup
。 然后,在两个节点上启动群集。 -
在任何群集节点上,运行以下命令配置并启用 SBD 设备。 使用之前记录的 iSCSI 设备 ID 创建新的 SBD 设备。
pcs stonith sbd device setup \ device=${SBD_DEV_1} \ device=${SBD_DEV_2} \ device=${SBD_DEV_3} \ watchdog-timeout=30 \ msgwait-timeout=60
输入
yes
确认设备初始化。样本输出:
# pcs stonith sbd device setup \ device=/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3 \ device=/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a \ device=/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49 \ watchdog-timeout=30 \ msgwait-timeout=60 WARNING: All current content on device(s) '/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3', '/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a', '/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49' will be overwritten Type 'yes' or 'y' to proceed, anything else to cancel: yes Initializing devices '/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3', '/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a', '/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49'... Devices initialized successfully
检查状态。
pcs stonith sbd status
样本输出:
# pcs stonith sbd status SBD STATUS <node name>: <installed> | <enabled> | <running> cl1n1: YES | NO | NO cl1n2: YES | NO | NO
启用 SBD 设备。
pcs stonith sbd enable \ device=${SBD_DEV_1} \ device=${SBD_DEV_2} \ device=${SBD_DEV_3} \ SBD_WATCHDOG_TIMEOUT=60 \ SBD_STARTMODE=always \ SBD_DELAY_START=yes
样本输出:
# pcs stonith sbd enable \ device=/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3 \ device=/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a \ device=/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49 \ SBD_WATCHDOG_TIMEOUT=60 \ SBD_STARTMODE=clean \ SBD_DELAY_START=yes Running SBD pre-enabling checks... cl1n2: SBD pre-enabling checks done cl1n1: SBD pre-enabling checks done Distributing SBD config... cl1n1: SBD config saved cl1n2: SBD config saved Enabling sbd... cl1n2: sbd enabled cl1n1: sbd enabled Warning: Cluster restart is required in order to apply these changes.
重新启动群集以激活更改。
-
停止群集。
在任何一个群集节点上,运行以下命令。
pcs cluster stop --all
-
启动集群。
在每个群集节点上运行以下命令。
pcs cluster start
在单个群集节点上运行
pcs cluster start --all
可能会导致超时。 -
验证
sbd
设备的状态。pcs stonith sbd status
样本输出:
# pcs stonith sbd status SBD STATUS <node name>: <installed> | <enabled> | <running> cl1n2: YES | YES | NO cl1n1: YES | YES | YES Messages list on device '/dev/disk/by-id/scsi-3600140500874d3cfa724e728b77046a3': 0 cl1n1 clear 1 cl1n2 clear Messages list on device '/dev/disk/by-id/scsi-3600140517566c8197884fb9b643b470a': 0 cl1n2 clear 1 cl1n1 clear Messages list on device '/dev/disk/by-id/scsi-36001405c2ed12b15b0a4c7f8d311ab49': 0 cl1n2 clear 1 cl1n1 clear
-
配置群集围栏设备
在任何一个群集节点上,运行 pcs stonith create
命令创建 STONITH 设备。 设置 pcmk_reboot_timeout
参数可增加重启操作的超时值。
pcs stonith create res_fence_sbd fence_sbd \
devices="${SBD_DEV_1},${SBD_DEV_2},${SBD_DEV_3}" \
pcmk_reboot_timeout=90
测试群集围栏。 然后,继续执行所有其他群集配置步骤。