在 Red Hat Enterprise Linux 之 Azure VM 上 SAP HANA 的高可用性

針對內部部署開發,您可以使用 HANA 系統複寫或共用記憶體來建立 SAP HANA 的高可用性 (HA)。 在 Azure 虛擬機器 上,Azure 上的 HANA 系統複寫目前是唯一支援的 HA 函式。

SAP HANA 複寫包含一個主要節點以及至少一個次要節點。 對主要節點上資料的變更,會以同步或非同步方式複寫到次要節點。

本文說明如何部署和設定虛擬機(VM)、安裝叢集架構,以及安裝和設定 SAP HANA 系統複寫。

在組態範例中,會使用安裝命令、執行個體號碼 03 和 HANA 系統識別碼 HN1

必要條件

請先閱讀下列 SAP Note 和文件:

概觀

為了達成HA,SAP HANA 會安裝在兩部 VM 上。 資料會使用「HANA 系統複寫」進行複寫。

顯示 SAP HANA 高可用性概觀的圖表。

SAP HANA 系統複寫設定會使用專用的虛擬主機名和虛擬IP位址。 在 Azure 上必須有負載平衡器才能使用虛擬 IP 位址。 顯示的設定會顯示以下條件的負載平衡器:

  • 前端 IP 位址:10.0.0.13 (hn1-db)
  • 探查埠:62503

準備基礎結構

Azure Marketplace 包含具有高可用性附加元件之 SAP HANA 的映射,您可以使用各種版本的 Red Hat 來部署新的 VM。

透過 Azure 入口網站 手動部署Linux VM

本檔假設您已部署資源群組、 Azure 虛擬網路和子網。

部署 SAP HANA 的 VM。 選擇 HANA 系統支援的合適 RHEL 映像。 您可以在任一可用性選項中部署 VM:虛擬機擴展集、可用性區域或可用性設定組。

重要

請確定您選取的 OS 已針對您打算在部署中使用的特定 VM 類型上針對 SAP HANA 進行 SAP 認證。 您可以在 SAP HANA 認證 IaaS 平臺查閱 SAP HANA 認證的 VM 類型和其 OS 版本。 請確定您查看 VM 類型的詳細數據,以取得特定 VM 類型 SAP HANA 支援的 OS 版本完整清單。

設定 Azure 負載平衡器

在 VM 設定期間,您可以選擇在網路區段中建立或選取結束的負載平衡器。 請遵循下列步驟來設定標準負載平衡器,以設定 HANA 資料庫的高可用性設定。

請遵循建立負載平衡器中的步驟,使用 Azure 入口網站 設定高可用性 SAP 系統的標準負載平衡器。 在設定負載平衡器期間,請考慮下列幾點:

  1. 前端IP組態: 建立前端IP。 選取與資料庫虛擬機相同的虛擬網路和子網名稱。
  2. 後端集區: 建立後端集區並新增資料庫 VM。
  3. 輸入規則: 建立負載平衡規則。 針對這兩個負載平衡規則,請遵循相同的步驟。
    • 前端IP位址:選取前端IP。
    • 後端集區:選取後端集區。
    • 高可用性埠:選取此選項。
    • 通訊協議:選取 [ TCP]。
    • 健康情況探查:使用下列詳細數據建立健康情況探查
      • 通訊協議:選取 [ TCP]。
      • 埠:例如 625<實例 no.>
      • 間隔:輸入 5
      • 探查閾值:輸入 2
    • 閑置逾時(分鐘):輸入 30
    • 啟用浮動IP:選取此選項。

注意

健康情況探查組態屬性 numberOfProbes,否則不會在入口網站中稱為 「情況不良閾值 」。 若要控制成功或失敗連續探查的數目,請將 屬性 probeThreshold 設定為 2。 目前無法使用 Azure 入口網站 來設定此屬性,因此請使用 Azure CLIPowerShell 命令。

如需 SAP Hana 所需連接埠的詳細資訊,請參閱 SAP Hana 租用戶資料庫指南的連線到租用戶資料庫一章,或 SAP 附註 2388694

重要

負載平衡案例中的 NIC 次要 IP 設定不支援浮動 IP。 如需詳細資訊,請參閱 Azure Load Balancer 限制。 如果您需要 VM 的另一個 IP 位址,請部署第二個 NIC。

注意

當沒有公用IP位址的VM放在標準 Azure Load Balancer 內部(無公用IP位址)實例的後端集區時,除非執行更多組態以允許路由傳送至公用端點,否則不會有輸出因特網連線能力。 如需如何達成輸出連線的詳細資訊,請參閱 SAP 高可用性案例中使用 Azure Standard Load Balancer 的 VM 公用端點連線。

重要

請勿在位於 Azure Load Balancer 後方的 Azure VM 上啟用 TCP 時間戳記。 啟用 TCP 時間戳可能會導致健康情況探查失敗。 將 net.ipv4.tcp_timestamps 參數設定為 0。 如需詳細資訊,請參閱 Load Balancer健康情況探查 和 SAP 附注 2382421

安裝 SAP Hana

