IBM Cloud Docs
在 Red Hat Enterprise Linux High Availability Add-On 集群中实施 SBD 毒丸围栏

在 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 实例访问 IBM VPC 中 iSCSI 目标的架构图。

准备工作

查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。

跨可用性区域调配 iSCSI 目标服务器

要创建跨越三个可用性区域的 IBM VPC,请从 开始使用虚拟专用云(VPC) 开始。 接下来,按照 创建虚拟服务器实例 中的说明配置三个 iSCSI 目标服务器实例--每个区域一个。

每个 iSCSI 目标服务器可用于多个高可用性集群,从而实现高效的资源共享。

创建 IBM VPC

  1. 浏览 虚拟私有云 并单击创建
  2. 选择要创建虚拟私有云的位置
  3. 选择地理位置地区
  4. 详细信息部分,在名称字段中输入 iscsi-tgt-vpc
  5. 选择资源组
  6. 在“子网”部分,修改列表中每个子网的名称
    • 单击第一个区域中子网的铅笔图标。
    • 名称更改为 iscsi-tgt-zone-1-sn,然后单击保存
  7. 对其他区重复此步骤,并将名称改为 iscsi-tgt-zone-2-sniscsi-tgt-zone-3-sn
  8. 单击创建虚拟私有云

修改 IBM VPC 的默认安全组

将 iSCSI 端口添加到默认安全组的入站规则中。

  1. 浏览到 VPC 的安全组,然后单击列表中的安全组。
  2. 单击规则部分中的管理规则
  3. 单击入站规则下的创建,创建新的入站规则。
  4. 选择协议 TCP,并为端口最小值端口最大值字段指定 iSCSI 端口 3260。 将“ 源类型”和 “目的地类型” 设置为 Any
  5. 单击创建

将 VPC 附加到 Transit Gateway

使用 IBM Transit Gateway 连接虚拟专用云 (VPC) 基础设施和 Power Virtual Server 工作区。

  1. 浏览至 Transit Gateway.
  2. 在列表中选择本地中转网关,然后单击添加连接
  3. 网络连接列表中选择 VPC,然后选择区域
  4. 单击添加

为群集创建虚拟服务器实例

在本例中,配置了三个 iSCSI 目标服务器。 每个目标服务器都提供一个专用的 iSCSI LUN,所有集群节点都可将其作为共享磁盘访问。

要将虚拟服务器实例配置为 iSCSI 目标,请按照以下步骤操作。 部署运行 Red Hat Enterprise Linux 操作系统支持版本的虚拟机。

小型虚拟机实例配置文件(如 cx3d-2x5bx3d-2x10 )就足够了。 创建虚拟服务器实例时,必须选择 SSH 密钥。 请参阅 开始使用 SSH 密钥 生成 SSH 密钥。

  1. 浏览到 VPC 的虚拟服务器实例,然后单击创建
  2. 选择地理区域地区
  3. 详细信息部分,输入 VSI 的名称
  4. 选择资源组
  5. 服务器配置部分,单击更改图像
  6. 选择 Red Hat Enterprise Linux 镜像 ( 9.x- 最小安装),然后单击保存
  7. 轮廓选择较小的占地面积,例如 bx2-2x8
  8. 选择 SSH 密钥
  9. 在“数据卷”部分,单击“创建”并配置指定用于托管 iSCSI LUN 的 10 GB 卷。
    • 输入数据卷的名称
    • 存储容量 (GB) 输入 10
    • 单击创建
  10. 在“网络”部分,选择之前创建的 VPC。
  11. 单击创建虚拟服务器

开始部署虚拟服务器实例。 重复该过程,在不同的可用性区域创建第二个和第三个虚拟服务器实例,确保它们部署在不同的物理位置。

准备操作系统

root 用户身份登录所有 iSCSI 目标虚拟机。

  1. 更新操作系统。

    dnf -y update
    

    可能需要重新启动节点才能应用更改。

    shutdown -r now
    
  2. 确定为备份存储预置的磁盘卷的设备名称。

    lsblk | grep 10G
    

    在本例中,设备被识别为 /dev/vdb

    样本输出:

    vdb    252:16   0   10G  0 disk
    
  3. 创建 xfs 文件系统,块大小为 512 字节。

    # mkfs.xfs -m crc=0 -b size=512 /dev/vdb
    
    1. 创建挂载点,在 /etc/fstab 文件中添加文件系统条目,然后挂载文件系统。

    样本输出:

    # mkdir /sbd
    # echo "/dev/vdb    /sbd    xfs    defaults    0    0" >> /etc/fstab
    # systemctl daemon-reload
    # mount /sbd
    
  4. 安装 iSCSI 目标软件包。

    dnf -y install targetcli
    
  5. 启动 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

调整以下说明中的命令,以符合您的具体环境配置。

  1. 为高可用性群集的 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
      
  2. 检查配置。

    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 启动程序

  1. 在两个群集节点上运行以下命令,安装或更新 iSCSI 启动程序实用程序。

    dnf install -y iscsi-initiator-utils
    
  2. 在两个群集节点上运行以下命令安装所需的 HA 附加软件包。

    dnf install -y pcs pacemaker sbd fence-agents-sbd
    

    要安装 fence-agents-sbd 软件包,请确保使用版本为 4.10.062.el9_4.15 或更新版本。

  3. 每个 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
      
  4. 在两个群集节点上运行以下命令,以启用 iSCSI 服务。

    systemctl enable iscsid iscsi
    
  5. 在两个群集节点上运行以下命令重新启动 iSCSI 服务。

    systemctl restart iscsid
    
    systemctl restart iscsi
    

发现 iSCSI LUN

  1. 在两个群集节点上运行以下命令连接 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 环境变量。

  2. 登录 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 参数的值,重复该步骤。

  3. 启用自动登录 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 参数的值,重复该步骤。

  4. 在两个群集节点上运行以下命令。

    验证 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 软件看门狗是一种替代方法,但有支持限制。

在两个群集节点上运行以下命令来执行软件看门狗。

  1. 加载 softdog 模块。

    modprobe softdog
    
  2. 确保 softdog 在节点重启后自动加载。

    echo softdog > /etc/modules-load.d/watchdog.conf
    
  3. 重新启动 systemd 模块。

    systemctl restart systemd-modules-load
    

启用 sbd 设备

  1. 使用基本的群集配置步骤,如 pcs host authpcs cluster setup。 然后,在两个节点上启动群集。

  2. 在任何群集节点上,运行以下命令配置并启用 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

测试群集围栏。 然后,继续执行所有其他群集配置步骤。