在 Azure 中的 SUSE Linux Enterprise Server 上設定 Pacemaker

本文說明如何在 Azure 的 SUSE Linux Enterprise Server (SLES) 上設置並設定基本的雙節點 Pacemaker 叢集。 這些指令涵蓋了 SLES for SAP 12 SP5、 SLES for SAP 15 SP 4+、 SLES for SAP 16和 。

Prerequisites

概觀

本指南假設你已經部署了所需的資源群組、Azure 虛擬網路、子網路和虛擬機(VM)。

運行於 Linux 的叢集需要 fencing agent 來圍牆不健康的節點。 要在 Azure 上完成此任務,請使用以下方法之一:

  • 使用 Azure 共用磁碟的 SBD (Storage Based Death)
  • 使用 iSCSI 目標的 SBD (Storage Based Death)
  • Azure 柵欄代理程式

附註

本文件中使用以下前綴:

  • [A]:適用於所有節點。
  • [1]:適用於所有節點 1。
  • [2]:適用於所有節點 2。

使用 SBD 搭配 Azure 共享磁碟

透過使用 Azure 共享磁碟,你可以將同一顆硬碟掛載到叢集中所有虛擬機器。 你可以在那個共享磁碟上架設你的 SBD 裝置,無需額外基礎設施需求。

Azure 共享磁碟作為 Pacemaker 叢集中 SBD 裝置的示意圖。

優點

  • 提供供 SBD 使用的原生 Azure 共享區塊裝置選項,且不需要額外資源。
  • 虛擬機器會直接連接受控磁碟,藉此減少對其他網路考量的相依性。

重要考慮

  • 你可以將搭載 Premium SSD SKU 的 Azure 共用磁碟用作 SBD 裝置。
  • 檢視支援的作業系統清單。
  • 使用 Azure 高級共享磁碟的 SBD 裝置支援本地冗餘儲存(LRS)與區域冗餘儲存(ZRS)。
  • 根據您的部署類型,選擇 Azure 共用磁碟的適當備援儲存體作為 SBD 裝置。
    • 使用 LRS 做為 Azure 進階共用磁碟 (skuName - Premium_LRS) 的 SBD 裝置,僅支援在可用性設定組中部署。
    • 建議在可用性區域部署使用 ZRS 作為 Azure 高級共享磁碟(skuName - Premium_ZRS)的 SBD 裝置。
  • 您用於 SBD 裝置的 Azure 共用磁碟不需要很大。 maxShares (部分機器翻譯) 值會判斷可使用共用磁碟的叢集節點數目。 例如,在雙節點叢集(例如 SAP ASCS/ERS 或 SAP Hana 縱向擴充)中,您可以為 SBD 裝置使用 P1 或 P2 磁碟大小。
    • 對於擁有兩個以上節點的叢集,請參閱所選磁碟文件中記載的 maxShares。
  • 不要將 Azure 共享磁碟 SBD 裝置連接在不同的 Pacemaker 叢集之間。
  • 如果您使用具有多個 Azure 共用磁碟的 SBD 裝置,請檢查可連結至 VM 的資料磁碟數目上限。
  • 如需 Azure 共用磁碟限制的詳細資訊,請仔細檢閱 Azure 共用磁片文件 (部分機器翻譯) 的「限制」一節。

使用 SBD 搭配 iSCSI 目標

此解決方案要求您在至少一台額外的虛擬機(VM)上架設網際網路小型電腦系統介面(iSCSI)目標。

iSCSI 伺服器在 Pacemaker 叢集中為 SBD 裝置設置 iSCSI 目標的示意圖。

優點

  • 這些 iSCSI 主機伺服器也能為同一區域內的其他 Pacemaker 叢集提供 iSCSI 目標。
  • 如果你已經在本地使用它們,它們不需要改變 Pacemaker 叢集的操作方式。