本節中的步驟會使用下列首碼:

  • [A]:此步驟適用於所有節點。
  • [1]:步驟僅適用於節點 1。
  • [2]:步驟僅適用於 Pacemaker 叢集的節點 2。
  1. [A] 設定磁碟配置:邏輯磁碟區管理員 (LVM)

    我們建議針對儲存資料與記錄檔的磁碟區使用 LVM。 下列範例假設 VM 有四個鏈接的數據磁碟,可用來建立兩個磁碟區。

    列出所有可用的磁碟:

    ls /dev/disk/azure/scsi1/lun*
    

    範例輸出:

    /dev/disk/azure/scsi1/lun0  /dev/disk/azure/scsi1/lun1  /dev/disk/azure/scsi1/lun2  /dev/disk/azure/scsi1/lun3
    

    針對您想要使用的所有磁碟建立實體磁碟區:

    sudo pvcreate /dev/disk/azure/scsi1/lun0
    sudo pvcreate /dev/disk/azure/scsi1/lun1
    sudo pvcreate /dev/disk/azure/scsi1/lun2
    sudo pvcreate /dev/disk/azure/scsi1/lun3
    

    建立資料檔案的磁碟區群組。 一個磁碟區群組用於記錄檔,一個用於 SAP HANA 的共用目錄:

    sudo vgcreate vg_hana_data_HN1 /dev/disk/azure/scsi1/lun0 /dev/disk/azure/scsi1/lun1
    sudo vgcreate vg_hana_log_HN1 /dev/disk/azure/scsi1/lun2
    sudo vgcreate vg_hana_shared_HN1 /dev/disk/azure/scsi1/lun3
    

    建立邏輯磁碟區。 當您使用 lvcreate 卻未搭配 -i 參數時,會建立線性磁碟區。 建議建立等量磁碟區,以獲得更好的 I/O 效能。 調整等量大小至記錄於SAP Hana VM 儲存體設定中的值。 自 -i 變數應該是基礎實體磁碟區的數目,而 -I 自變數是等量大小。

    本文件會使用 2 個實體磁碟區來作為資料磁碟區,因此 -i 參數引數會設定為 2。 資料磁碟區的等量大小是 256KiB。 有一個實體磁碟區作為記錄磁碟區,因此,記錄磁碟區命令中不需要明確使用 -i-I 參數。

    重要

    當您要對每個資料、記錄或共用磁碟區使用多個實體磁碟區時,請使用 -i 參數,並將其值設定為基礎實體磁碟區的數目。 建立等量磁碟區時,請使用 -I 參數來指定等量大小。 請參閱 SAP Hana VM 儲存體設定,以取得建議的儲存體設定,包括等量大小和磁碟數目。 下列配置範例不一定符合特定系統大小的效能指導方針。 它們僅供說明。

    sudo lvcreate -i 2 -I 256 -l 100%FREE -n hana_data vg_hana_data_HN1
    sudo lvcreate -l 100%FREE -n hana_log vg_hana_log_HN1
    sudo lvcreate -l 100%FREE -n hana_shared vg_hana_shared_HN1
    sudo mkfs.xfs /dev/vg_hana_data_HN1/hana_data
    sudo mkfs.xfs /dev/vg_hana_log_HN1/hana_log
    sudo mkfs.xfs /dev/vg_hana_shared_HN1/hana_shared
    

    發出掛接命令,不要掛接目錄。 相反地,在 中 fstab 輸入組態,然後發出最後 mount -a 一個來驗證語法。 首先,建立每個磁碟區的掛接目錄:

    sudo mkdir -p /hana/data
    sudo mkdir -p /hana/log
    sudo mkdir -p /hana/shared
    

    接下來,在檔案中/etc/fstab插入下列幾行,以建立fstab三個邏輯磁碟區的專案:

    /dev/mapper/vg_hana_data_HN1-hana_data /hana/data xfs defaults,nofail 0 2 /dev/mapper/vg_hana_log_HN1-hana_log /hana/log xfs defaults,nofail 0 2 /dev/mapper/vg_hana_shared_HN1-hana_shared /hana/shared xfs defaults,nofail 0 2

    最後,一次掛接新的磁碟區:

    sudo mount -a
    
  2. [A] 設定所有主機的主機名解析。

    您可以使用 DNS 伺服器或修改 /etc/hosts 所有節點上的檔案,方法是在 中 /etc/hosts建立所有節點的專案,如下所示:

    10.0.0.5 hn1-db-0 10.0.0.6 hn1-db-1

  3. [A] 執行 HANA 組態的 RHEL。

    依照下列附註中的說明來設定 RHEL:

  4. [A] 安裝 SAP HANA。

    若要安裝 SAP Hana 系統複寫,請參閱使用 RHEL HA 附加元件自動化 SAP Hana 擴大系統複寫

    從 HANA DVD 執行 hdblcm 程式。 出現提示時,輸入下列值:

    1. 選擇安裝:輸入 1
    2. 選取要安裝的其他元件:輸入 1
    3. 輸入 安裝路徑 [/hana/shared]:選取 Enter。
    4. 輸入 本機主機名 [..]:選取 Enter。
    5. 您是否想要將其他主機新增至系統? (y/n) [n]:選取 [輸入]。
    6. 輸入 SAP HANA 系統識別碼:輸入 HANA 的 SID,例如: HN1
    7. 輸入 實例編號 [00]:輸入 HANA 實例編號。 如果您使用了 Azure 範本或遵循了本文的手動部署章節,請輸入 03
    8. 選取資料庫模式/輸入索引 [1]:選取 Enter 鍵。
    9. 選取 [系統使用量]/輸入索引 [4]:選取系統使用量值。
    10. 輸入 數據磁碟區 的位置 [/hana/data]:選取 Enter。
    11. 輸入 記錄磁碟區 的位置 [/hana/log]:選取 Enter。
    12. 是否限制最大記憶體配置? [n]:選取 [輸入]。
    13. 輸入 主機 '...' 的憑證主機名 [...]:選取 Enter。
    14. 輸入 SAP 主機代理程式使用者 (sapadm) 密碼:輸入主機代理程式用戶密碼。
    15. 確認 SAP 主機代理程式使用者 (sapadm) 密碼:再次輸入主機代理程式用戶密碼以確認。
    16. 輸入系統 管理員 istrator (hdbadm) 密碼:輸入系統管理員密碼。
    17. 確認系統 管理員 istrator (hdbadm) 密碼:再次輸入系統管理員密碼以確認。
    18. 輸入 System 管理員 istrator Home Directory [/usr/sap/HN1/home]:選取 Enter。
    19. 輸入系統 管理員 istrator 登入殼層 [/bin/sh]:選取 Enter。
    20. 輸入系統 管理員 istrator 使用者識別碼 [1001]:選取 Enter。
    21. 輸入 使用者群組的標識碼 [ 79]:選取 Enter。
    22. 輸入 資料庫使用者 (SYSTEM) 密碼:輸入資料庫用戶密碼。
    23. 確認 資料庫使用者 (SYSTEM) 密碼:再次輸入資料庫用戶密碼以確認。
    24. 是否在電腦重新開機後重新啟動系統? [n]:選取 [輸入]。
    25. 您要繼續嗎? (y/n):驗證摘要。 輸入 y 繼續。
  5. [A] 升級 SAP 主機代理程式。

    SAP 軟體中心下載最新的 SAP 主機代理程式封存檔,然後執行下列命令來升級代理程式。 取代封存的路徑以指向您所下載的檔案:

    sudo /usr/sap/hostctrl/exe/saphostexec -upgrade -archive <path to SAP Host Agent>;
    
  6. [A] 設定防火牆。

    建立 Azure Load Balancer 探查埠的防火牆規則。

    sudo firewall-cmd --zone=public --add-port=62503/tcp
    sudo firewall-cmd --zone=public --add-port=62503/tcp --permanent
    

