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

本文討論如何在 Azure 中的 SUSE Linux Enterprise Server (SLES) 上設定 Pacemaker。

概觀

在 Azure 中,您有兩個選項可用來在 SLES 的 Pacemaker 叢集中設定隔離。 您可以使用 Azure 柵欄代理程式,此程式可透過 Azure API 重新開機失敗的節點,或使用 SBD 裝置。

使用 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 時,這是最具復原性的設定。

    SLES 概觀上的 Pacemaker 圖表。

    重要

    當您規劃及部署 Linux Pacemaker 叢集節點和 SBD 裝置時,請不要允許虛擬機器與裝載 SBD 裝置的 VM 之間的路由通過任何其他裝置,例如網路虛擬設備 (NVA)

    維護事件與 NVA 相關的問題會對整體叢集設定的穩定性與可靠性造成負面影響。 如需詳細資訊,請參閱使用者定義的路由規則 (部分機器翻譯)。

  • 具有 Azure 共用磁碟的 SBD:

    若要設定 SBD 裝置,您必須至少將一個 Azure 共用磁碟 (英文) 連結至屬於 Pacemaker 叢集的所有虛擬機器。 使用 Azure 共用磁碟的 SBD 裝置的優點是,您不需要部署額外的虛擬機。

    適用於 SLES Pacemaker 叢集的 Azure 共用磁碟 SBD 裝置圖表。

    以下是當您使用 Azure 共用磁碟時,關於 SBD 裝置的一些重要考量因素:

    • 支援將具有進階 SSD 的 Azure 共用磁碟作為 SBD 裝置。
    • SLES 高可用性 15 SP01 和更新版本支援使用 Azure 共用磁碟的 SBD 裝置。
    • 本地備援儲存體 (LRS) (部分機器翻譯) 和 區域備援儲存體 (ZRS) (部分機器翻譯) 支援使用 Azure 進階共用磁碟的 SBD 裝置。
    • 根據您的 部署類型,為 Azure 共用磁碟選擇適當的備援記憶體作為 SBD 裝置。
    • 針對將 LRS 用於 Azure 進階共用磁碟 (skuName - Premium_LRS) 的 SBD 裝置,僅在可用性設定組中的部署受到支援。
    • 針對將 ZRS 用於 Azure 進階共用磁碟 (skuName - Premium_ZRS) 的 SBD 裝置,建議用於可用性區域中的部署。
    • 受控磁碟的 ZRS 目前在所有具有可用性區域的區域中都無法使用。 如需詳細資訊,請檢閱受控磁碟的備援選項 (部分機器翻譯) 中的 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 目標伺服器。

  1. 部署新的 SLES 12 SP3 或更新版本的虛擬機器,並透過 SSH 連線到這些機器。 這些機器不需要是大型機器。 Standard_E2s_v3 或 Standard_D2s_v3 的虛擬機器大小就已足夠。 請務必為 OS 磁碟使用進階儲存體。

  2. iSCSI 目標虛擬機器上,執行下列命令:

    a. 更新 SLES。

    sudo zypper update
    

    注意

    升級或更新 OS 之後,您可能需要重新開機作業系統。

    b. 移除套件。

    若要避免 targetcli 和 SLES 12 SP3 的已知的問題,請解除安裝下列套件。 您可以忽略與找不到套件有關的錯誤。

    sudo zypper remove lio-utils python-rtslib python-configshell targetcli
    

    c. 安裝 iSCSI 目標套件。

    sudo zypper install targetcli-fb dbus-1-python
    

    d. 啟用 iSCSI 目標服務。

    sudo systemctl enable targetcli
    sudo systemctl start targetcli
    

在 iSCSI 目標伺服器上建立 iSCSI 裝置

若要為 SAP 系統所用的叢集建立 iSCSI 磁碟,請在所有 iSCSI 目標虛擬機器上執行下列命令。 在範例中會建立多個叢集的 SBD 裝置。 它會示範如何對多個叢集使用一個 iSCSI 目標伺服器。 SBD 裝置會置於 OS 磁碟上。 確定您有足夠的空間。

  • nfs:識別 NFS 叢集。
  • ascsnw1:識別 NW1 的 ASCS 叢集。
  • dbnw1:識別 NW1 的資料庫叢集。
  • nfs-0nfs-1:NFS 叢集節點的主機名稱。
  • nw1-xscs-0nw1-xscs-1NW1 ASCS 叢集節點的主機名稱。
  • nw1-db-0nw1-db-1:資料庫叢集節點的主機名稱。