重要考慮

  • 你必須使用三台 iSCSI 主機伺服器,才能讓叢集具備最高等級的韌性。
    • 僅使用一台伺服器會導致單一故障點;如果該伺服器宕機,您的叢集將無法執行隔離。
    • 如果您只有兩個目標,且其中一個已停機,Pacemaker 不允許進行隔離。
  • iSCSI 目標主機伺服器必須與你的叢集位於同一區域。
  • 叢集與 iSCSI 主機伺服器之間的網路路由不得經過任何非冗餘的網路裝置(如 網路虛擬設備)。
    • 維護事件及網路設備的其他問題會對整體叢集配置的穩定性與可靠性產生負面影響。

使用 Azure Fence 代理

使用 Azure Fence Agent,您的叢集可以直接呼叫 Azure API 重新啟動故障節點,藉此隔離節點。

Azure 柵欄代理程式在 Pacemaker 叢集中的示意圖。

優點

  • 不需要額外資源。
  • 受控識別可免除任何憑證維護。

重要考慮

  • 使用受管理身份來進行認證。 如果你目前正在使用服務主體,請將 Azure Fence 代理從 SPN 更新為 MSI。
  • Azure fence 代理程式需要具備對公用 Azure 端點的對外連線能力。 如需可能解決方案的詳細資訊,請參閱 使用標準 ILB 的 VM 公用端點連線。
  • 監視和隔離作業為還原序列化。 因此,如果有長時間執行的監視作業和同時隔離事件,因為已經在執行監視作業,所以叢集容錯移轉不會延遲。

部署用於 SBD 的 Azure 共用磁碟

要使用 PowerShell 建立並附加 Azure 共享磁碟,請執行以下指令。 如果你想使用 Azure CLI 或 Azure 入口網站來部署資源,請參考部署 ZRS 磁碟。

$ResourceGroup = "<ResourceGroupName>"
$DiskSizeInGB = 4
$DiskName = "<SBDDiskName>"
# Must be Equal to or greater than the Number of Nodes in the Cluster
$ShareNodes = 2 
# Options are "Premium_LRS" or "Premium_ZRS"
$SKUName = "<DiskSKU>"
# VMs to attach the disk to
$vmNames = @("sap-cl1", "sap-cl2")
# Lun to attach the disk to. You should use the same lun on all servers in the cluster.
$lunNumber = <lunNumber>

$diskConfig = New-AzDiskConfig -Location $Location -SkuName $SkuName -CreateOption Empty -DiskSizeGB $DiskSizeInGB -MaxSharesCount $ShareNodes

$dataDisk = New-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Disk $diskConfig

# Attach SBD disk to cluster VMs
foreach ($vmName in $vmNames) 
{
  $vm = Get-AzVM -ResourceGroupName $resourceGroup -Name $vmName
  Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun $lunNumber
  Update-AzVM -VM $vm -ResourceGroupName $resourceGroup -Verbose
}

使用 iSCSI 目標

建置 iSCSI 目標主機伺服器

  1. 部署三台在支援的 SLES 作業系統版本上運行的虛擬機器。 虛擬機不需要很大。 虛擬機大小如Standard_E2s或Standard_D2s就足夠了。

    附註

    你不需要將 SLES for SAP Applications 作業系統映像用於 iSCSI 目標伺服器。 你可以改用標準的 SLES OS 映像檔。 不過,支援生命週期會因不同的 OS 產品版本而異。

  2. 安裝最新的更新,必要時重新啟動。

    sudo zypper -n update
    
  3. 安裝 iSCSI 目標套件。

    sudo zypper -n install targetcli-fb
    
  4. 啟用並啟動 iSCSI 服務。

    sudo systemctl start targetcli
    sudo systemctl enable targetcli
    

建立 iSCSI 目標