設定 SAP HANA 2.0 系統複寫

本節中的步驟會使用下列首碼:

  • [A]:此步驟適用於所有節點。
  • [1]:步驟僅適用於節點 1。
  • [2]:步驟僅適用於 Pacemaker 叢集的節點 2。
  1. [A] 設定防火牆。

    建立防火牆規則以允許 HANA 系統複寫和用戶端流量。 所有 SAP 產品的 TCP/IP 通訊埠會列出必要的連接埠。 下列命令只是允許 HANA 2.0 系統複寫和用戶端流量進入資料庫 SYSTEMDB、HN1 和 NW1 的範例。

     sudo firewall-cmd --zone=public --add-port={40302,40301,40307,40303,40340,30340,30341,30342}/tcp --permanent
     sudo firewall-cmd --zone=public --add-port={40302,40301,40307,40303,40340,30340,30341,30342}/tcp
    
    
  2. [1] 建立租用戶資料庫。

    若您使用的是 SAP HANA 2.0 或 MDC,請建立 SAP NetWeaver 系統的租用戶資料庫。 請將 NW1 取代為您 SAP 系統的 SID。

    以 <hanasid>adm 身分執行下列命令:

    hdbsql -u SYSTEM -p "[passwd]" -i 03 -d SYSTEMDB 'CREATE DATABASE NW1 SYSTEM USER PASSWORD "<passwd>"'
    
  3. [1] 在第一個節點上設定系統複寫。

    以 <hanasid>adm 身分備份資料庫:

    hdbsql -d SYSTEMDB -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupSYS')"
    hdbsql -d HN1 -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupHN1')"
    hdbsql -d NW1 -u SYSTEM -p "<passwd>" -i 03 "BACKUP DATA USING FILE ('initialbackupNW1')"
    

    將系統 PKI 檔案複製到次要站台:

    scp /usr/sap/HN1/SYS/global/security/rsecssfs/data/SSFS_HN1.DAT   hn1-db-1:/usr/sap/HN1/SYS/global/security/rsecssfs/data/
    scp /usr/sap/HN1/SYS/global/security/rsecssfs/key/SSFS_HN1.KEY  hn1-db-1:/usr/sap/HN1/SYS/global/security/rsecssfs/key/
    

    建立主要站台:

    hdbnsutil -sr_enable --name=SITE1
    
  4. [2] 在第二個節點上設定系統複寫。

    註冊第二個節點以開始系統複寫。 以 <hanasid>adm 身分執行下列命令:

    sapcontrol -nr 03 -function StopWait 600 10
    hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2
    
  5. [1] 檢查復寫狀態。

    檢查複寫狀態,並等到所有資料庫都同步為止。如果狀態保持為 UNKNOWN,請檢查您的防火牆設定。

    sudo su - hn1adm -c "python /usr/sap/HN1/HDB03/exe/python_support/systemReplicationStatus.py"
    # | Database | Host     | Port  | Service Name | Volume ID | Site ID | Site Name | Secondary | Secondary | Secondary | Secondary | Secondary     | Replication | Replication | Replication    |
    # |          |          |       |              |           |         |           | Host      | Port      | Site ID   | Site Name | Active Status | Mode        | Status      | Status Details |
    # | -------- | -------- | ----- | ------------ | --------- | ------- | --------- | --------- | --------- | --------- | --------- | ------------- | ----------- | ----------- | -------------- |
    # | SYSTEMDB | hn1-db-0 | 30301 | nameserver   |         1 |       1 | SITE1     | hn1-db-1  |     30301 |         2 | SITE2     | YES           | SYNC        | ACTIVE      |                |
    # | HN1      | hn1-db-0 | 30307 | xsengine     |         2 |       1 | SITE1     | hn1-db-1  |     30307 |         2 | SITE2     | YES           | SYNC        | ACTIVE      |                |
    # | NW1      | hn1-db-0 | 30340 | indexserver  |         2 |       1 | SITE1     | hn1-db-1  |     30340 |         2 | SITE2     | YES           | SYNC        | ACTIVE      |                |
    # | HN1      | hn1-db-0 | 30303 | indexserver  |         3 |       1 | SITE1     | hn1-db-1  |     30303 |         2 | SITE2     | YES           | SYNC        | ACTIVE      |                |
    #
    # status system replication site "2": ACTIVE
    # overall system replication status: ACTIVE
    #
    # Local System Replication State
    # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    #
    # mode: PRIMARY
    # site id: 1
    # site name: SITE1
    

