在 Azure 中的 Red Hat Enterprise Linux 上設定 Pacemaker
本文說明如何在 Red Hat Enterprise Server (RHEL) 上設定基本 Pacemaker 叢集。 這些指示涵蓋 RHEL 7、RHEL 8 和 RHEL 9。
必要條件
請先閱讀下列 SAP 附註和文章:
RHEL 高可用性 (HA) 文件
Azure 專用 RHEL 文件
SAP 供應項目的 RHEL 文件
概觀
重要
Microsoft Azure 標準支援原則未涵蓋跨越多個虛擬網路 (VNets)/子網路的 Pacemaker 叢集。
Azure 提供兩個選項,可用來在 RHEL 的 Pacemaker 叢集中設定隔離:Azure 隔離代理程式 (可透過 Azure API 重新啟動失敗的節點),或者您可以使用 SBD 裝置。
重要
在 Azure 中,使用以儲存體為基礎的隔離 (fence_sbd) 的 RHEL 高可用性會使用軟體模擬看門狗計時器。 請務必在選取 SBD 作為隔離機制時,檢閱軟體模擬看門狗計時器已知限制和 RHEL 高可用性叢集的支援原則 - sbd 和 fence_sbd。
使用 SBD 裝置
注意
RHEL 8.8 和更新版本,以及 RHEL 9.0 和更新版本支援使用 SBD 的隔離機制。
您可以使用下列兩個選項之一來設定 SBD 裝置:
具有 iSCSI 目標伺服器的 SBD
SBD 裝置需要至少一部額外的虛擬機器 (VM),作為網際網路小型電腦系統介面 (iSCSI) 目標伺服器並且提供 SBD 裝置。 不過,這些 iSCSI 目標伺服器可以與其他 Pacemaker 叢集共用。 使用 SBD 裝置的優點是,如果您已經在內部部署使用 SBD 裝置,您對 Pacemaker 叢集的運作方式就不需要進行任何變更。
您可以對一個 Pacemaker 叢集使用最多三個 SBD 裝置,以容許有一個 SBD 裝置變成無法使用 (舉例來說,在 iSCSI 目標伺服器的 OS 修補期間)。 如果您想在每個 Pacemaker 上使用一個以上的 SBD 裝置,請務必部署多個 iSCSI 目標伺服器,並從每個 iSCSI 目標伺服器連線一個 SBD。 我們建議使用一個或三個 SBD 裝置。 如果只設定兩個 SBD 裝置,而其中一個又無法使用,Pacemaker 便無法自動隔離叢集節點。 如果您希望能夠在一部 iSCSI 目標伺服器關閉時進行隔離,您必須使用三個 SBD 裝置,因此,也必須使用三個 iSCSI 目標伺服器。 當您使用 SBD 時,這是最具復原性的設定。
重要
當您規劃部署和設定 Linux Pacemaker 叢集節點和 SBD 裝置時,請不要允許虛擬機器與裝載 SBD 裝置的 VM 之間的路由通過任何其他裝置,例如網路虛擬設備 (NVA)。
維護事件與 NVA 相關的問題會對整體叢集設定的穩定性與可靠性造成負面影響。 如需詳細資訊,請參閱使用者定義的路由規則。
具有 Azure 共用磁碟的 SBD
若要設定 SBD 裝置,您必須至少將一個 Azure 共用磁碟連結至屬於 Pacemaker 叢集的所有虛擬機器。 使用 Azure 共用磁碟的 SBD 裝置優點是,您不需要部署和設定額外的虛擬機器。
以下是當您設定使用 Azure 共用磁碟時,關於 SBD 裝置的一些重要考量因素:
- 支援將具有進階 SSD 的 Azure 共用磁碟作為 SBD 裝置。
- RHEL 8.8 和更新版本支援使用 Azure 共用磁碟的 SBD 裝置。
- 本地備援儲存體 (LRS) 和 區域備援儲存體 (ZRS) 支援使用 Azure 進階共用磁碟的 SBD 裝置。
- 根據您的部署類型,選擇 Azure 共用磁碟的適當備援儲存體作為 SBD 裝置。
- 針對將 LRS 用於 Azure 進階共用磁碟 (skuName - Premium_LRS) 的 SBD 裝置,僅在可用性設定組等區域部署中受到支援。
- 針對將 ZRS 用於 Azure 進階共用磁碟 (skuName - Premium_ZRS) 的 SBD 裝置,建議用於可用性區域等分區部署或具有 FD=1 的擴展集。
- 如需目前提供受控磁碟 ZRS 的區域,請參閱區域可用性文件。
- 您用於 SBD 裝置的 Azure 共用磁碟不需要很大。 maxShares (部分機器翻譯) 值會判斷可使用共用磁碟的叢集節點數目。 例如,您可以在兩個節點叢集上為 SBD 裝置使用 P1 或 P2 磁碟大小,例如 SAP ASCS/ERS 或SAP HANA 擴增。
- 針對使用 HANA 系統複寫 (HSR) 和 Pacemaker 的 HANA 擴增,由於目前 maxShares 的限制,您可以為叢集中的 SBD 裝置使用 Azure 共用磁碟,每個複寫站點具有最多五個節點。
- 我們不建議跨 Pacemaker 叢集連結 Azure 共用磁碟 SBD 裝置。
- 如果您使用具有多個 Azure 共用磁碟的 SBD 裝置,請檢查可連結至 VM 的資料磁碟數目上限。
- 如需 Azure 共用磁碟限制的詳細資訊,請仔細檢閱 Azure 共用磁片文件 (部分機器翻譯) 的「限制」一節。
使用 Azure 柵欄代理程式
您可以使用 Azure 柵欄代理程式來設定隔離。 Azure 隔離代理程式需要叢集 VM 的受控識別,或服務主體或受控系統識別,透過 Azure API 管理重新啟動失敗的節點。 Azure 柵欄代理程式不需要部署額外的虛擬機器。
具有 iSCSI 目標伺服器的 SBD
若要使用運用 iSCSI 目標伺服器進行隔離的 SBD 裝置,請遵循下一節中的指示。
設定 iSCSI 目標伺服器
您必須先建立 iSCSI 目標虛擬機器。 您可以可以與多個 Pacemaker 叢集共用 iSCSI 目標伺服器。
部署在支援的 RHEL OS 版本上執行的虛擬機器,並透過 SSH 連線到這些虛擬機器。 這些 VM 的大小不一定要很大。 Standard_E2s_v3 或 Standard_D2s_v3 之類的 VM 大小就已足夠。 請務必為 OS 磁碟使用進階儲存體。
不需要使用 RHEL for SAP 搭配 HA 和更新服務,或適用於 iSCSI 目標伺服器的 RHEL for SAP 應用程式 OS 映像。 您可以改用標準 RHEL OS 映像。 不過,請注意,支援生命週期會因不同的 OS 產品版本而異。
在所有 iSCSI 目標虛擬機器上執行下列命令。
更新 RHEL。
sudo yum -y update
注意
升級或更新 OS 之後,您可能需要重新啟動節點。
安裝 iSCSI 目標套件。
sudo yum install targetcli
啟動並設定目標,以在開機時間啟動。
sudo systemctl start target sudo systemctl enable target
在防火牆中開啟連接埠
3260
sudo firewall-cmd --add-port=3260/tcp --permanent sudo firewall-cmd --add-port=3260/tcp
在 iSCSI 目標伺服器上建立 iSCSI 裝置
若要為 SAP 系統叢集建立 iSCSI 磁碟,請在每個 iSCSI 目標虛擬機器上執行下列命令。 此範例說明如何為數個叢集建立 SBD 裝置,示範在多個叢集中使用單一 iSCSI 目標伺服器。 已在 OS 磁碟上設定 SBD 裝置,因此請確定有足夠的空間。
- ascsnw1:代表 NW1 的 ASCS/ERS 叢集。
- dbhn1:代表 HN1 的資料庫叢集。
- sap-cl1 和 sap-cl2:NW1 ASCS/ERS 叢集節點的主機名稱。
- hn1-db-0 和 hn1-db-1:資料庫叢集節點的主機名稱。
在下列指示中,視需要使用您的特定主機名稱和 SID 修改命令。
為所有 SBD 裝置建立根資料夾。
sudo mkdir /sbd
為系統 NW1 的 ASCS/ERS 伺服器建立 SBD 裝置。
sudo targetcli backstores/fileio create sbdascsnw1 /sbd/sbdascsnw1 50M write_back=false sudo targetcli iscsi/ create iqn.2006-04.ascsnw1.local:ascsnw1 sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/luns/ create /backstores/fileio/sbdascsnw1 sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl1.local:sap-cl1 sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl2.local:sap-cl2
為系統 HN1 的資料庫叢集建立 SBD 裝置。
sudo targetcli backstores/fileio create sbddbhn1 /sbd/sbddbhn1 50M write_back=false sudo targetcli iscsi/ create iqn.2006-04.dbhn1.local:dbhn1 sudo targetcli iscsi/iqn.2006-04.dbhn1.local:dbhn1/tpg1/luns/ create /backstores/fileio/sbddbhn1 sudo targetcli iscsi/iqn.2006-04.dbhn1.local:dbhn1/tpg1/acls/ create iqn.2006-04.hn1-db-0.local:hn1-db-0 sudo targetcli iscsi/iqn.2006-04.dbhn1.local:dbhn1/tpg1/acls/ create iqn.2006-04.hn1-db-1.local:hn1-db-1
儲存 targetcli 設定。
sudo targetcli saveconfig
檢查以確定所有設定正確無誤。
sudo targetcli ls o- / ......................................................................................................................... [...] o- backstores .............................................................................................................. [...] | o- block .................................................................................................. [Storage Objects: 0] | o- fileio ................................................................................................. [Storage Objects: 2] | | o- sbdascsnw1 ............................................................... [/sbd/sbdascsnw1 (50.0MiB) write-thru activated] | | | o- alua ................................................................................................... [ALUA Groups: 1] | | | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized] | | o- sbddbhn1 ................................................................... [/sbd/sbddbhn1 (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: 2] | o- iqn.2006-04.dbhn1.local:dbhn1 ..................................................................................... [TPGs: 1] | | o- tpg1 ............................................................................................... [no-gen-acls, no-auth] | | o- acls .......................................................................................................... [ACLs: 2] | | | o- iqn.2006-04.hn1-db-0.local:hn1-db-0 .................................................................. [Mapped LUNs: 1] | | | | o- mapped_lun0 ............................................................................... [lun0 fileio/sbdhdb (rw)] | | | o- iqn.2006-04.hn1-db-1.local:hn1-db-1 .................................................................. [Mapped LUNs: 1] | | | o- mapped_lun0 ............................................................................... [lun0 fileio/sbdhdb (rw)] | | o- luns .......................................................................................................... [LUNs: 1] | | | o- lun0 ............................................................. [fileio/sbddbhn1 (/sbd/sbddbhn1) (default_tg_pt_gp)] | | o- portals .................................................................................................... [Portals: 1] | | o- 0.0.0.0:3260 ..................................................................................................... [OK] | o- iqn.2006-04.ascsnw1.local:ascsnw1 ................................................................................. [TPGs: 1] | o- tpg1 ............................................................................................... [no-gen-acls, no-auth] | o- acls .......................................................................................................... [ACLs: 2] | | o- iqn.2006-04.sap-cl1.local:sap-cl1 .................................................................... [Mapped LUNs: 1] | | | o- mapped_lun0 ........................................................................... [lun0 fileio/sbdascsers (rw)] | | o- iqn.2006-04.sap-cl2.local:sap-cl2 .................................................................... [Mapped LUNs: 1] | | o- mapped_lun0 ........................................................................... [lun0 fileio/sbdascsers (rw)] | o- luns .......................................................................................................... [LUNs: 1] | | o- lun0 ......................................................... [fileio/sbdascsnw1 (/sbd/sbdascsnw1) (default_tg_pt_gp)] | o- portals .................................................................................................... [Portals: 1] | o- 0.0.0.0:3260 ..................................................................................................... [OK] o- loopback ......................................................................................................... [Targets: 0]
設定 iSCSI 目標伺服器 SBD 裝置
[A]:適用於所有節點。 [1]:僅適用於節點 1。 [2]:僅適用於節點 2。
在叢集節點上,連線並探索在之前章節中建立的 iSCSI 裝置。 在您想要建立的新叢集節點上,執行下列命令。
[A] 在所有叢集節點上安裝或更新 iSCSI 啟動器公用程式。
sudo yum install -y iscsi-initiator-utils
[A] 在所有叢集節點上安裝叢集和 SBD 套件。
sudo yum install -y pcs pacemaker sbd fence-agents-sbd
[A] 啟用 iSCSI 服務。
sudo systemctl enable iscsid iscsi
[1] 變更叢集中第一個節點上的啟動器名稱。
sudo vi /etc/iscsi/initiatorname.iscsi # Change the content of the file to match the access control ists (ACLs) you used when you created the iSCSI device on the iSCSI target server (for example, for the ASCS/ERS servers) InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
[2] 變更叢集中第二個節點上的啟動器名稱。
sudo vi /etc/iscsi/initiatorname.iscsi # Change the content of the file to match the access control ists (ACLs) you used when you created the iSCSI device on the iSCSI target server (for example, for the ASCS/ERS servers) InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
[A] 重新啟動 iSCSI 服務以套用變更。
sudo systemctl restart iscsid sudo systemctl restart iscsi
[A] 連線到 iSCSI 裝置。 在下列範例中,iSCSI 目標伺服器的 IP 位址是 10.0.0.17,預設連接埠是 3260。 當您執行第一個命令
iscsiadm -m discovery
時,會列出目標名稱iqn.2006-04.ascsnw1.local:ascsnw1
。sudo iscsiadm -m discovery --type=st --portal=10.0.0.17:3260 sudo iscsiadm -m node -T iqn.2006-04.ascsnw1.local:ascsnw1 --login --portal=10.0.0.17:3260 sudo iscsiadm -m node -p 10.0.0.17:3260 -T iqn.2006-04.ascsnw1.local:ascsnw1 --op=update --name=node.startup --value=automatic
[A] 如果您使用多個 SBD 裝置,請同時連線到第二個 iSCSI 目標伺服器。
sudo iscsiadm -m discovery --type=st --portal=10.0.0.18:3260 sudo iscsiadm -m node -T iqn.2006-04.ascsnw1.local:ascsnw1 --login --portal=10.0.0.18:3260 sudo iscsiadm -m node -p 10.0.0.18:3260 -T iqn.2006-04.ascsnw1.local:ascsnw1 --op=update --name=node.startup --value=automatic
[A] 如果您使用多個 SBD 裝置,請同時連線到第三個 iSCSI 目標伺服器。
sudo iscsiadm -m discovery --type=st --portal=10.0.0.19:3260 sudo iscsiadm -m node -T iqn.2006-04.ascsnw1.local:ascsnw1 --login --portal=10.0.0.19:3260 sudo iscsiadm -m node -p 10.0.0.19:3260 -T iqn.2006-04.ascsnw1.local:ascsnw1 --op=update --name=node.startup --value=automatic
[A] 請確定 iSCSI 裝置可供使用,並記下裝置名稱。 在下列範例中,將節點連線到三部 iSCSI 目標伺服器,以探索三個 iSCSI 裝置。
lsscsi [0:0:0:0] disk Msft Virtual Disk 1.0 /dev/sde [1:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda [1:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdb [1:0:0:2] disk Msft Virtual Disk 1.0 /dev/sdc [1:0:0:3] disk Msft Virtual Disk 1.0 /dev/sdd [2:0:0:0] disk LIO-ORG sbdascsnw1 4.0 /dev/sdf [3:0:0:0] disk LIO-ORG sbdascsnw1 4.0 /dev/sdh [4:0:0:0] disk LIO-ORG sbdascsnw1 4.0 /dev/sdg
[A] 擷取 iSCSI 裝置的識別碼。
ls -l /dev/disk/by-id/scsi-* | grep -i sdf # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-1LIO-ORG_sbdhdb:85d254ed-78e2-4ec4-8b0d-ecac2843e086 -> ../../sdf # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-3600140585d254ed78e24ec48b0decac2 -> ../../sdf # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-SLIO-ORG_sbdhdb_85d254ed-78e2-4ec4-8b0d-ecac2843e086 -> ../../sdf ls -l /dev/disk/by-id/scsi-* | grep -i sdh # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-1LIO-ORG_sbdhdb:87122bfc-8a0b-4006-b538-d0a6d6821f04 -> ../../sdh # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-3600140587122bfc8a0b4006b538d0a6d -> ../../sdh # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-SLIO-ORG_sbdhdb_87122bfc-8a0b-4006-b538-d0a6d6821f04 -> ../../sdh ls -l /dev/disk/by-id/scsi-* | grep -i sdg # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-1LIO-ORG_sbdhdb:d2ddc548-060c-49e7-bb79-2bb653f0f34a -> ../../sdg # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-36001405d2ddc548060c49e7bb792bb65 -> ../../sdg # lrwxrwxrwx 1 root root 9 Jul 15 20:21 /dev/disk/by-id/scsi-SLIO-ORG_sbdhdb_d2ddc548-060c-49e7-bb79-2bb653f0f34a -> ../../sdg
此命令會為每個 SBD 裝置列出三個裝置識別碼。 我們建議使用以 scsi-3 開頭的識別碼。 在上述範例中,識別碼為:
- /dev/disk/by-id/scsi-3600140585d254ed78e24ec48b0decac2
- /dev/disk/by-id/scsi-3600140587122bfc8a0b4006b538d0a6d
- /dev/disk/by-id/scsi-36001405d2ddc548060c49e7bb792bb65
[1] 建立 SBD 裝置。
使用 iSCSI 裝置的裝置識別碼,在第一個叢集節點上建立新的 SBD 裝置。
sudo sbd -d /dev/disk/by-id/scsi-3600140585d254ed78e24ec48b0decac2 -1 60 -4 120 create
如果您想使用多個裝置,也請建立第二個和第三個 SBD 裝置。
sudo sbd -d /dev/disk/by-id/scsi-3600140587122bfc8a0b4006b538d0a6d -1 60 -4 120 create sudo sbd -d /dev/disk/by-id/scsi-36001405d2ddc548060c49e7bb792bb65 -1 60 -4 120 create
[A] 調整 SBD 設定
開啟 SBD 設定檔。
sudo vi /etc/sysconfig/sbd
變更 SBD 裝置的屬性,啟用 Pacemaker 整合,並且變更 SBD 的啟動模式。
[...] SBD_DEVICE="/dev/disk/by-id/scsi-3600140585d254ed78e24ec48b0decac2;/dev/disk/by-id/scsi-3600140587122bfc8a0b4006b538d0a6d;/dev/disk/by-id/scsi-36001405d2ddc548060c49e7bb792bb65" [...] SBD_PACEMAKER=yes [...] SBD_STARTMODE=always [...] SBD_DELAY_START=yes [...]
[A] 執行下列命令以載入
softdog
模組。modprobe softdog
[A] 執行下列命令,確保在節點重新開機後自動載入
softdog
。echo softdog > /etc/modules-load.d/watchdog.conf systemctl restart systemd-modules-load
[A] 根據預設,SBD 服務逾時值會設定為 90 秒。 不過,如果
SBD_DELAY_START
值設定為yes
,SBD 服務會將其啟動時間延遲到msgwait
逾時過後。 因此,當msgwait
啟用時,SBD 服務逾時值應超過SBD_DELAY_START
逾時。sudo mkdir /etc/systemd/system/sbd.service.d echo -e "[Service]\nTimeoutSec=144" | sudo tee /etc/systemd/system/sbd.service.d/sbd_delay_start.conf sudo systemctl daemon-reload systemctl show sbd | grep -i timeout # TimeoutStartUSec=2min 24s # TimeoutStopUSec=2min 24s
具有 Azure 共用磁碟的 SBD
本節僅適用於想要搭配 Azure 共用磁碟使用 SBD 裝置的情況。
使用 PowerShell 設定 Azure 共用磁碟
若要使用 PowerShell 建立及連結 Azure 共用磁碟,請執行下列指示。 如果您想要使用 Azure CLI 或 Azure 入口網站來部署資源,您也可以參閱部署 ZRS 磁碟 (部分機器翻譯)。
$ResourceGroup = "MyResourceGroup"
$Location = "MyAzureRegion"
$DiskSizeInGB = 4
$DiskName = "SBD-disk1"
$ShareNodes = 2
$LRSSkuName = "Premium_LRS"
$ZRSSkuName = "Premium_ZRS"
$vmNames = @("prod-cl1-0", "prod-cl1-1") # VMs to attach the disk
# ZRS Azure shared disk: Configure an Azure shared disk with ZRS for a premium shared disk
$zrsDiskConfig = New-AzDiskConfig -Location $Location -SkuName $ZRSSkuName -CreateOption Empty -DiskSizeGB $DiskSizeInGB -MaxSharesCount $ShareNodes
$zrsDataDisk = New-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Disk $zrsDiskConfig
# Attach ZRS disk to cluster VMs
foreach ($vmName in $vmNames) {
$vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Attach -ManagedDiskId $zrsDataDisk.Id -Lun 0
Update-AzVM -VM $vm -ResourceGroupName $resourceGroup -Verbose
}
# LRS Azure shared disk: Configure an Azure shared disk with LRS for a premium shared disk
$lrsDiskConfig = New-AzDiskConfig -Location $Location -SkuName $LRSSkuName -CreateOption Empty -DiskSizeGB $DiskSizeInGB -MaxSharesCount $ShareNodes
$lrsDataDisk = New-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Disk $lrsDiskConfig
# Attach LRS disk to cluster VMs
foreach ($vmName in $vmNames) {
$vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Attach -ManagedDiskId $lrsDataDisk.Id -Lun 0
Update-AzVM -VM $vm -ResourceGroupName $resourceGroup -Verbose
}
設定 Azure 共用磁碟 SBD 裝置
[A] 在所有叢集節點上安裝叢集和 SBD 套件。
sudo yum install -y pcs pacemaker sbd fence-agents-sbd
[A] 確定已連結的磁碟可供使用。
lsblk # NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT # sda 8:0 0 4G 0 disk # sdb 8:16 0 64G 0 disk # ├─sdb1 8:17 0 500M 0 part /boot # ├─sdb2 8:18 0 63G 0 part # │ ├─rootvg-tmplv 253:0 0 2G 0 lvm /tmp # │ ├─rootvg-usrlv 253:1 0 10G 0 lvm /usr # │ ├─rootvg-homelv 253:2 0 1G 0 lvm /home # │ ├─rootvg-varlv 253:3 0 8G 0 lvm /var # │ └─rootvg-rootlv 253:4 0 2G 0 lvm / # ├─sdb14 8:30 0 4M 0 part # └─sdb15 8:31 0 495M 0 part /boot/efi # sr0 11:0 1 1024M 0 rom lsscsi # [0:0:0:0] disk Msft Virtual Disk 1.0 /dev/sdb # [0:0:0:2] cd/dvd Msft Virtual DVD-ROM 1.0 /dev/sr0 # [1:0:0:0] disk Msft Virtual Disk 1.0 /dev/sda # [1:0:0:1] disk Msft Virtual Disk 1.0 /dev/sdc
[A] 擷取已連結的共用磁碟之裝置識別碼。
ls -l /dev/disk/by-id/scsi-* | grep -i sda # lrwxrwxrwx 1 root root 9 Jul 15 22:24 /dev/disk/by-id/scsi-14d534654202020200792c2f5cc7ef14b8a7355cb3cef0107 -> ../../sda # lrwxrwxrwx 1 root root 9 Jul 15 22:24 /dev/disk/by-id/scsi-3600224800792c2f5cc7e55cb3cef0107 -> ../../sda
此命令會列出已連結的共用磁碟的裝置識別碼。 我們建議使用以 scsi-3 開頭的識別碼。 在此範例中,識別碼是 /dev/disk/by-id/scsi-3600224800792c2f5cc7e55cb3cef0107。
[1] 建立 SBD 裝置
# Use the device ID from step 3 to create the new SBD device on the first cluster node sudo sbd -d /dev/disk/by-id/scsi-3600224800792c2f5cc7e55cb3cef0107 -1 60 -4 120 create
[A] 調整 SBD 設定
開啟 SBD 設定檔。
sudo vi /etc/sysconfig/sbd
變更 SBD 裝置的屬性、啟用 Pacemaker 整合,並變更 SBD 的啟動模式
[...] SBD_DEVICE="/dev/disk/by-id/scsi-3600224800792c2f5cc7e55cb3cef0107" [...] SBD_PACEMAKER=yes [...] SBD_STARTMODE=always [...] SBD_DELAY_START=yes [...]
[A] 執行下列命令以載入
softdog
模組。modprobe softdog
[A] 執行下列命令,確保在節點重新開機後自動載入
softdog
。echo softdog > /etc/modules-load.d/watchdog.conf systemctl restart systemd-modules-load
[A] 根據預設,SBD 服務逾時值會設定為 90 秒。 不過,如果
SBD_DELAY_START
值設定為yes
,SBD 服務會將其啟動時間延遲到msgwait
逾時過後。 因此,當msgwait
啟用時,SBD 服務逾時值應超過SBD_DELAY_START
逾時。sudo mkdir /etc/systemd/system/sbd.service.d echo -e "[Service]\nTimeoutSec=144" | sudo tee /etc/systemd/system/sbd.service.d/sbd_delay_start.conf sudo systemctl daemon-reload systemctl show sbd | grep -i timeout # TimeoutStartUSec=2min 24s # TimeoutStopUSec=2min 24s
Azure 隔離代理程式設定
隔離裝置會使用 Azure 資源的受控識別或服務主體來對 Azure 授權。 根據身分識別管理方法,遵循適當的程序 -
設定身分識別管理
使用受控識別或服務主體。
為隔離代理程式建立自訂角色
受控識別和服務主體預設沒有存取您的 Azure 資源的權限。 您需要為受控識別或服務主體提供權限來啟動和停止 (關閉) 叢集的所有虛擬機器。 如果您尚未建立自訂角色,您可以使用 PowerShell 或 Azure CLI 來建立它。
針對輸入檔使用下列內容。 您必須將內容調整為訂用帳戶,也就是將
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
和yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
取代為您的訂用帳戶標識碼。 如果您只有一個訂用帳戶,請在AssignableScopes
中移除第二個項目。{ "Name": "Linux Fence Agent Role", "description": "Allows to power-off and start virtual machines", "assignableScopes": [ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "/subscriptions/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" ], "actions": [ "Microsoft.Compute/*/read", "Microsoft.Compute/virtualMachines/powerOff/action", "Microsoft.Compute/virtualMachines/start/action" ], "notActions": [], "dataActions": [], "notDataActions": [] }
指派自訂角色
使用受控識別或服務主體。
將在上一節中建立的自訂角色
Linux Fence Agent Role
指派給叢集 VM 中的每個受控識別。 每個 VM 系統指派的受控識別都需要為每個叢集 VM 資源指派的角色。 如需詳細資訊,請參閱使用 Azure 入口網站為受控識別指派對資源的存取權。 確認每個 VM 的受控識別角色指派都包含所有叢集 VM。重要
請注意,受控識別的授權指派和移除可能會延遲到生效為止。
叢集安裝
RHEL 7 和 RHEL 8/RHEL 9 之間的命令或設定差異會在文件中標示。
[A] 安裝 RHEL 高可用性附加元件。
sudo yum install -y pcs pacemaker nmap-ncat
[A] 在 RHEL 9.x 上,安裝用於雲端部署的資源代理程式。
sudo yum install -y resource-agents-cloud
[A] 如果您要使用以 Azure 隔離代理程式為基礎的隔離裝置,請安裝 fence-agents 套件。
sudo yum install -y fence-agents-azure-arm
重要
對於想要使用 Azure 資源受控識別,而不是隔離代理程式服務主體名稱的客戶,我們建議使用下列版本 (或更新版本) 的 Azure 隔離代理程式:
- RHEL 8.4:fence-agents-4.2.1-54.el8。
- RHEL 8.2:fence-agents-4.2.1-41.el8_2.4
- RHEL 8.1:fence-agents-4.2.1-30.el8_1.4
- RHEL 7.9:fence-agents-4.2.1-41.el7_9.4。
重要
在 RHEL 9 上,我們建議使用下列套件版本 (或更新版本),以避免 Azure 隔離代理程式發生問題:
- fence-agents-4.10.0-20.el9_0.7
- fence-agents-common-4.10.0-20.el9_0.6
- ha-cloud-support-4.10.0-20.el9_0.6.x86_64.rpm
檢查 Azure 柵欄代理程式的版本。 如有必要,請將它更新為最低需求版本或更新版本。
# Check the version of the Azure Fence Agent sudo yum info fence-agents-azure-arm
重要
如果您需要更新 Azure 隔離代理程式,而且如果使用自訂角色,請務必更新自訂角色,以包含 powerOff 動作。 如需詳細資訊,請參閱 為隔離代理程式建立自訂角色。
[A] 設定主機名稱解析。
您可以使用 DNS 伺服器,或修改所有節點上的
/etc/hosts
檔案。 此範例說明如何使用/etc/hosts
檔案。 請取代下列命令中的 IP 位址和主機名稱。重要
如果您在叢集設定中使用主機名稱,重要的是擁有可靠的主機名稱解析。 如果名稱無法使用,叢集通訊就會失敗,這可能會導致叢集容錯移轉延遲。
使用
/etc/hosts
的好處在於,您的叢集會變成不受 DNS 影響,而 DNS 也可能是單一失敗點。sudo vi /etc/hosts
將下列幾行插入至
/etc/hosts
。 變更 IP 位址和主機名稱以符合您的環境。# IP address of the first cluster node 10.0.0.6 prod-cl1-0 # IP address of the second cluster node 10.0.0.7 prod-cl1-1
[A] 將
hacluster
密碼變更為相同的密碼。sudo passwd hacluster
[A] 新增 Pacemaker 防火牆規則。
新增下列防火牆規則至叢集節點間的所有叢集通訊。
sudo firewall-cmd --add-service=high-availability --permanent sudo firewall-cmd --add-service=high-availability
[A] 啟用基本叢集服務。
執行下列命令,以啟用 Pacemaker 服務並加以啟動。
sudo systemctl start pcsd.service sudo systemctl enable pcsd.service
[1] 建立 Pacemaker 叢集。
執行下列命令以驗證節點,並建立叢集。 將權杖設為 30000,以允許記憶體保留維修。 如需詳細資訊,請參閱這篇 Linux 文章。
如果要在 RHEL 7.x 上建置叢集,請使用下列命令:
sudo pcs cluster auth prod-cl1-0 prod-cl1-1 -u hacluster sudo pcs cluster setup --name nw1-azr prod-cl1-0 prod-cl1-1 --token 30000 sudo pcs cluster start --all
如果要在 RHEL 8.x/RHEL 9.x 上建置叢集,請使用下列命令:
sudo pcs host auth prod-cl1-0 prod-cl1-1 -u hacluster sudo pcs cluster setup nw1-azr prod-cl1-0 prod-cl1-1 totem token=30000 sudo pcs cluster start --all
透過執行下列命令來驗證叢集狀態:
# Run the following command until the status of both nodes is online sudo pcs status # Cluster name: nw1-azr # WARNING: no stonith devices and stonith-enabled is not false # Stack: corosync # Current DC: prod-cl1-1 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum # Last updated: Fri Aug 17 09:18:24 2018 # Last change: Fri Aug 17 09:17:46 2018 by hacluster via crmd on prod-cl1-1 # # 2 nodes configured # 0 resources configured # # Online: [ prod-cl1-0 prod-cl1-1 ] # # No resources # # Daemon Status: # corosync: active/disabled # pacemaker: active/disabled # pcsd: active/enabled
[A] 設定預期的投票。
# Check the quorum votes pcs quorum status # If the quorum votes are not set to 2, execute the next command sudo pcs quorum expected-votes 2
提示
如果您正在組建多節點叢集,即具有兩個以上節點的叢集,請勿將投票數設定為 2。
[1] 允許並行隔離動作。
sudo pcs property set concurrent-fencing=true
在 Pacemaker 叢集上建立隔離裝置
提示
- 若要避免雙節點 Pacemaker 叢集中的隔離競爭,您可以設定
priority-fencing-delay
叢集屬性。 若發生腦裂 (split-brain) 情況,此屬性會在隔離總資源優先順序較高的節點時出現額外的延遲。 如需詳細資訊,請參閱 Pacemaker 是否可以使用最少的執行資源來隔離叢集節點?。 - 屬性
priority-fencing-delay
適用於 Pacemaker 2.0.4-6.el8 版或更新版本,且適用於雙節點叢集。 如果您設定priority-fencing-delay
叢集屬性,則不需要設定pcmk_delay_max
屬性。 但是,如果 Pacemaker 版本低於 2.0.4-6.el8,您需要設定pcmk_delay_max
屬性。 - 如需如何設定
priority-fencing-delay
叢集屬性的指示,請參閱個別的 SAP ASCS/ERS 和 SAP Hana 相應增加高可用性文件。
根據選取的隔離機制,只遵循下列其中一節的相關指示:SBD 作為隔離裝置或 Azure 隔離代理程式作為隔離裝置。
SBD 作為隔離裝置
[A] 啟用 SBD 服務
sudo systemctl enable sbd
[1] 針對使用 iSCSI 目標伺服器或 Azure 共用磁碟設定的 SBD 裝置,執行下列命令。
sudo pcs property set stonith-timeout=144 sudo pcs property set stonith-enabled=true # Replace the device IDs with your device ID. pcs stonith create sbd fence_sbd \ devices=/dev/disk/by-id/scsi-3600140585d254ed78e24ec48b0decac2,/dev/disk/by-id/scsi-3600140587122bfc8a0b4006b538d0a6d,/dev/disk/by-id/scsi-36001405d2ddc548060c49e7bb792bb65 \ op monitor interval=600 timeout=15
[1] 重新啟動叢集
sudo pcs cluster stop --all # It would take time to start the cluster as "SBD_DELAY_START" is set to "yes" sudo pcs cluster start --all
注意
如果您在啟動 Pacemaker 叢集時遇到下列錯誤,可以忽略該訊息。 或者,您也可以使用命令
pcs cluster start --all --request-timeout 140
來啟動叢集。錯誤:無法啟動所有節點 node1/node2:無法連線到 node1/node2,檢查 pcsd 是否正在執行,或嘗試使用
--request-timeout
選項設定較高的逾時值 (作業在 60000 毫秒後收到的位元組數為 0 時即逾時)
Azure 隔離代理程式作為隔離裝置
[1] 將角色指派給這兩個叢集節點之後,您就可以在叢集中設定隔離裝置。
sudo pcs property set stonith-timeout=900 sudo pcs property set stonith-enabled=true
[1] 根據您是將受控識別還是服務主體用於 Azure 隔離代理程式,執行適當的命令。
注意
使用 Azure Government 雲端時,您必須在設定隔離代理程式時指定
cloud=
選項。 例如,cloud=usgov
針對 Azure 美國政府雲端。 如需 Azure Government 雲端上 RedHat 支援的詳細資訊,請參閱 RHEL 高可用性叢集的支持原則 - Microsoft Azure 虛擬機器 為叢集成員。提示
如果 RHEL 主機名稱和 Azure VM 名稱不相同,則
pcmk_host_map
選項是命令中唯一需要的。 以格式 hostname:vm-name 指定對應。 如需詳細資訊,請參閱 我應該使用何種格式來指定節點對應至 pcmk_host_map 中的隔離裝置?(英文)。針對 RHEL 7.x,使用下列命令來設定柵欄裝置:
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \ subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \ power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \ op monitor interval=3600
針對 RHEL 8.X/9.x,使用下列命令來設定隔離裝置:
# Run following command if you are setting up fence agent on (two-node cluster and pacemaker version greater than 2.0.4-6.el8) OR (HANA scale out) sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \ subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \ power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 \ op monitor interval=3600 # Run following command if you are setting up fence agent on (two-node cluster and pacemaker version less than 2.0.4-6.el8) sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \ subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \ power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \ op monitor interval=3600
如果您使用以服務主體設定為基礎的隔離裝置,請參閱 使用 Azure 隔離將 Pacemaker 叢集從 SPN 變更為 MSI,並了解如何轉換為受控識別設定。
監視和隔離作業為還原序列化。 因此,如果有長時間執行的監視作業和同時隔離事件,因為已經在執行監視作業,所以叢集容錯移轉不會延遲。
提示
Azure 隔離代理程式需要對公用端點的輸出連線。 如需可能解決方案的詳細資訊,請參閱 使用標準 ILB 的 VM 公用端點連線。
為 Azure 已排定事件設定 Pacemaker
Azure 提供已排定事件。 已排定事件會透過中繼資料服務傳送,並容許應用程式有準備這類事件的時間。
Pacemaker 資源代理程式 azure-events-az
監視已排程的 Azure 事件。 如果偵測到事件,且資源代理程式判斷另一個叢集節點可供使用,它就會設定叢集健康情況屬性。
為節點設定叢集健康情況屬性時,位置限制式會觸發,且名稱不是以 health-
開頭的所有資源都會從具有已排定事件的節點移轉。 在受影響的叢集節點沒有執行中的叢集資源之後,就會認可已排定事件,並可執行其動作,例如重新啟動。
[A] 確定已安裝
azure-events-az
代理程式的套件,且為最新狀態。RHEL 8.x: sudo dnf info resource-agents RHEL 9.x: sudo dnf info resource-agents-cloud
最低版本需求:
- RHEL 8.4:
resource-agents-4.1.1-90.13
- RHEL 8.6:
resource-agents-4.9.0-16.9
- RHEL 8.8:
resource-agents-4.9.0-40.1
- RHEL 9.0:
resource-agents-cloud-4.10.0-9.6
- RHEL 9.2 和更新版本:
resource-agents-cloud-4.10.0-34.1
- RHEL 8.4:
[1] 在 Pacemaker 中設定資源。
#Place the cluster in maintenance mode sudo pcs property set maintenance-mode=true
[1] 設定 Pacemaker 叢集健康情況節點策略和限制式。
sudo pcs property set node-health-strategy=custom sudo pcs constraint location 'regexp%!health-.*' \ rule score-attribute='#health-azure' \ defined '#uname'
重要
除了後續步驟中所述的資源之外,請勿在叢集中定義以
health-
開頭的任何其他資源。[1] 設定叢集屬性的初始值。 針對每個叢集節點和向外延展環境執行,包括多數製造商 VM。
sudo crm_attribute --node prod-cl1-0 --name '#health-azure' --update 0 sudo crm_attribute --node prod-cl1-1 --name '#health-azure' --update 0
[1] 在 Pacemaker 中設定資源。 請確定資源開頭為
health-azure
。sudo pcs resource create health-azure-events \ ocf:heartbeat:azure-events-az \ op monitor interval=10s timeout=240s \ op start timeout=10s start-delay=90s sudo pcs resource clone health-azure-events allow-unhealthy-nodes=true failure-timeout=120s
將 Pacemaker 叢集置於維護模式之外。
sudo pcs property set maintenance-mode=false
清除啟用期間的任何錯誤,並確認所有叢集節點上
health-azure-events
資源都已成功啟動。sudo pcs resource cleanup
已排定事件的第一次查詢執行最多可能需要兩分鐘的時間。 使用已排定事件的 Pacemaker 測試,可以使用叢集 VM 的重新啟動或重新部署動作。 如需詳細資訊,請參閱排定的訊息。
選擇性隔離設定
提示
只有在您想要設定特殊隔離裝置 fence_kdump
時,才適用本節。
如果您需要收集 VM 內的診斷資訊,根據隔離代理程式 fence_kdump
設定另一個隔離裝置可能會很有用。 fence_kdump
代理程式可以偵測節點進入 kdump 損毀修復,並允許損毀修復服務在叫用其他隔離方法之前完成修復。 請注意,fence_kdump
不是使用 Azure VM 時的傳統隔離機制替代項目,例如 SBD 或 Azure 隔離代理程式。
重要
請注意,當 fence_kdump
設定為第一層隔離裝置時,其會在隔離作業中導致延遲,並且分別地在應用程式資源容錯移轉中延遲。
如果成功偵測到損毀傾印,隔離將會延遲到損毀修復服務完成為止。 如果失敗的節點無法連線或未回應,則隔離將會依決定的時間、已設定的反覆運算次數和 fence_kdump
逾時而延遲。 如需詳細資訊,請參閱 如何在 Red Hat Pacemaker 叢集中設定 fence_kdump? (英文)。
建議的 fence_kdump
逾時可能需要針對特定環境加以調整。
建議只在需要收集 VM 內的診斷時設定 fence_kdump
隔離,並一律與傳統隔離方法搭配,例如 SBD 或 Azure 隔離代理程式。
下列 Red Hat KB 文章包含設定 fence_kdump
隔離的重要資訊:
- 如何在 Red Hat Pacemaker 叢集中設定 fence_kdump?(英文)。
- 如何使用 Pacemaker 在 RHEL 叢集中設定/管理隔離層級(英文)。
- 請參閱 在使用 kexec-tools 2.0.14 之前版本之 RHEL 6 或 7 高可用性叢集中的 fence_kdump 發生「X 秒後逾時」失敗(英文)。
- 如需如何變更預設逾時的資訊,請參閱 如何設定 kdump 以搭配 RHEL 6、7、8 高可用性附加元件使用? (英文)。
- 如需如何在使用
fence_kdump
時減少容錯移轉延遲的資訊,請參閱 新增 fence_kdump 設定時是否可以減少預期的容錯移轉延遲?(英文)。
除了 Azure 隔離代理程式設定之外,請執行下列選用步驟來新增 fence_kdump
作為第一層隔離設定。
[A] 確認
kdump
為作用中且已設定。systemctl is-active kdump # Expected result # active
[A] 安裝
fence_kdump
柵欄代理程式。yum install fence-agents-kdump
[1] 在叢集中建立
fence_kdump
隔離裝置。pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" timeout=30
[1] 設定隔離層級以讓
fence_kdump
隔離機制先執行。pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" pcs stonith level add 1 prod-cl1-0 rsc_st_kdump pcs stonith level add 1 prod-cl1-1 rsc_st_kdump # Replace <stonith-resource-name> to the resource name of the STONITH resource configured in your pacemaker cluster (example based on above configuration - sbd or rsc_st_azure) pcs stonith level add 2 prod-cl1-0 <stonith-resource-name> pcs stonith level add 2 prod-cl1-1 <stonith-resource-name> # Check the fencing level configuration pcs stonith level # Example output # Target: prod-cl1-0 # Level 1 - rsc_st_kdump # Level 2 - <stonith-resource-name> # Target: prod-cl1-1 # Level 1 - rsc_st_kdump # Level 2 - <stonith-resource-name>
[A] 透過防火牆允許
fence_kdump
的必要連接埠。firewall-cmd --add-port=7410/udp firewall-cmd --add-port=7410/udp --permanent
[A] 執行
/etc/kdump.conf
中的fence_kdump_nodes
設定,以避免針對某些kexec-tools
版本的fence_kdump
逾時失敗。 如需詳細資訊,請參閱 fence_kdump在 fence_kdump_nodes 未指定使用 kexec-tools 2.0.15 版或以上版本時逾時 (英文),以及 在使用 kexec-tools 2.0.14 之前版本的 RHEL 6 或 7 高可用性叢集中的 fence_kdump 出現「X 秒後逾時」失敗 (英文)。 這裡顯示兩個節點叢集的範例設定。 在/etc/kdump.conf
中進行變更之後,必須重新產生 kdump 映像。 若要重新產生,請重新啟動kdump
服務。vi /etc/kdump.conf # On node prod-cl1-0 make sure the following line is added fence_kdump_nodes prod-cl1-1 # On node prod-cl1-1 make sure the following line is added fence_kdump_nodes prod-cl1-0 # Restart the service on each node systemctl restart kdump
[A] 確定
initramfs
影像檔包含fence_kdump
和hosts
檔案。 如需詳細資訊,請參閱 如何在 Red Hat Pacemaker 叢集中設定 fence_kdump? (英文)。lsinitrd /boot/initramfs-$(uname -r)kdump.img | egrep "fence|hosts" # Example output # -rw-r--r-- 1 root root 208 Jun 7 21:42 etc/hosts # -rwxr-xr-x 1 root root 15560 Jun 17 14:59 usr/libexec/fence_kdump_send
透過損毀節點來測試設定。 如需詳細資訊,請參閱 如何在 Red Hat Pacemaker 叢集中設定 fence_kdump? (英文)。
重要
如果叢集已用於生產力用途,請據以規劃測試,因為損毀節點會對應用程式造成影響。
echo c > /proc/sysrq-trigger
下一步
- 請參閱適用於 SAP 的 Azure 虛擬機器規劃和實作。
- 請參閱適用於 SAP 的 Azure 虛擬機器部署。
- 請參閱適用於 SAP 的 Azure 虛擬機器 DBMS 部署。
- 若要了解如何建立高可用性並為 Azure VM 上的 SAP HANA 規劃災害復原,請參閱 Azure 虛擬機器上 SAP Hana 的高可用性。