每個叢集都需要在每個 iSCSI 主機伺服器上配置一顆 iSCSI 磁碟,然後授權每個叢集節點存取該磁碟。 在這個例子中,你為兩個不同的叢集建立磁碟:

  • ascsnw1:NW1的ASCS/ERS群組
  • hdbnw1:NW1 的 HANA 資料庫叢集
  • sap-cl1 與 sap-cl2:NW1 ASCS/ERS 叢集節點的主機名稱
  • sap-db1 與 sap-db2:NW1 HANA 叢集節點的主機名稱
  1. 為所有 SBD 裝置建立根資料夾。
    sudo mkdir /sbd
    
  2. 建立第一個叢集(ascsnw1)的 SBD 裝置。
    # Create Storage Object
    sudo targetcli backstores/fileio create sbdascsnw1 /sbd/sbdascsnw1 50M write_back=false
    # Create iSCSI Target
    sudo targetcli iscsi/ create iqn.2006-04.ascsnw1.local:ascsnw1
    # Creates the LUN and attaches it to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/luns/ create /backstores/fileio/sbdascsnw1
    # Grant Cluster Node 1 (sap-cl1) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl1.local:sap-cl1
    # Grant Cluster Node 2 (sap-cl2) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.sap-cl2.local:sap-cl2
    
  3. 為第二個叢集(hdbnw1)建立 SBD 裝置。
    # Create Storage Object
    sudo targetcli backstores/fileio create sbdhdbnw1 /sbd/sbdhdbnw1 50M write_back=false
    # Create iSCSI Target
    sudo targetcli iscsi/ create iqn.2006-04.hdbnw1.local:hdbnw1
    # Creates the LUN and attaches it to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/luns/ create /backstores/fileio/sbdhdbnw1
    # Grant Cluster Node 1 (sap-db1) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/acls/ create iqn.2006-04.sap-db1.local:sap-db1
    # Grant Cluster Node 2 (sap-db2) access to the iSCSI Target
    sudo targetcli iscsi/iqn.2006-04.hdbnw1.local:hdbnw1/tpg1/acls/ create iqn.2006-04.sap-db2.local:sap-db2
    
  4. 儲存設定。
    sudo targetcli saveconfig
    
  5. 確認設定。
    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- sbdhdbnw1 ....................................... [/sbd/sbdhdbnw1 (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.hdbnw1.local:hdbnw1 ......................................................... [TPGs: 1]
      | | o- tpg1 ..................................................................... [no-gen-acls, no-auth]
      | |   o- acls ................................................................................ [ACLs: 2]
      | |   | o- iqn.2006-04.sap-db1.local:sap-db1 .......................................... [Mapped LUNs: 1]
      | |   | | o- mapped_lun0 ..................................................... [lun0 fileio/sbdhdb (rw)]
      | |   | o- iqn.2006-04.sap-db2.local:sap-db2 .......................................... [Mapped LUNs: 1]
      | |   |   o- mapped_lun0 ..................................................... [lun0 fileio/sbdhdb (rw)]
      | |   o- luns ................................................................................ [LUNs: 1]
      | |   | o- lun0 ................................. [fileio/sbdhdbnw1 (/sbd/sbdhdbnw1) (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/sbdascsnw1 (rw)]
      |     | o- iqn.2006-04.sap-cl2.local:sap-cl2 .......................................... [Mapped LUNs: 1]
      |     |   o- mapped_lun0 ................................................. [lun0 fileio/sbdascsnw1 (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]
    

設定 Azure Fence Agent

  1. 創建標識

    要建立受管理身份(MSI),請為叢集中的每台虛擬機 建立系統指派的受管理身份 。 目前不支援使用者指派的管理身份。

  2. 建立一個自訂角色。

    您的身分識別需要透過 Azure RBAC 取得權限,才能對您的虛擬機器執行隔離動作。 為了符合最低權限存取(LPA)安全模型,請 建立一個自訂的 RBAC 角色。

    請依照以下定義來描述你的角色,必要時替換你的訂閱 ID:

    {
          "Name": "Linux Fence Agent",
          "description": "Allowed to power-off and start virtual machines",
          "assignableScopes": [
                  "/subscriptions/<Subscription 1 ID (GUID)>",
                  "/subscriptions/<Subscription N ID (GUID)>"
          ],
          "actions": [
                  "Microsoft.Compute/*/read",
                  "Microsoft.Compute/virtualMachines/powerOff/action",
                  "Microsoft.Compute/virtualMachines/start/action"
          ],
          "notActions": [],
          "dataActions": [],
          "notDataActions": []
    }
    
  3. 將自訂角色指派給您的身分識別。

    對於叢集中的每台虛擬機,將其管理身份分配給該叢集中每台虛擬機(包括自身)的自訂「Linux Fence 代理」角色。 如需詳細步驟,請參閱使用 Azure 入口網站為受控識別指派對資源的存取權。

    重要事項

    請注意,受控識別的授與和移除授權 可能需要一段時間 才會生效。

建立與配置叢集

  1. [A] 更新作業系統並在需要時重新啟動。

    sudo zypper -n update
    
  2. [A] 安裝所需的叢集套件。

    sudo zypper -n install socat pacemaker resource-agents 
    
  3. [A] 安裝所需的圍欄套件。

    sudo zypper -n install sbd
    
    sudo zypper -n install sbd open-iscsi
    
    sudo zypper -n install fence-agents-azure-arm
    
  4. [A] 設定 DNS。

    您可以使用 DNS 伺服器,或修改所有節點上的 /etc/hosts。 此範例說明如何使用 /etc/hosts 檔案。

    更新條目以符合你的 IP 和主機名稱。

    sudo vi /etc/hosts
    [...]
    # IP address of cluster node 1
    10.27.0.6    sap-cl1
    # IP address of cluster node 2
    10.27.0.7    sap-cl2
    
    sudo vi /etc/hosts
    [...]
    # IP address of cluster node 1
    10.0.0.6    sap-cl1
    # IP address of cluster node 2
    10.0.0.7    sap-cl2
    # IP address of iSCSI Target Host Server 1
    10.0.0.17   sbd-iscsi1
    # IP address of iSCSI Target Host Server 1
    10.0.0.18   sbd-iscsi2
    # IP address of iSCSI Target Host Server 1
    10.0.0.19   sbd-iscsi3
    
  5. [A] 在節點之間交換 SSH root 金鑰。

    sudo ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
    sudo cat /root/.ssh/id_ed25519.pub
    sudo vi /root/.ssh/authorized_keys
    [...]
    <Contents from cat command on other server>
    
  6. [A] 設定作業系統。

    1. 調整高記憶體系統上 NFS 用戶端的待寫入快取 (dirty cache)。 更多資訊請參閱 此 文章。
      sudoedit /etc/sysctl.d/30-nfs.conf && sudo sysctl --system
      
      vm.dirty_bytes = 629145600
      vm.dirty_background_bytes = 314572800
      
    2. 確保 vm.swappiness 設定為 10,以減少交換使用並優先使用記憶體。
      sudoedit /etc/sysctl.d/31-memswap.conf && sudo sysctl --system
      
      vm.swappiness = 10
      
    3. 僅限 SLES 12 SP 5:Pacemaker 偶爾會建立大量處理程序,可能會用盡允許的數量上限。 在此情況下,叢集節點之間的活動訊號可能會失敗,而導致您的資源容錯移轉。 透過設定以下參數,增加允許的最大程序數量:
      # Edit the configuration file
      sudo vi /etc/systemd/system.conf
      [...]
      DefaultTasksMax=4096
      [...]
      
      # Activate this setting
      sudo systemctl daemon-reload
      
      # Test to ensure that the change was successful
      sudo systemctl --no-pager show | grep DefaultTasksMax
      
  7. [1] 建立叢集。

    sudo crm cluster init --yes --name ascsnw1 --node sap-cl1 --node sap-cl2
    
  8. [1] 設定叢集設定。

    sudo crm corosync set totem.token 30000
    sudo csync2 -xv
    sudo crm cluster run "corosync-cfgtool -R"
    
  9. 為 Pacemaker 設定啟動延遲。

    在開機後立即啟動 Pacemaker,可能會讓某個節點在容錯移轉完成前重新加入叢集,進而導致容錯移轉失敗或復原延遲。 為了解決這個問題,可以用計時器服務來延遲重啟時的心臟起搏器啟動。

    1. [A] 設定定時器服務。
      sudo vi /etc/systemd/system/pacemaker.timer   
      
      [Unit]
      Description=Delay start of pacemaker.service after boot
      [Timer]
      OnBootSec=216
      Unit=pacemaker.service
      [Install]
      WantedBy=timers.target
      
    2. [A] 啟用計時器服務。
      sudo systemctl daemon-reload
      sudo systemctl enable pacemaker.timer
      
    3. [1] 停用心臟起搏器服務。
      sudo crm cluster disable --all
      
  10. 驗證叢集。

    1. [1] 驗證心臟起搏器叢集。
      sudo crm status
      
      Cluster Summary:
        * Stack: corosync (Pacemaker is running)
        * Current DC: sap-cl1 (version 2.1.7+20231219.0f7f88312-150600.6.15.1-2.1.7+20231219.0f7f88312) - partition with quorum
        * Last updated: Tue Aug  4 17:50:24 2026 on sap-cl1
        * Last change:  Thu Jul 30 19:02:56 2026 by hacluster via hacluster on sap-cl1
        * 2 nodes configured
        * 0 resource instances configured
      
      Node List:
        * Online: [ sap-cl1 sap-cl2 ]
      
      Full List of Resources:
      
    2. [A] 驗證服務。
      systemctl list-unit-files pacemaker.timer pacemaker.service corosync.service
      
      UNIT FILE         STATE    PRESET
      corosync.service  disabled disabled
      pacemaker.service disabled disabled
      pacemaker.timer   enabled  disabled
      

配置圍欄

  1. [A] 啟用 SBD 服務。
    sudo systemctl enable sbd
    
  2. [A] 啟用軟體看門狗。
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [A] 發現 iSCSI 裝置 ID。
    1. 根據 LUN 編號決定安裝點
      ls -l /dev/disk/azure/scsi1/lun1
      lrwxrwxrwx. 1 root root 12 Apr 16 20:22 /dev/disk/azure/scsi1/lun1 -> ../../../sdb
      
    2. 從掛載取得 iSCSI 裝置識別碼。
      ls -l /dev/disk/by-id/scsi-3* | grep -i sdb
      lrwxrwxrwx. 1 root root  9 Apr 16 20:22 /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -> ../../sdb
      
  4. [1] 建立 SBD 裝置。
    sudo sbd -d /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617 -1 60 -4 120 create
    
  1. [1] 將 SBD 裝置加入叢集。
    sudo crm cluster init --yes sbd -s /dev/disk/by-id/scsi-360022480055c9f501a24256ea0f87617
    
  2. [1] 更改 SBD 設定。
    sudo crm configure property stonith-timeout=210
    sudo crm configure property stonith-enabled=true
    # For the below command, 600 is the interval, and 120 is the timeout
    sudo crm configure monitor stonith-sbd 600:120
    sudo crm configure set stonith-sbd.pcmk_delay_max 15
    
  3. [A] 驗證 SBD 設定檔。
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [A] 啟用所需的服務。
    sudo systemctl enable sbd iscsi iscsid
    
  2. [A] 啟用軟體看門狗。
    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    sudo modprobe softdog
    
  3. [1] 更新節點 1 的 InitiatorName。
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl1.local:sap-cl1
    
  4. [2] 更新節點 2 的InitiatorName。
    # Node 2
    sudo vi /etc/iscsi/initiatorname.iscsi
    [...]
    InitiatorName=iqn.2006-04.sap-cl2.local:sap-cl2
    
  5. [A] 重新啟動 iSCSI 服務。
    sudo systemctl restart iscsi iscsid
    
  6. [A] 從所有 iSCSI 主機伺服器掛載 iSCSI 目標。
    for hostServer in sbd-iscsi1 sbd-iscsi2 sbd-iscsi3; do
       iscsiadm -m discovery --type=st --portal=${hostServer}:3260 
       iscsiadm -m node -T iqn.2006-04.ascsnw1.local:ascsnw1 --login --portal=${hostServer}:3260
       iscsiadm -m node --portal=${hostServer}:3260 -T iqn.2006-04.ascsnw1.local:ascsnw1 --op=update --name=node.startup --value=automatic
    done
    
  7. [A] 發現 iSCSI 裝置 ID。
    1. 確定 iSCSI 的掛載點。
      lsscsi
      [0:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
      [1:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdb
      [2:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sdc
      [3:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sdd
      [4:0:0:0]    disk    LIO-ORG  sbdascsnw1       4.0   /dev/sde
      
    2. 取得 iSCSI 裝置 ID。
      ls -l /dev/disk/by-id/scsi-3* | grep sd[c,d,e]
      lrwxrwxrwx 1 root root  9 Jul 21 18:02 /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 -> ../../sdd
      lrwxrwxrwx 1 root root  9 Jul 21 17:50 /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff -> ../../sdc
      lrwxrwxrwx 1 root root  9 Jul 21 18:04 /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5 -> ../../sde
      
  8. [1] 建立SBD裝置。
    sudo sbd -d /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 -1 60 -4 120 create
    sudo sbd -d /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff -1 60 -4 120 create
    sudo sbd -d /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5 -1 60 -4 120 create
    
  1. [1] 將 SBD 裝置加入叢集。
    sudo crm cluster init --yes sbd \
       -s /dev/disk/by-id/scsi-3600140537cf4c6d604a4ae4b58f1a528 \
       -s /dev/disk/by-id/scsi-360014056e4d07b80e1148ac973330dff \
       -s /dev/disk/by-id/scsi-360014059f135275c24647d49268123e5
    
  2. [1] 更改 SBD 設定。
    sudo crm configure property stonith-timeout=210
    sudo crm configure property stonith-enabled=true
    # For the below command, 600 is the interval, and 120 is the timeout
    sudo crm configure monitor stonith-sbd 600:120
    sudo crm configure set stonith-sbd.pcmk_delay_max 15
    
  3. [A] 驗證 SBD 設定檔。
    sudo vi /etc/sysconfig/sbd
    
    [...]
    SBD_DELAY_START=no
    [...]
    SBD_PACEMAKER=yes
    [...]
    SBD_STARTMODE=always
    [...]
    
  1. [1] 配置 Azure 圍欄代理。

    附註

    使用 Azure 政府雲端時,必須在設定 Azure Fence 代理時指定該cloud=選項。 例如,適用於Azure美國政府雲端的cloud=usgov。

    sudo crm configure primitive rsc_st_azure stonith:fence_azure_arm params msi=true \ 
       resourceGroup="<ResourceGroupName>" subscriptionId="<SubscriptionID>" \
       pcmk_host_map="sap-cl1:<AzureVMNameCL1>;sap-cl2:<AzureVMNameCL2>" \
       power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 \
       pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
       meta failure-timeout=120s op monitor interval=3600 timeout=120
    
  2. [1] 為 Azure Fence 代理配置叢集。

    sudo crm configure property stonith-enabled=true
    sudo crm configure property stonith-timeout=900
    

建立包含多個節點的 Pacemaker 叢集

如果你正在建立較大的叢集,請記得以下幾點:

  1. [1] 調整叢集配置。

    當你新增第三個或更多節點時, quorum.two_node 和 quorum.expected_votes 值會自動更新。 驗證 quorum.two_node 是 , 0 並且 quorum.expected_votes 等於你叢集中的節點數量。

    sudo crm corosync get quorum.two_node
    sudo crm corosync get quorum.expected_votes
    
  2. 調整圍欄配置。

    sudo crm resource param stonith-sbd delete pcmk_delay_max
    sudo crm resource param stonith-sbd set pcmk_action_limit -1
    
    sudo crm resource param rsc_st_azure delete pcmk_delay_max
    sudo crm resource param rsc_st_azure pcmk_action_limit -1
    

為 Azure 已排定事件設定 Pacemaker

排程事件是一項 Azure 元資料服務,讓你的應用程式有時間準備虛擬機維護。 它提供即將到來的維護事件資訊,例如重啟,讓你的應用程式能做好準備並減少中斷。

azure-events-az resource agent 會監控這個 metadata 服務。 當代理偵測事件並判斷有其他叢集節點可用時,會將節點層級的健康屬性 #health-azure 設定為 -1000000。 此值會使叢集認為該節點不健康,並將資源從受影響節點遷移。 位置約束可確保以 health- 開頭的資源會被排除,因為 azure-events-az 代理程式仍需在兩個節點上執行。 一旦受影響的叢集節點不再執行叢集資源,代理程式會通知元資料服務,排程事件即可繼續進行。 當所有事件完成後,資源代理會將屬性 #health-azure 設回為 0,將節點標記為健康狀態。

重要事項

先前,本文件說明如何使用資源代理程式 azure-events。 新的資源代理程式 azure-events-az 完整支援在不同可用性區域中部署的 Azure 環境。 針對所有搭配 Pacemaker 的 SAP 高可用性系統,請使用較新的 azure-events-az 代理程式。

  1. 僅SLES 12 SP5 檢查你的套件版本,必要時更新 resource-agents 。 SLES 15 及以上版本預設包含此功能。

    zypper info resource-agents
    

    最小版本為 resource-agents-4.3.018.a7fb5035-3.98.1。

  2. [1] 將叢集置於維護模式。

    sudo crm configure property maintenance-mode=true
    
  3. [1] 設定心臟起搏器叢集健康節點策略與限制。

    重要事項

    除了接下來步驟中描述的資源外,不要在叢集中定義其他以 開頭 health-的資源。

    sudo crm configure property node-health-strategy=custom
    sudo crm configure location loc_azure_health \
       /'!health-.*'/ rule '#health-azure': defined '#uname'
    
  4. [1] 設定叢集屬性的初始值。

    為每個叢集節點執行指令。 在相應放大的環境中,請納入多數決 VM (majority maker)。

    # Node 1
    sudo crm_attribute --node sap-cl1 --name '#health-azure' --update 0
    # Node 2
    sudo crm_attribute --node sap-cl2 --name '#health-azure' --update 0
    # Node N
    sudo crm_attribute --node sap-clN --name '#health-azure' --update 0
    
  5. [1] 在 Pacemaker 中設定資源。 資源必須從 health-azure開始。

    sudo crm configure primitive health-azure-events ocf:heartbeat:azure-events-az \
       meta failure-timeout=120s \
       op start start-delay=60s \
       op monitor interval=10s
    
    sudo crm configure clone health-azure-events-cln health-azure-events \
       meta allow-unhealthy-nodes=true
    

    附註

    當您設定 health-azure-events 資源時,可以忽略下列警告訊息。

    警告:health-azure-events:未知屬性 'allow-healthy-nodes'。

  6. 將心臟起搏器叢集從維護模式中移除並清除所有錯誤。

    sudo crm configure property maintenance-mode=false
    sudo crm resource cleanup
    
  7. 確認所有 health-azure-events 節點都成功啟動。

    crm status
    
    Cluster Summary:
      * Stack: corosync (Pacemaker is running)
      * Current DC: sap-cl1 (version 3.0.0+20250218.64cd85422c-160000.4.1-3.0.0+20250218.64cd85422c) - partition with quorum
      * Last updated: Thu Jul 30 19:07:49 2026 on sap-cl1
      * Last change:  Thu Jul 30 19:06:01 2026 by root via root on sap-cl1
      * 2 nodes configured
      * 3 resource instances configured
    
    Node List:
      * Online: [ z04ascs3 z04ascs4 ]
    
    Full List of Resources:
      * stonith-sbd (stonith:fence_sbd):     Started sap-cl1
      * Clone Set: health-azure-events-cln [health-azure-events]:
        * Started: [ sap-cl1 sap-cl2 ]
    

    排程事件的首次查詢執行 可能長達 2 分鐘。 使用已排定事件的 Pacemaker 測試,可以使用叢集 VM 的重新啟動或重新部署動作。 欲了解更多資訊,請參閱 已安排活動。

    附註

    在你為 azure-events agent 設定 Pacemaker 資源後,若將叢集置於維護模式或退出,可能會收到以下警告訊息:

    警告:cib-bootstrap-options:未知的屬性 'hostName_hostname'
    警告:cib-bootstrap-options:不明的屬性 'azure-events_globalPullState'
    警告:cib-bootstrap-options:不明的屬性 'hostName_ hostname'
    你可以忽略這些警告訊息。

後續步驟