設定 SAP HANA 1.0 系統複寫

本節中的步驟會使用下列首碼:

  • [A]:此步驟適用於所有節點。
  • [1]:步驟僅適用於節點 1。
  • [2]:步驟僅適用於 Pacemaker 叢集的節點 2。
  1. [A] 設定防火牆。

    建立防火牆規則以允許 HANA 系統複寫和用戶端流量。 所有 SAP 產品的 TCP/IP 通訊埠會列出必要的連接埠。 下列命令只是允許 HANA 2.0 系統複寫的範例。 請將其調整成您的 SAP HANA 1.0 安裝。

    sudo firewall-cmd --zone=public --add-port=40302/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=40302/tcp
    
  2. [1] 建立必要的使用者。

    以 root 身分執行下列命令。 請務必將 HANA 系統識別碼的值(例如 HN1)、實例編號 (03) 和任何使用者名稱取代為 SAP HANA 安裝的值:

    PATH="$PATH:/usr/sap/HN1/HDB03/exe"
    hdbsql -u system -i 03 'CREATE USER hdbhasync PASSWORD "passwd"'
    hdbsql -u system -i 03 'GRANT DATA ADMIN TO hdbhasync'
    hdbsql -u system -i 03 'ALTER USER hdbhasync DISABLE PASSWORD LIFETIME'
    
  3. [A] 建立金鑰儲存區項目。

    以根使用者身分執行下列命令來建立新的金鑰儲存區項目:

    PATH="$PATH:/usr/sap/HN1/HDB03/exe"
    hdbuserstore SET hdbhaloc localhost:30315 hdbhasync passwd
    
  4. [1] 備份資料庫。

    以根使用者身分備份資料庫:

    PATH="$PATH:/usr/sap/HN1/HDB03/exe"
    hdbsql -d SYSTEMDB -u system -i 03 "BACKUP DATA USING FILE ('initialbackup')"
    

    如果您使用多租使用者安裝,也備份租用戶資料庫:

    hdbsql -d HN1 -u system -i 03 "BACKUP DATA USING FILE ('initialbackup')"
    
  5. [1] 在第一個節點上設定系統複寫。

    以 <hanasid> 身分建立主要站台:

    su - hdbadm
    hdbnsutil -sr_enable –-name=SITE1
    
  6. [2] 在次要節點上設定系統複寫。

    以 <hanasid>adm 身分註冊次要站台:

    HDB stop
    hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2
    HDB start
    

建立 Pacemaker 叢集

遵循在 Azure 的 Red Hat Enterprise Linux 上設定 Pacemaker 中的步驟,建立此 HANA 伺服器的基本 Pacemaker 叢集。

重要

使用以系統為基礎的 SAP 啟動架構,SAP HANA 實例現在可以由 systemd 管理。 最低需要的 Red Hat Enterprise Linux (RHEL) 版本是適用於 SAP 的 RHEL 8。 如 SAP 附注 3189534所述,任何新的 SAP HANA SPS07 修訂 70 或更新版本,或 HANA 系統更新為 HANA 2.0 SPS07 修訂 70 或更新版本,SAP 啟動架構都會自動向 systemd 註冊。

使用HA解決方案來管理SAP HANA系統複寫與已啟用系統功能的SAP HANA 實例(請參閱 SAP 附注 3189534),需要額外的步驟,以確保HA叢集可以管理 SAP 實例,而不會受到系統干擾。 因此,針對與 systemd 整合的 SAP HANA 系統,必須在所有叢集節點上遵循 Red Hat KBA 7029705中所述的其他步驟。