在下列指示中,取代調整叢集節點的主機名和 SAP 系統的 SID。

  1. 為所有 SBD 裝置建立根資料夾。

    sudo mkdir /sbd
    
  2. 為 NFS 伺服器建立 SBD 裝置。

    sudo targetcli backstores/fileio create sbdnfs /sbd/sbdnfs 50M write_back=false
    sudo targetcli iscsi/ create iqn.2006-04.nfs.local:nfs
    sudo targetcli iscsi/iqn.2006-04.nfs.local:nfs/tpg1/luns/ create /backstores/fileio/sbdnfs
    sudo targetcli iscsi/iqn.2006-04.nfs.local:nfs/tpg1/acls/ create iqn.2006-04.nfs-0.local:nfs-0
    sudo targetcli iscsi/iqn.2006-04.nfs.local:nfs/tpg1/acls/ create iqn.2006-04.nfs-1.local:nfs-1
    
  3. 為 SAP 系統 NW1 的 ASCS 伺服器建立 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.nw1-xscs-0.local:nw1-xscs-0
    sudo targetcli iscsi/iqn.2006-04.ascsnw1.local:ascsnw1/tpg1/acls/ create iqn.2006-04.nw1-xscs-1.local:nw1-xscs-1
    
  4. 為 SAP 系統 NW1 的資料庫叢集建立 SBD 裝置。

    sudo targetcli backstores/fileio create sbddbnw1 /sbd/sbddbnw1 50M write_back=false
    sudo targetcli iscsi/ create iqn.2006-04.dbnw1.local:dbnw1
    sudo targetcli iscsi/iqn.2006-04.dbnw1.local:dbnw1/tpg1/luns/ create /backstores/fileio/sbddbnw1
    sudo targetcli iscsi/iqn.2006-04.dbnw1.local:dbnw1/tpg1/acls/ create iqn.2006-04.nw1-db-0.local:nw1-db-0
    sudo targetcli iscsi/iqn.2006-04.dbnw1.local:dbnw1/tpg1/acls/ create iqn.2006-04.nw1-db-1.local:nw1-db-1
    
  5. 儲存 targetcli 變更。

    sudo targetcli saveconfig
    
  6. 檢查以確定所有專案都已正確設定。

    sudo targetcli ls
    
    o- / .......................................................................................................... [...]
    o- backstores ............................................................................................... [...]
    | o- block ................................................................................... [Storage Objects: 0]
    | o- fileio .................................................................................. [Storage Objects: 3]
    | | o- sbdascsnw1 ................................................ [/sbd/sbdascsnw1 (50.0MiB) write-thru activated]
    | | | o- alua .................................................................................... [ALUA Groups: 1]
    | | |   o- default_tg_pt_gp ........................................................ [ALUA state: Active/optimized]
    | | o- sbddbnw1 .................................................... [/sbd/sbddbnw1 (50.0MiB) write-thru activated]
    | | | o- alua .................................................................................... [ALUA Groups: 1]
    | | |   o- default_tg_pt_gp ........................................................ [ALUA state: Active/optimized]
    | | o- sbdnfs ........................................................ [/sbd/sbdnfs (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: 3]
    | o- iqn.2006-04.ascsnw1.local:ascsnw1 .................................................................. [TPGs: 1]
    | | o- tpg1 ................................................................................ [no-gen-acls, no-auth]
    | |   o- acls ........................................................................................... [ACLs: 2]
    | |   | o- iqn.2006-04.nw1-xscs-0.local:nw1-xscs-0 ............................................... [Mapped LUNs: 1]
    | |   | | o- mapped_lun0 ............................................................ [lun0 fileio/sbdascsnw1 (rw)]
    | |   | o- iqn.2006-04.nw1-xscs-1.local:nw1-xscs-1 ............................................... [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- iqn.2006-04.dbnw1.local:dbnw1 ...................................................................... [TPGs: 1]
    | | o- tpg1 ................................................................................ [no-gen-acls, no-auth]
    | |   o- acls ........................................................................................... [ACLs: 2]
    | |   | o- iqn.2006-04.nw1-db-0.local:nw1-db-0 ................................................... [Mapped LUNs: 1]
    | |   | | o- mapped_lun0 .............................................................. [lun0 fileio/sbddbnw1 (rw)]
    | |   | o- iqn.2006-04.nw1-db-1.local:nw1-db-1 ................................................... [Mapped LUNs: 1]
    | |   |   o- mapped_lun0 .............................................................. [lun0 fileio/sbddbnw1 (rw)]
    | |   o- luns ........................................................................................... [LUNs: 1]
    | |   | o- lun0 .............................................. [fileio/sbddbnw1 (/sbd/sbddbnw1) (default_tg_pt_gp)]
    | |   o- portals ..................................................................................... [Portals: 1]
    | |     o- 0.0.0.0:3260 ...................................................................................... [OK]
    | o- iqn.2006-04.nfs.local:nfs .......................................................................... [TPGs: 1]
    |   o- tpg1 ................................................................................ [no-gen-acls, no-auth]
    |     o- acls ........................................................................................... [ACLs: 2]
    |     | o- iqn.2006-04.nfs-0.local:nfs-0 ......................................................... [Mapped LUNs: 1]
    |     | | o- mapped_lun0 ................................................................ [lun0 fileio/sbdnfs (rw)]
    |     | o- iqn.2006-04.nfs-1.local:nfs-1 ......................................................... [Mapped LUNs: 1]
    |     |   o- mapped_lun0 ................................................................ [lun0 fileio/sbdnfs (rw)]
    |     o- luns ........................................................................................... [LUNs: 1]
    |     | o- lun0 .................................................. [fileio/sbdnfs (/sbd/sbdnfs) (default_tg_pt_gp)]
    |     o- portals ..................................................................................... [Portals: 1]
    |       o- 0.0.0.0:3260 ...................................................................................... [OK]
    o- loopback .......................................................................................... [Targets: 0]
    o- vhost ............................................................................................. [Targets: 0]
    o- xen-pvscsi ........................................................................................ [Targets: 0]
    

設定 iSCSI 目標伺服器 SBD 裝置

從叢集連線到您在上一個步驟中建立的 iSCSI 裝置。 在您想要建立的新叢集節點上,執行下列命令。

注意

  • [A]:適用於所有節點。
  • [1]:僅適用於節點 1。
  • [2]:僅適用於節點 2。
  1. [A] 安裝 iSCSI 套件。

    sudo zypper install open-iscsi
    
  2. [A] 連線到 iSCSI 裝置。 首先,啟用 iSCSI 和 SBD 服務。

    sudo systemctl enable iscsid
    sudo systemctl enable iscsi
    sudo systemctl enable sbd
    
  3. [1] 變更第一個節點上的啟動器名稱。

    sudo vi /etc/iscsi/initiatorname.iscsi
    
  4. [1] 變更檔案內容,以符合您在 iSCSI 目標伺服器 (例如 NFS 伺服器) 上建立 iSCSI 裝置時使用的存取控制清單 (ACL)。

    InitiatorName=iqn.2006-04.nfs-0.local:nfs-0
    
  5. [2] 變更第二個節點上的啟動器名稱。

    sudo vi /etc/iscsi/initiatorname.iscsi
    
  6. [2] 變更檔案內容,以符合您在 iSCSI 目標伺服器上建立 iSCSI 裝置時使用的 ACL。

    InitiatorName=iqn.2006-04.nfs-1.local:nfs-1
    
  7. [A] 重新啟動 iSCSI 服務以套用變更。

    sudo systemctl restart iscsid
    sudo systemctl restart iscsi
    
  8. [A] 連線到 iSCSI 裝置。 在下列範例中,iSCSI 目標伺服器的 IP 位址是 10.0.0.17,預設連接埠是 3260。 iqn.2006-04.nfs.local:nfs 是當您執行第一個命令 (iscsiadm -m discovery) 時列出的其中一個目標名稱。

    sudo iscsiadm -m discovery --type=st --portal=10.0.0.17:3260   
    sudo iscsiadm -m node -T iqn.2006-04.nfs.local:nfs --login --portal=10.0.0.17:3260
    sudo iscsiadm -m node -p 10.0.0.17:3260 -T iqn.2006-04.nfs.local:nfs --op=update --name=node.startup --value=automatic
    
  9. [A] 如果您想使用多個 SBD 裝置,請同時連線到第二個 iSCSI 目標伺服器。

    sudo iscsiadm -m discovery --type=st --portal=10.0.0.18:3260   
    sudo iscsiadm -m node -T iqn.2006-04.nfs.local:nfs --login --portal=10.0.0.18:3260
    sudo iscsiadm -m node -p 10.0.0.18:3260 -T iqn.2006-04.nfs.local:nfs --op=update --name=node.startup --value=automatic
    
  10. [A] 如果您想使用多個 SBD 裝置,請連線到第三個 iSCSI 目標伺服器。

    sudo iscsiadm -m discovery --type=st --portal=10.0.0.19:3260   
    sudo iscsiadm -m node -T iqn.2006-04.nfs.local:nfs --login --portal=10.0.0.19:3260
    sudo iscsiadm -m node -p 10.0.0.19:3260 -T iqn.2006-04.nfs.local:nfs --op=update --name=node.startup --value=automatic
    
  11. [A] 請確定 iSCSI 裝置可以使用,並記下裝置名稱 (在下列範例中為 /dev/sde)。

    lsscsi
    
    # [2:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
    # [3:0:1:0]    disk    Msft     Virtual Disk     1.0   /dev/sdb
    # [5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc
    # [5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd
    # [6:0:0:0]    disk    LIO-ORG  sbdnfs           4.0   /dev/sdd
    # [7:0:0:0]    disk    LIO-ORG  sbdnfs           4.0   /dev/sde
    # [8:0:0:0]    disk    LIO-ORG  sbdnfs           4.0   /dev/sdf
    
  12. [A] 擷取 iSCSI 裝置的識別碼。

    ls -l /dev/disk/by-id/scsi-* | grep sdd
    
    # lrwxrwxrwx 1 root root  9 Aug  9 13:20 /dev/disk/by-id/scsi-1LIO-ORG_sbdnfs:afb0ba8d-3a3c-413b-8cc2-cca03e63ef42 -> ../../sdd
    # lrwxrwxrwx 1 root root  9 Aug  9 13:20 /dev/disk/by-id/scsi-36001405afb0ba8d3a3c413b8cc2cca03 -> ../../sdd
    # lrwxrwxrwx 1 root root  9 Aug  9 13:20 /dev/disk/by-id/scsi-SLIO-ORG_sbdnfs_afb0ba8d-3a3c-413b-8cc2-cca03e63ef42 -> ../../sdd
    
    ls -l /dev/disk/by-id/scsi-* | grep sde
    
    # lrwxrwxrwx 1 root root  9 Feb  7 12:39 /dev/disk/by-id/scsi-1LIO-ORG_cl1:3fe4da37-1a5a-4bb6-9a41-9a4df57770e4 -> ../../sde
    # lrwxrwxrwx 1 root root  9 Feb  7 12:39 /dev/disk/by-id/scsi-360014053fe4da371a5a4bb69a419a4df -> ../../sde
    # lrwxrwxrwx 1 root root  9 Feb  7 12:39 /dev/disk/by-id/scsi-SLIO-ORG_cl1_3fe4da37-1a5a-4bb6-9a41-9a4df57770e4 -> ../../sde
    
    ls -l /dev/disk/by-id/scsi-* | grep sdf
    
    # lrwxrwxrwx 1 root root  9 Aug  9 13:32 /dev/disk/by-id/scsi-1LIO-ORG_sbdnfs:f88f30e7-c968-4678-bc87-fe7bfcbdb625 -> ../../sdf
    # lrwxrwxrwx 1 root root  9 Aug  9 13:32 /dev/disk/by-id/scsi-36001405f88f30e7c9684678bc87fe7bf -> ../../sdf
    # lrwxrwxrwx 1 root root  9 Aug  9 13:32 /dev/disk/by-id/scsi-SLIO-ORG_sbdnfs_f88f30e7-c968-4678-bc87-fe7bfcbdb625 -> ../../sdf
    

    此命令會為每個 SBD 裝置列出三個裝置識別碼。 我們建議使用以 scsi-3 開頭的識別碼。 在上述範例中,識別碼為:

    • /dev/disk/by-id/scsi-36001405afb0ba8d3a3c413b8cc2cca03
    • /dev/disk/by-id/scsi-360014053fe4da371a5a4bb69a419a4df
    • /dev/disk/by-id/scsi-36001405f88f30e7c9684678bc87fe7bf
  13. [1] 建立 SBD 裝置。

    a. 使用 iSCSI 裝置的裝置識別碼,在第一個叢集節點上建立新的 SBD 裝置。

    sudo sbd -d /dev/disk/by-id/scsi-36001405afb0ba8d3a3c413b8cc2cca03 -1 60 -4 120 create
    

    b. 如果您想使用多個裝置,也請建立第二個和第三個 SBD 裝置。

    sudo sbd -d /dev/disk/by-id/scsi-360014053fe4da371a5a4bb69a419a4df -1 60 -4 120 create
    sudo sbd -d /dev/disk/by-id/scsi-36001405f88f30e7c9684678bc87fe7bf -1 60 -4 120 create
    
  14. [A] 調整 SBD 設定。

    a. 開啟 SBD 設定檔。

    sudo vi /etc/sysconfig/sbd
    

    b. 變更 SBD 裝置的屬性,啟用 Pacemaker 整合,並且變更 SBD 的啟動模式。

    [...]
    SBD_DEVICE="/dev/disk/by-id/scsi-36001405afb0ba8d3a3c413b8cc2cca03;/dev/disk/by-id/scsi-360014053fe4da371a5a4bb69a419a4df;/dev/disk/by-id/scsi-36001405f88f30e7c9684678bc87fe7bf"
    [...]
    SBD_PACEMAKER="yes"
    [...]
    SBD_STARTMODE="always"
    [...]
    

    注意

    如果SBD_DELAY_START屬性值設定為 「no」 請將值變更為 「yes」。 您也必須檢查 SBD 服務檔案,以確保 TimeoutStartSec 的值大於 SBD_DELAY_START 的值。 如需詳細資訊,請參閱 SBD 檔案組態

  15. [A]建立 softdog 設定檔。

    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    
  16. [A] 載入模組。

    sudo modprobe -v softdog
    

具有 Azure 共用磁碟的 SBD

本節僅適用於想要搭配 Azure 共用磁碟使用 SBD 裝置的情況。

使用 PowerShell 建立和連結 Azure 共用磁碟

  1. 調整資源群組、Azure 區域、虛擬機器、邏輯單元編號 (LUN) 等值。

    $ResourceGroup = "MyResourceGroup"
    $Location = "MyAzureRegion"
    
  2. 根據進階 SSD 的可用磁碟大小定義磁碟大小。 在此範例中,會提及 4G 的 P1 磁碟大小。

    $DiskSizeInGB = 4
    $DiskName = "SBD-disk1"
    
  3. 使用參數 -MaxSharesCount,定義連結 SBD 裝置共用磁碟的叢集節點數目上限。

    $ShareNodes = 2
    
  4. 針對將 LRS 用於 Azure 進階共用磁碟的 SBD 裝置,請使用下列儲存體 SkuName:

    $SkuName = "Premium_LRS"
    
  5. 針對將 ZRS 用於 Azure 進階共用磁碟的 SBD 裝置,請使用下列儲存體 SkuName:

    $SkuName = "Premium_ZRS"
    
  6. 設定 Azure 共用磁碟。

    $diskConfig = New-AzDiskConfig -Location $Location -SkuName $SkuName -CreateOption Empty -DiskSizeGB $DiskSizeInGB -MaxSharesCount $ShareNodes
    $dataDisk = New-AzDisk -ResourceGroupName $ResourceGroup -DiskName $DiskName -Disk $diskConfig
    
  7. 將磁碟連結至叢集 VM。

    $VM1 = "prod-cl1-0"
    $VM2 = "prod-cl1-1"
    

    a. 將 Azure 共用磁碟新增至叢集節點 1。

    $vm = Get-AzVM -ResourceGroupName $ResourceGroup -Name $VM1
    $vm = Add-AzVMDataDisk -VM $vm -Name $DiskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun 0
    Update-AzVm -VM $vm -ResourceGroupName $ResourceGroup -Verbose
    

    b. 將 Azure 共用磁碟新增至叢集節點 2。

    $vm = Get-AzVM -ResourceGroupName $ResourceGroup -Name $VM2
    $vm = Add-AzVMDataDisk -VM $vm -Name $DiskName -CreateOption Attach -ManagedDiskId $dataDisk.Id -Lun 0
    Update-AzVm -VM $vm -ResourceGroupName $ResourceGroup -Verbose
    

如果您想要使用 Azure CLI 或 Azure 入口網站來部署資源,您也可以參閱部署 ZRS 磁碟 (部分機器翻譯)。

設定 Azure 共用磁碟 SBD 裝置

  1. [A] 啟用 SBD 服務。

    sudo systemctl enable sbd
    
  2. [A] 確定已連結的磁碟可供使用。

    # lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    fd0      2:0    1    4K  0 disk
    sda      8:0    0   30G  0 disk
    ├─sda1   8:1    0    2M  0 part
    ├─sda2   8:2    0  512M  0 part /boot/efi
    ├─sda3   8:3    0    1G  0 part /boot
    ├─sda4   8:4    0 28.5G  0 part /
    sdb      8:16   0  256G  0 disk
    ├─sdb1   8:17   0  256G  0 part /mnt
    sdc      8:32   0    4G  0 disk
    sr0     11:0    1 1024M  0 rom
    
    # lsscsi
    [1:0:0:0]    cd/dvd  Msft     Virtual CD/ROM   1.0   /dev/sr0
    [2:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sda
    [3:0:1:0]    disk    Msft     Virtual Disk     1.0   /dev/sdb
    [5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc
    
  3. [A] 擷取連結磁碟的識別碼。

    # ls -l /dev/disk/by-id/scsi-* | grep sdc
    lrwxrwxrwx 1 root root  9 Nov  8 16:55 /dev/disk/by-id/scsi-14d534654202020204208a67da80744439b513b2a9728af19 -> ../../sdc
    lrwxrwxrwx 1 root root  9 Nov  8 16:55 /dev/disk/by-id/scsi-3600224804208a67da8073b2a9728af19 -> ../../sdc
    

    命令會列出 SBD 裝置的裝置識別碼。 我們建議使用以 scsi-3 開頭的識別碼。 在上述範例中,識別碼為 /dev/disk/by-id/scsi-3600224804208a67da8073b2a9728af19

  4. [1] 建立 SBD 裝置。

    使用步驟 2 的裝置識別碼,在第一個叢集節點上建立新的 SBD 裝置。

    # sudo sbd -d /dev/disk/by-id/scsi-3600224804208a67da8073b2a9728af19 -1 60 -4 120 create
    
  5. [A] 調整 SBD 設定。

    a. 開啟 SBD 設定檔。

    sudo vi /etc/sysconfig/sbd
    

    b. 變更 SBD 裝置的屬性,啟用 Pacemaker 整合,並且變更 SBD 裝置的啟動模式。

    [...]
    SBD_DEVICE="/dev/disk/by-id/scsi-3600224804208a67da8073b2a9728af19"
    [...]
    SBD_PACEMAKER="yes"
    [...]
    SBD_STARTMODE="always"
    [...]
    

    注意

    如果SBD_DELAY_START屬性值設定為 「no」 請將值變更為 「yes」。 您也必須檢查 SBD 服務檔案,以確保 TimeoutStartSec 的值大於 SBD_DELAY_START 的值。 如需詳細資訊,請參閱 SBD 檔案組態

  6. 建立 softdog 設定檔。

    echo softdog | sudo tee /etc/modules-load.d/softdog.conf
    
  7. 載入模組。

    sudo modprobe -v softdog
    

使用 Azure 柵欄代理程式

本節僅適用於搭配 Azure 柵欄代理程式使用隔離裝置時的情況。

建立 Azure 柵欄代理程式裝置

本節僅適用於使用以 Azure 柵欄代理程式為基礎的隔離裝置時的情況。 隔離裝置會使用受控識別或服務主體來對 Microsoft Azure 授權。

若要建立受控識別 (MSI),請為叢集中的每部 VM 建立系統指派的受控識別。 如果系統指派的受控識別已經存在,則會使用該識別。 使用者指派的受控識別目前不應該與 Pacemaker 搭配使用。 SLES 12 SP5、SLES 15 SP1 和更新版本支援以受控識別為基礎的 Azure 柵欄代理程式。

[1] 為柵欄代理程式建立自訂角色

根據預設,受控識別和服務主體都無權存取您的 Azure 資源。 您需要為受控識別或服務主體提供權限來啟動和停止 (解除配置) 叢集的所有虛擬機器。 如果您尚未建立自訂角色,您可以使用 PowerShell (部分機器翻譯) 或 Azure CLI (部分機器翻譯) 來建立。

針對輸入檔使用下列內容。 您需要根據您的訂閱調整此內容。 也就是說,請將 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxyyyyyyyy-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": []
}

[A] 指派自訂角色

使用受控識別或服務主體。

將在上一章中建立的自訂角色「Linux 柵欄代理程式角色」指派給叢集 VM 中的每個受控識別。 每個 VM 系統指派的受控識別都需要為每個叢集 VM 資源指派的角色。 如需詳細步驟,請參閱使用 Azure 入口網站為受控識別指派對資源的存取權。 確認每部 VM 的受控識別角色指派都包含所有叢集 VM。

重要

請注意,受控識別的授權指派和移除可能會延遲到生效為止。

安裝叢集

注意

  • [A]:適用於所有節點。
  • [1]:僅適用於節點 1。
  • [2]:僅適用於節點 2。
  1. [A] 更新 SLES。

    sudo zypper update
    

    注意

    在 SLES 15 SP4 上,檢查 crmsh 和 pacemaker 套件的版本,並確定符合迷你版本需求:

    • crmsh-4.4.0+20221028.3e41444-150400.3.9.1 或更新版本
    • pacemaker-2.1.2+20211124.ada5c3b36-150400.4.6.1 或更新版本
  2. [A] 安裝叢集資源所需的元件。

    sudo zypper in socat
    
  3. [A] 安裝叢集資源所需的 azure-lb 元件。

    sudo zypper in resource-agents
    

    注意

    請檢查套件 resource-agents 的版本,並確定符合最低版本需求:

    • SLES 12 SP4/SP5:版本必須為 resource-agents-4.3.018.a7fb5035-3.30.1 或更新版本。
    • SLES 15/15 SP1:版本必須為 resource-agents-4.3.0184.6ee15eb2-4.13.1 或更新版本。
  4. [A] 設定作業系統。

    a. Pacemaker 偶爾會建立許多程序,這可能會耗盡允許的數目。 在此情況下,叢集節點之間的活動訊號可能會失敗,而導致您的資源容錯移轉。 我們建議設定下列參數,以增加允許的程序上限數目:

    # Edit the configuration file
    sudo vi /etc/systemd/system.conf
    
    # Change the DefaultTasksMax
    #DefaultTasksMax=512
    DefaultTasksMax=4096
    
    # Activate this setting
    sudo systemctl daemon-reload
    
    # Test to ensure that the change was successful
    sudo systemctl --no-pager show | grep DefaultTasksMax
    

    b. 縮減已變更的快取大小。 如需詳細資訊,請參閱使用大量 RAM 的 SLES 11/12 伺服器出現低寫入效能 (英文)。

    sudo vi /etc/sysctl.conf
    # Change/set the following settings
    vm.dirty_bytes = 629145600
    vm.dirty_background_bytes = 314572800
    

    c. 請確定 vm.swappiness 設定為 10,以減少交換使用量並優先使用記憶體。

    sudo vi /etc/sysctl.conf
    # Change/set the following setting
    vm.swappiness = 10
    
  5. [A] 檢查 cloud-netconfig-azure 套件版本。

    執行 zypper info cloud-netconfig-azure,以檢查已安裝的 cloud-netconfig-azure 套件版本。 如果版本早於 1.3,建議將 cloud-netconfig-azure 套件更新為最新的可用版本。

    提示

    如果您環境中的版本是 1.3 或更新版本,則不再需要透過雲端網路外掛程式來抑制網路介面的管理。

    只有當 cloud-netconfig-azure 的版本低於 1.3 時,請變更網路介面的組態檔,如下列程式碼所示,以防止雲端網路外掛程式移除虛擬 IP 位址(Pacemaker 必須控制指派)。 如需詳細資訊,請參閱 SUSE KB 7023633

    # Edit the configuration file
    sudo vi /etc/sysconfig/network/ifcfg-eth0 
    
    # Change CLOUD_NETCONFIG_MANAGE
    # CLOUD_NETCONFIG_MANAGE="yes"
    CLOUD_NETCONFIG_MANAGE="no"
    
  6. [1] 啟用 SSH 存取。

    sudo ssh-keygen
    
    # Enter file in which to save the key (/root/.ssh/id_rsa), and then select Enter
    # Enter passphrase (empty for no passphrase), and then select Enter
    # Enter same passphrase again, and then select Enter
    
    # copy the public key
    sudo cat /root/.ssh/id_rsa.pub
    
  7. [2] 啟用 SSH 存取。

    sudo ssh-keygen
    
    # Enter file in which to save the key (/root/.ssh/id_rsa), and then select Enter
    # Enter passphrase (empty for no passphrase), and then select Enter
    # Enter same passphrase again, and then select Enter
    
    # Insert the public key you copied in the last step into the authorized keys file on the second server
    sudo vi /root/.ssh/authorized_keys   
    
    # copy the public key
    sudo cat /root/.ssh/id_rsa.pub
    
  8. [1] 啟用 SSH 存取。

    # insert the public key you copied in the last step into the authorized keys file on the first server
    sudo vi /root/.ssh/authorized_keys
    
  9. [A] 如果您要使用以 Azure 柵欄代理程式為基礎的隔離裝置,請安裝 fence-agents 程式套件。

    sudo zypper install fence-agents
    

    重要

    當叢集節點受到隔離時,fence-agents 套件的安裝版本必須是 4.4.0 或更新版本,才能受益於 Azure 柵欄代理程式更快速的容錯移轉時間。 如果您執行的是舊版,建議您更新套件。

    重要

    如果使用受控識別,則柵欄代理程式套件的已安裝版本必須是 -

    • SLES 12 SP5:fence-agents 4.9.0+git.1624456340.8d746be9-3.35.2 或更新版本
    • SLES 15 SP1 與更高版本:fence-agents 4.5.2+git.1592573838.1eee0863 或更新版本。

    舊版無法與受控識別組態正確搭配運作。

  10. [A] 安裝 Azure Python SDK 和 Azure 身分識別 Python 模組。

    在 SLES 12 SP4 或 SLES 12 SP5 上安裝 Azure Python SDK:

    # You might need to activate the public cloud extension first
    SUSEConnect -p sle-module-public-cloud/12/x86_64
    sudo zypper install python-azure-mgmt-compute
    sudo zypper install python-azure-identity
    

    在 SLES 15 或更新版本上安裝 Azure Python SDK:

    # You might need to activate the public cloud extension first. In this example, the SUSEConnect command is for SLES 15 SP1
    SUSEConnect -p sle-module-public-cloud/15.1/x86_64
    sudo zypper install python3-azure-mgmt-compute
    sudo zypper install python3-azure-identity
    

    重要

    視您的版本和映像類型而定,您可能需要啟用作業系統版本的公用雲端擴充功能,才能安裝 Azure Python SDK。 您可以執行 SUSEConnect ---list-extensions 來檢查擴充。 若要使用 Azure 柵欄代理程式來達成更快速的容錯移轉時間:

    • 在 SLES 12 SP4 或 SLES 12 SP5 上,安裝 4.6.2 版或更新版本的 python-azure-mgmt-compute 套件。
    • 如果您的 python-azure-mgmt-compute or python3-azure-mgmt-compute 套件版本是 17.0.0-6.7.1,請遵循 SUSE KBA (英文) 中的指示來更新柵欄代理程式版本,並安裝適用於 Python 模組的 Azure 身分識別用戶端程式庫 (若尚未安裝)。
  11. [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
    
  12. [1] 安裝叢集。

    • 如果您使用 SBD 裝置來隔離 (針對 iSCSI 目標伺服器或 Azure 共用磁碟):

      sudo crm cluster init
      # ! NTP is not configured to start at system boot.
      # Do you want to continue anyway (y/n)? y
      # /root/.ssh/id_rsa already exists - overwrite (y/n)? n
      # Address for ring0 [10.0.0.6] Select Enter
      # Port for ring0 [5405] Select Enter
      # SBD is already configured to use /dev/disk/by-id/scsi-36001405639245768818458b930abdf69;/dev/disk/by-id/scsi-36001405afb0ba8d3a3c413b8cc2cca03;/dev/disk/by-id/scsi-36001405f88f30e7c9684678bc87fe7bf - overwrite (y/n)? n
      # Do you wish to configure an administration IP (y/n)? n
      
    • 如果您「未」使用 SBD 裝置進行隔離:

      sudo crm cluster init
      # ! NTP is not configured to start at system boot.
      # Do you want to continue anyway (y/n)? y
      # /root/.ssh/id_rsa already exists - overwrite (y/n)? n
      # Address for ring0 [10.0.0.6] Select Enter
      # Port for ring0 [5405] Select Enter
      # Do you wish to use SBD (y/n)? n
      # WARNING: Not configuring SBD - STONITH will be disabled.
      # Do you wish to configure an administration IP (y/n)? n
      
  13. [2] 將節點新增至叢集。

    sudo crm cluster join
    # ! NTP is not configured to start at system boot.
    # Do you want to continue anyway (y/n)? y
    # IP address or hostname of existing node (for example, 192.168.1.1) []10.0.0.6
    # /root/.ssh/id_rsa already exists - overwrite (y/n)? n
    
  14. [A] 將 hacluster 密碼變更為同一個密碼。

    sudo passwd hacluster
    
  15. [A] 調整 corosync 設定。

    sudo vi /etc/corosync/corosync.conf
    

    a. 檢查檔案中的下一節,如果值不存在或不同,請調整。 請務必將權杖變更為 30000,以允許記憶體保留的維護。 如需詳細資訊,請參閱適用於 Linux (部分機器翻譯) 或 Windows (部分機器翻譯) 的「Azure 中虛擬機器的維護」一文。

    [...]
      token:          30000
      token_retransmits_before_loss_const: 10
      join:           60
      consensus:      36000
      max_messages:   20
    
      interface { 
         [...] 
      }
      transport:      udpu
    } 
    nodelist {
      node {
       ring0_addr:10.0.0.6
      }
      node {
       ring0_addr:10.0.0.7
      } 
    }
    logging {
      [...]
    }
    quorum {
         # Enable and configure quorum subsystem (default: off)
         # See also corosync.conf.5 and votequorum.5
         provider: corosync_votequorum
         expected_votes: 2
         two_node: 1
    }
    

    b. 重新啟動 corosync 服務。

    sudo service corosync restart
    

在 Pacemaker 叢集上建立隔離裝置

提示

  • 若要避免雙節點 Pacemaker 叢集中的圍欄競爭,您可以設定額外的「優先順序隔離延遲」叢集屬性。 當發生分割腦案例時,這個屬性會在隔離具有較高總資源優先順序的節點時引入額外的延遲。 如需其他詳細數據,請參閱 SUSE Linux Enterprise Server 高可用性擴充功能管理指南
  • 您可以在個別的 SAP ASCS/ERS 中找到設定「優先順序-隔離延遲」叢集屬性的指示(僅適用於 ENSA2)和 SAP HANA 相應增加高可用性檔。
  1. [1] 如果您使用 SBD 裝置(iSCSI 目標伺服器或 Azure 共用磁碟)作為隔離裝置,請執行下列命令。 啟用隔離裝置的使用及設定柵欄延遲。

    sudo crm configure property stonith-timeout=144
    sudo crm configure property stonith-enabled=true
    
    # List the resources to find the name of the SBD device
    sudo crm resource list
    sudo crm resource stop stonith-sbd
    sudo crm configure delete stonith-sbd
    sudo crm configure primitive stonith-sbd stonith:external/sbd \
       params pcmk_delay_max="15" \
       op monitor interval="600" timeout="15"
    
  2. [1] 如果您使用 Azure 柵欄代理程式作為隔離,請執行下列命令。 將角色指派給這兩個叢集節點之後,您就可以在叢集中設定隔離裝置。

    sudo crm configure property stonith-enabled=true
    sudo crm configure property concurrent-fencing=true
    

    注意

    只有在主機名稱和 Azure VM 名稱「不」相同時,命令中才需要 'pcmk_host_map' 選項。 以格式 hostname:vm-name 指定對應。

# Adjust the command with your subscription ID and resource group of the VM

sudo crm configure primitive rsc_st_azure stonith:fence_azure_arm \
params msi=true subscriptionId="subscription ID" resourceGroup="resource group" \
pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_delay_max=15 pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
op monitor interval=3600 timeout=120

sudo crm configure property stonith-timeout=900

如果您使用隔離裝置,請根據服務主體設定,閱讀 使用 Azure 隔離 從 SPN 變更為 MSI 的 Pacemaker 叢集,並瞭解如何轉換成受控識別設定。

重要

監視和隔離作業為還原序列化。 因此,如果有長時間執行的監視作業和同時隔離事件,叢集容錯移轉不會因為已經執行的監視作業而延遲。

提示

Azure 柵欄代理程式需要使用標準 ILB 的 VM 公用端點連線 (部分機器翻譯) 中記載的公用端點輸出連線能力,以及可能的解決方案。

為 Azure 已排定事件設定 Pacemaker

Azure 提供已排定事件。 排程的事件會透過元數據服務提供,並允許應用程式準備這類事件的時間。 排程 Azure 事件的資源代理程式 azure-events-az monitors。 如果偵測到事件,且資源代理程式會判斷另一個叢集節點可供使用,則會設定叢集健康情況屬性。 設定節點的叢集健康情況屬性時,位置條件約束會觸發和所有資源,其名稱不是以 “health-” 開頭,會從具有排程事件的節點移轉。 一旦受影響的叢集節點沒有執行中的叢集資源,就會認可已排程的事件,並可執行其動作,例如重新啟動。

重要

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

  1. [A] 確定已安裝 azure-events 代理程式的套件,且為最新狀態。

    sudo zypper info resource-agents
    

    最低版本需求:

    • SLES 12 SP5: resource-agents-4.3.018.a7fb5035-3.98.1
    • SLES 15 SP1: resource-agents-4.3.0184.6ee15eb2-150100.4.72.1
    • SLES 15 SP2: resource-agents-4.4.0+git57.70549516-150200.3.56.1
    • SLES 15 SP3: resource-agents-4.8.0+git30.d0077df0-150300.8.31.1
    • SLES 15 SP4 和更新版: resource-agents-4.10.0+git40.0f4de473-150400.3.19.1
  2. [1] 在 Pacemaker 中設定資源。

    #Place the cluster in maintenance mode
    sudo crm configure property maintenance-mode=true
    
  3. [1] 設定 Pacemaker 叢集健康情況節點策略和條件約束

    sudo crm configure property node-health-strategy=custom
    sudo crm configure location loc_azure_health \
    /'!health-.*'/ rule '#health-azure': defined '#uname'
    

    重要

    除了文件後續步驟中所述的資源之外,請勿在叢集中定義以「健康情況」開頭的任何其他資源。

  4. [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
    
  5. [1] 在 Pacemaker 中設定資源。 重要事項:資源必須以 'health-azure' 開頭。

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

    注意

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

    WARNING: health-azure-events: unknown 屬性 'allow-healthy-nodes'。

  6. 讓 Pacemaker 叢集脫離維護模式

    sudo crm configure property maintenance-mode=false
    
  7. 清除啟用期間的任何錯誤,並確認 health-azure-events 資源已在所有叢集節點上成功啟動。

    sudo crm resource cleanup
    

    排程事件 的第一次查詢執行最多可能需要 2 分鐘的時間。 使用排程事件的 Pacemaker 測試,可以使用叢集 VM 的重新啟動或重新部署動作。 如需詳細資訊,請參閱 排程的事件 檔。

    注意

    設定 azure-events 代理程式的 Pacemaker 資源之後,若您將叢集放入或移出維護模式,您可能會收到類似下列的警告訊息:

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

下一步