在 Red Hat Enterprise Linux High Availability Add-On 集群中實作 SBD poison-pill fencing
本指南描述如何在 Red Hat Enterprise Linux High Availability Add-On 集群中實施 SBD(基於存儲的死亡)毒藥圍籬,網址為 Power Virtual Server。
它涵蓋 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 的安全性群組 並點擊清單中的安全性群組。
- 按一下規則部分中的管理規則。
- 按一下 Inbound rules(入站規則 )下的 Create (建立),以建立新的入站規則。
- 選擇通訊協定
TCP
,並為連接埠最小值和連接埠最大值欄位指定 iSCSI 連接埠3260
。 將 原始碼類型和目的地類型設定為Any
。 - 按一下建立。
將 VPC 附加到 Transit Gateway
使用 IBM Transit Gateway 連接虛擬私有雲 (VPC) 基礎架構和 Power Virtual Server 工作區。
- 瀏覽到 Transit Gateway.
- 在清單中選擇本機傳輸閘道,然後按一下新增連線。
- 在網路連線清單中選擇
VPC
,然後選擇區域。 - 按一下新增。
為群集建立虛擬伺服器實體
在此範例中,已配置三台 iSCSI 目標伺服器。 每個目標伺服器都提供專用的 iSCSI LUN,所有群集節點都以共用磁碟的方式存取該 LUN。
若要將虛擬伺服器實體設定為 iSCSI 目標,請遵循下列步驟。 部署執行 Red Hat Enterprise Linux 作業系統支援版本的虛擬機。
cx3d-2x5
或 bx3d-2x10
等小型虛擬機器實體設定檔即可。 建立虛擬伺服器實例時,必須選擇 SSH 金鑰。 請參閱 開始使用 SSH 金鑰,以產生 SSH 金鑰。
- 瀏覽到 VPC 的虛擬伺服器實例,然後按一下建立。
- 選擇地理、區域和地區
- 在詳細資料部分,輸入 VSI 的名稱。
- 選取資源群組。
- 在伺服器組態部分,按一下變更影像。
- 選擇
Red Hat Enterprise Linux
映像 ( 9.x- 最小化安裝),然後按一下儲存。 - 為 Profile 選擇較小的足跡,例如
bx2-2x8
。 - 選擇 SSH 金鑰。
- 在資料磁碟區部分,按一下建立,並佈建指定用於託管 iSCSI LUN 的 10 GB 磁碟區。
- 輸入資料卷的名稱。
- 儲存大小 (GB) 輸入 10。
- 按一下建立。
- 在 Networking 區段中,選擇之前建立的 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
backstore。 將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 initiator 公用程式。
dnf install -y iscsi-initiator-utils
-
在兩個群集節點上,執行下列指令以安裝所需的 HA Add-On 套件。
dnf install -y pcs pacemaker sbd fence-agents-sbd
若要安裝
fence-agents-sbd
套件,請確定您使用的版本是4.10.0
與62.el9_4.15
或更新的版本。 -
每個 iSCSI 啟動器必須有唯一的 IQN ( iSCSI Qualified Name),用於控制 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 Hypervisor 看門狗是首選的看門狗,適用於 IBM Power10 伺服器及更新版本。
如果您使用 Power9 設定檔部署虛擬伺服器實例,則 Power Hypervisor 看門狗不可用。 作為替代方案,可以使用軟體看門狗 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
測試群集圍籬。 然後,繼續所有其他群集設定步驟。