實作 Python 系統複寫勾點 SAPHanaSR

這個重要步驟會優化與叢集的整合,並改善需要叢集故障轉移時的偵測。 強烈建議您設定 SAPHanaSR Python 勾點。

  1. [A]所有節點上安裝 SAP HANA 資源代理程式。 請務必啟用包含套件的存放庫。 如果您使用已啟用 RHEL 8.x HA 的映像,就不需要啟用更多存放庫。

    # Enable repository that contains SAP HANA resource agents
    sudo subscription-manager repos --enable="rhel-sap-hana-for-rhel-7-server-rpms"
    
    sudo yum install -y resource-agents-sap-hana
    
  2. [A] 安裝 HANA system replication hook。 兩個 HANA DB 節點上均需安裝勾點。

    提示

    Python 勾點只能針對 HANA 2.0 版實作。

    1. 將勾點準備為 root

       mkdir -p /hana/shared/myHooks
       cp /usr/share/SAPHanaSR/srHook/SAPHanaSR.py /hana/shared/myHooks
       chown -R hn1adm:sapsys /hana/shared/myHooks
      
    2. 停止兩個節點上的 HANA。 以 <sid>adm 身分執行。

      sapcontrol -nr 03 -function StopSystem
      
    3. 調整每個叢集節點上的 global.ini

      [ha_dr_provider_SAPHanaSR]
      provider = SAPHanaSR
      path = /hana/shared/myHooks
      execution_order = 1
      
      [trace]
      ha_dr_saphanasr = info
      
  3. [A] 叢集需要在 sudoers sid>adm 的每個叢集節點上設定<。 在此範例中,建立新檔案可達成此目的。 visudo使用 命令將下拉式檔案編輯20-saphanaroot

    sudo visudo -f /etc/sudoers.d/20-saphana
    

    插入下列幾行,然後儲存:

    Cmnd_Alias SITE1_SOK   = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE1 -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITE1_SFAIL = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE1 -v SFAIL -t crm_config -s SAPHanaSR
    Cmnd_Alias SITE2_SOK   = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE2 -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITE2_SFAIL = /usr/sbin/crm_attribute -n hana_hn1_site_srHook_SITE2 -v SFAIL -t crm_config -s SAPHanaSR
    hn1adm ALL=(ALL) NOPASSWD: SITE1_SOK, SITE1_SFAIL, SITE2_SOK, SITE2_SFAIL
    Defaults!SITE1_SOK, SITE1_SFAIL, SITE2_SOK, SITE2_SFAIL !requiretty
    
  4. [A] 在兩個節點上啟動 SAP Hana。 以 <sid>adm 身分執行。

    sapcontrol -nr 03 -function StartSystem 
    
  5. [1] 驗證勾點安裝。 在作用中的 HANA 系統複寫網站上,以 <sid>adm 身分執行。

     cdtrace
     awk '/ha_dr_SAPHanaSR.*crm_attribute/ \
     { printf "%s %s %s %s\n",$2,$3,$5,$16 }' nameserver_*
    
     # 2021-04-12 21:36:16.911343 ha_dr_SAPHanaSR SFAIL
     # 2021-04-12 21:36:29.147808 ha_dr_SAPHanaSR SFAIL
     # 2021-04-12 21:37:04.898680 ha_dr_SAPHanaSR SOK
    

如需 SAP HANA 系統復寫攔截實作的詳細資訊,請參閱 啟用 SAP HA/DR 提供者勾點

建立 SAP HANA 叢集資源

建立 HANA 拓撲。 在其中一個 Pacemaker 叢集節點上執行下列命令。 在這些指示中,請務必在適當情況下取代您的實例號碼、HANA 系統標識碼、IP 位址和系統名稱。

sudo pcs property set maintenance-mode=true

sudo pcs resource create SAPHanaTopology_HN1_03 SAPHanaTopology SID=HN1 InstanceNumber=03 \
op start timeout=600 op stop timeout=300 op monitor interval=10 timeout=600 \
clone clone-max=2 clone-node-max=1 interleave=true

接下來,建立 HANA 資源。

注意

本文包含字詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

如果您要在 RHEL 7.x建置叢集,請使用下列命令:

sudo pcs resource create SAPHana_HN1_03 SAPHana SID=HN1 InstanceNumber=03 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=false \
  op start timeout=3600 op stop timeout=3600 \
  op monitor interval=61 role="Slave" timeout=700 \
  op monitor interval=59 role="Master" timeout=700 \
  op promote timeout=3600 op demote timeout=3600 \
  master notify=true clone-max=2 clone-node-max=1 interleave=true

sudo pcs resource create vip_HN1_03 IPaddr2 ip="10.0.0.13"
sudo pcs resource create nc_HN1_03 azure-lb port=62503
sudo pcs resource group add g_ip_HN1_03 nc_HN1_03 vip_HN1_03

sudo pcs constraint order SAPHanaTopology_HN1_03-clone then SAPHana_HN1_03-master symmetrical=false
sudo pcs constraint colocation add g_ip_HN1_03 with master SAPHana_HN1_03-master 4000

sudo pcs resource defaults resource-stickiness=1000
sudo pcs resource defaults migration-threshold=5000

sudo pcs property set maintenance-mode=false

如果您要在 RHEL 8.x/9.x建置叢集,請使用下列命令:

sudo pcs resource create SAPHana_HN1_03 SAPHana SID=HN1 InstanceNumber=03 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=false \
  op start timeout=3600 op stop timeout=3600 \
  op monitor interval=61 role="Slave" timeout=700 \
  op monitor interval=59 role="Master" timeout=700 \
  op promote timeout=3600 op demote timeout=3600 \
  promotable notify=true clone-max=2 clone-node-max=1 interleave=true

sudo pcs resource create vip_HN1_03 IPaddr2 ip="10.0.0.13"
sudo pcs resource create nc_HN1_03 azure-lb port=62503
sudo pcs resource group add g_ip_HN1_03 nc_HN1_03 vip_HN1_03

sudo pcs constraint order SAPHanaTopology_HN1_03-clone then SAPHana_HN1_03-clone symmetrical=false
sudo pcs constraint colocation add g_ip_HN1_03 with master SAPHana_HN1_03-clone 4000

sudo pcs resource defaults update resource-stickiness=1000
sudo pcs resource defaults update migration-threshold=5000

sudo pcs property set maintenance-mode=false

priority-fencing-delay若要設定 SAP HANA (僅適用於 pacemaker-2.0.4-6.el8 或更高版本),必須執行下列命令。

注意

如果您有兩個節點的叢集,您可以設定 priority-fencing-delay 叢集屬性。 這個屬性會在分割腦案例發生時,引入隔離節點的延遲,而節點的總資源優先順序較高。 如需詳細資訊,請參閱 Pacemaker 是否可以使用最少執行的資源來隔離叢集節點?

屬性 priority-fencing-delay 適用於 pacemaker-2.0.4-6.el8 版本或更新版本。 如果您要在現有的叢集上設定 priority-fencing-delay ,請務必在隔離裝置中取消設定 pcmk_delay_max 選項。

sudo pcs property set maintenance-mode=true

sudo pcs resource defaults update priority=1
sudo pcs resource update SAPHana_HN1_03-clone meta priority=10

sudo pcs property set priority-fencing-delay=15s

sudo pcs property set maintenance-mode=false

重要

當執行容錯移轉測試時,最好將 AUTOMATED_REGISTER 設定為 false,以防止失敗的主要執行個體自動註冊為次要執行個體。 測試之後,最佳做法是將 設定 AUTOMATED_REGISTERtrue ,以便在接管之後,系統復寫可以自動繼續。

請確定叢集狀態良好,且已啟動所有資源。 資源執行所在的節點並不重要。

注意

上述組態中的逾時只是範例,可能需要調整為特定的 HANA 設定。 比方說,如果啟動 SAP Hana 資料庫需要較長的時間,您可能需要延長啟動逾時。

使用 命令 sudo pcs status 來檢查所建立叢集資源的狀態:

# Online: [ hn1-db-0 hn1-db-1 ]
#
# Full list of resources:
#
# azure_fence     (stonith:fence_azure_arm):      Started hn1-db-0
#  Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
#      Started: [ hn1-db-0 hn1-db-1 ]
#  Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
#      Masters: [ hn1-db-0 ]
#      Slaves: [ hn1-db-1 ]
#  Resource Group: g_ip_HN1_03
#      nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-0
#      vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-0

在 Pacemaker 叢集中設定 HANA 主動/讀取啟用的系統複寫

從 SAP HANA 2.0 SPS 01 開始,SAP 允許 SAP HANA 系統複寫的使用中/讀取啟用設定,其中 SAP HANA 系統複寫的次要系統可以主動用於大量讀取工作負載。

若要在叢集中支援這類設定,則需要第二個虛擬IP位址,這可讓用戶端存取已啟用次要讀取的SAP HANA資料庫。 為了確保在接管發生之後,仍可存取次要複寫網站,叢集需要使用次要 SAPHana 資源來行動虛擬 IP 位址。

本節說明使用第二個虛擬IP管理 Red Hat HA 叢集中 HANA 作用中/讀取啟用系統複寫所需的其他步驟。

在繼續進行之前,請確定您已完整設定 Red Hat HA 叢集來管理 SAP HANA 資料庫,如檔先前各節所述。

此圖顯示已啟用讀取的次要資料庫 SAP HANA HA。

在 Azure Load Balancer 中啟用/讀取啟用設定的其他設定

若要繼續布建第二個虛擬IP的更多步驟,請確定您已設定 Azure Load Balancer,如透過 Azure 入口網站 手動部署 Linux VM 一節中所述

  1. 針對標準負載平衡器,請遵循您在先前小節中建立的相同負載平衡器上的這些步驟。

    a. 建立第二個前端 IP 集區:

    • 開啟負載平衡器,選取 [前端 IP 集區],然後選取 [新增]
    • 輸入新的前端 IP 集區名稱 (例如 hana-secondaryIP)。
    • 將 [指派] 設定[靜態],然後輸入IP位址(例如10.0.0.0.14)。
    • 選取 [確定]。
    • 建立新的前端 IP 集區之後,請記下集區 IP 位址。

    b. 建立健全狀態探查:

    • 開啟負載平衡器,選取 [健康情況探查],然後選取 [新增]
    • 輸入新的健全狀態探查名稱 (例如 hana-secondaryhp)。
    • 選取 [TCP] 作為通訊協定和連接埠 62603。 將 [間隔] 值設定為 5,並將 [狀況不良] 閾值設定為 2
    • 選取 [確定]。

    c. 建立負載平衡規則:

    • 開啟負載平衡器,選取 [負載平衡規則],然後選取 [新增]
    • 輸入新的負載平衡器規則名稱 (例如 hana-secondarylb)。
    • 選取您稍早建立的前端 IP 位址、後端集區及健全狀態探查 (例如,hana-secondaryIPhana-backendhana-secondaryhp)。
    • 選取 [HA 連接埠]
    • 務必啟用浮動 IP
    • 選取 [確定]。

設定啟用 HANA 作用中/讀取的系統複寫

設定 HANA 系統復寫的步驟描述於設定 SAP HANA 2.0 系統復 寫一節。 如果您要在第二個節點上設定系統複寫時部署已啟用讀取的次要案例,請以 hanasidadm 身分執行下列命令:

sapcontrol -nr 03 -function StopWait 600 10 

hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2 --operationMode=logreplay_readaccess 

針對作用中/啟用讀取的設定新增次要虛擬 IP 位址資源

您可以使用下列命令來設定第二個虛擬 IP 和適當的共置條件約束:

pcs property set maintenance-mode=true

pcs resource create secvip_HN1_03 ocf:heartbeat:IPaddr2 ip="10.40.0.16"

pcs resource create secnc_HN1_03 ocf:heartbeat:azure-lb port=62603

pcs resource group add g_secip_HN1_03 secnc_HN1_03 secvip_HN1_03

pcs constraint location g_secip_HN1_03 rule score=INFINITY hana_hn1_sync_state eq SOK and hana_hn1_roles eq 4:S:master1:master:worker:master

pcs constraint location g_secip_HN1_03 rule score=4000 hana_hn1_sync_state eq PRIM and hana_hn1_roles eq 4:P:master1:master:worker:master

pcs property set maintenance-mode=false

請確定叢集狀態良好,而且所有資源都已啟動。 第二個虛擬IP會在次要網站上與SAPHana次要資源一起執行。

sudo pcs status

# Online: [ hn1-db-0 hn1-db-1 ]
#
# Full List of Resources:
#   rsc_hdb_azr_agt     (stonith:fence_azure_arm):      Started hn1-db-0
#   Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]:
#     Started: [ hn1-db-0 hn1-db-1 ]
#   Clone Set: SAPHana_HN1_03-clone [SAPHana_HN1_03] (promotable):
#     Masters: [ hn1-db-0 ]
#     Slaves: [ hn1-db-1 ]
#   Resource Group: g_ip_HN1_03:
#     nc_HN1_03         (ocf::heartbeat:azure-lb):      Started hn1-db-0
#     vip_HN1_03        (ocf::heartbeat:IPaddr2):       Started hn1-db-0
#   Resource Group: g_secip_HN1_03:
#     secnc_HN1_03      (ocf::heartbeat:azure-lb):      Started hn1-db-1
#     secvip_HN1_03     (ocf::heartbeat:IPaddr2):       Started hn1-db-1

在下一節中,您可以找到一組要執行的一般容錯移轉測試。

在測試以啟用讀取的次要複本設定的 HANA 叢集時,請注意第二個虛擬 IP 行為:

  1. 當您將SAPHana_HN1_03叢集資源移轉至次要月臺 hn1-db-1 時,第二個虛擬IP會繼續在相同的月臺 hn1-db-1 上執行。 如果您已在 AUTOMATED_REGISTER="true" hn1-db-0自動註冊資源,且 HANA 系統複寫會自動註冊,您的第二個虛擬 IP 也會移至 hn1-db-0

  2. 在測試伺服器當機時,第二個虛擬IP資源(secvip_HN1_03) 和 Azure Load Balancer 埠資源 (secnc_HN1_03) 會與主要虛擬IP資源一起在主伺服器上執行。 因此,在輔助伺服器關閉之前,連線到已啟用讀取的 HANA 資料庫的應用程式會連線到主要 HANA 資料庫。 這是預期的行為,因為您不希望連線到已啟用讀取的 HANA 資料庫的應用程式無法存取,直到輔助伺服器無法使用為止。

  3. 在第二個虛擬IP位址的故障轉移和後援期間,使用第二個虛擬IP連線到 HANA 資料庫的應用程式上現有的連線可能會中斷。

安裝程式會將第二個虛擬IP資源指派給執行狀況良好SAP HANA 實例的節點的時間最大化。

測試叢集設定

本節將說明如何測試您的設定。 開始測試之前,請確定 Pacemaker 沒有任何失敗的動作(透過計算機狀態)、沒有未預期的位置條件約束(例如移轉測試的剩餘專案),以及 HANA 處於同步狀態,例如使用 systemReplicationStatus

sudo su - hn1adm -c "python /usr/sap/HN1/HDB03/exe/python_support/systemReplicationStatus.py"

測試移轉

開始測試之前的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-0 ]
    Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-0
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-0

您可以執行下列命令作為根目錄,以移轉 SAP HANA 主要節點:

# On RHEL 7.x
pcs resource move SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource move SAPHana_HN1_03-clone --master

叢集會將 SAP HANA 主要節點和包含虛擬 IP 位址的群組移轉至 hn1-db-1

完成移轉之後, sudo pcs status 輸出看起來會像這樣:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-1 ]
    Stopped: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-1
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-1

使用 AUTOMATED_REGISTER="false"時,叢集不會重新啟動失敗的 HANA 資料庫,也不會對 上的 hn1-db-0新主資料庫進行註冊。 在此情況下,執行下列命令將 HANA 實例設定為次要實例,如 hn1adm

sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-1 --remoteInstance=03 --replicationMode=sync --name=SITE1

移轉會建立需要再次刪除的位置條件約束。 以 root 身分執行下列命令,或透過 sudo執行 :

pcs resource clear SAPHana_HN1_03-master

使用 pcs status監視 HANA 資源的狀態。 在 HANA hn1-db-0啟動時,輸出看起來應該像這樣:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-1 ]
    Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-1
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-1

封鎖網路通訊

開始測試之前的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-1 ]
    Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-1
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-1

執行防火牆規則以封鎖其中一個節點上的通訊。

# Execute iptable rule on hn1-db-1 (10.0.0.6) to block the incoming and outgoing traffic to hn1-db-0 (10.0.0.5)
iptables -A INPUT -s 10.0.0.5 -j DROP; iptables -A OUTPUT -d 10.0.0.5 -j DROP

當叢集節點無法彼此通訊時,有分割腦案例的風險。 在這種情況下,叢集節點會嘗試同時互相隔離,導致圍欄競爭。 為了避免這種情況,我們建議您在叢集組態中設定 priority-fencing-delay 屬性(僅適用於 pacemaker-2.0.4-6.el8 或更高版本)。

藉由啟用 priority-fencing-delay 屬性,叢集會在裝載 HANA 主要資源的節點上特別導入隔離動作的延遲,讓節點贏得圍欄競爭。

執行下列命令來刪除防火牆規則:

# If the iptables rule set on the server gets reset after a reboot, the rules will be cleared out. In case they have not been reset, please proceed to remove the iptables rule using the following command.
iptables -D INPUT -s 10.0.0.5 -j DROP; iptables -D OUTPUT -d 10.0.0.5 -j DROP

測試 Azure 隔離代理程式

注意

本文包含字詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

開始測試之前的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-1 ]
    Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-1
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-1

您可以藉由停用 SAP HANA 執行主要節點上的網路介面,來測試 Azure 隔離代理程式的設定。 如需如何模擬網路失敗的描述,請參閱 Red Hat 知識庫文章 79523

在此範例中 net_breaker ,我們會使用腳本作為根目錄來封鎖網路的所有存取:

sh ./net_breaker.sh BreakCommCmd 10.0.0.6

VM 現在應該會根據您的叢集設定重新啟動或停止。 如果您將 stonith-action 設定 off設為 ,則會停止 VM,並將資源遷移至執行中的 VM。

再次啟動 VM 之後,如果您設定 AUTOMATED_REGISTER="false",SAP HANA 資源將無法以次要身分啟動。 在此情況下,執行此命令作為 hn1adm 使用者,將 HANA 實例設定為次要:

sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-0 --remoteInstance=03 --replicationMode=sync --name=SITE2

切換回根目錄並清除失敗狀態:

# On RHEL 7.x
pcs resource cleanup SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource cleanup SAPHana_HN1_03 node=<hostname on which the resource needs to be cleaned>

測試完成之後的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-0 ]
    Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-0
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-0

測試手動容錯移轉

開始測試之前的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-0 ]
    Slaves: [ hn1-db-1 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-0
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-0

您可以藉由停止節點上的 hn1-db-0 叢集作為根目錄來測試手動故障轉移:

pcs cluster stop

容錯移轉之後,您可以重新啟動叢集。 如果您設定 AUTOMATED_REGISTER="false",節點上的 hn1-db-0 SAP HANA 資源無法以次要身分啟動。 在此情況下,執行此命令作為根目錄,將 HANA 實例設定為次要實例:

pcs cluster start

以 hn1adm 身分執行下列命令:

sapcontrol -nr 03 -function StopWait 600 10
hdbnsutil -sr_register --remoteHost=hn1-db-1 --remoteInstance=03 --replicationMode=sync --name=SITE1

然後作為根目錄:

# On RHEL 7.x
pcs resource cleanup SAPHana_HN1_03-master
# On RHEL 8.x
pcs resource cleanup SAPHana_HN1_03 node=<hostname on which the resource needs to be cleaned>

測試完成之後的資源狀態:

Clone Set: SAPHanaTopology_HN1_03-clone [SAPHanaTopology_HN1_03]
    Started: [ hn1-db-0 hn1-db-1 ]
Master/Slave Set: SAPHana_HN1_03-master [SAPHana_HN1_03]
    Masters: [ hn1-db-1 ]
     Slaves: [ hn1-db-0 ]
Resource Group: g_ip_HN1_03
    nc_HN1_03  (ocf::heartbeat:azure-lb):      Started hn1-db-1
    vip_HN1_03 (ocf::heartbeat:IPaddr2):       Started hn1-db-1

下一步