分享方式:


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

進行內部部署開發時,您可以使用 HANA 系統複寫或共用儲存體來建立 SAP HANA 的高可用性 (HA)。 在 Azure 虛擬機器上,Azure 上的 HANA 系統複寫是目前為止唯一支援的高可用性功能。

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

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

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

必要條件

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

概觀

為了達成高可用性,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:虛擬機擴展集、可用性區域或可用性設定組。

重要

請確定您選取的作業系統您計畫在部署使用的特定 VM 類型上已獲得 SAP HANA 認證。 您可以在 SAP Hana 認證 IaaS 平台中查閱 SAP Hana 認證的 VM 類型和作業系統版本。 請務必查閱 VM 類型的詳細資料,以取得 SAP Hana 針對特定 VM 類型支援的作業系統版本完整清單。

設定 Azure Load Balancer

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

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

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

注意

未遵守健全狀態探查設定屬性 numberOfProbes,在入口網站中又名為狀況不良閾值。 若要控制連續探查成功或失敗的數目,請將屬性 probeThreshold 設定為 2。 目前無法使用 Azure 入口網站來設定此屬性,因此請使用 Azure CLIPowerShell 命令。

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

注意

當不具公用 IP 位址的 VM 放在內部 (沒有公用 IP 位址) Azure Standard Load Balancer 執行個體的後端集區時,除非另外設定來允許路由傳送至公用端點,否則不會有輸出網際網路連線能力。 如需更多如何實現輸出連線能力的詳細資訊,請參閱在 SAP 高可用性案例中使用 Azure Standard Load Balancer 實現 VM 的公用端點連線能力 (部分機器翻譯)。

重要

請勿在位於 Azure Load Balancer 後方的 Azure VM 上啟用 TCP 時間戳記。 啟用 TCP 時間戳記可能會導致健全狀態探查失敗。 將 net.ipv4.tcp_timestamps 參數設定為 0。 如需詳細資訊,請參閱負載平衡器健全狀態探查和 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] 執行 RHEL for HANA 設定。

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

  4. [A] 安裝 SAP HANA,並遵循 SAP 的檔

  5. [A] 設定防火牆。

    建立 Azure 負載平衡器探查連接埠的防火牆規則。

    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] 建立租用戶資料庫。

    以 <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
    

建立 Pacemaker 叢集

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

重要

透過以 systemd 為基礎的 SAP 啟動架構,SAP Hana 執行個體現在可由 systemd 管理。 針對 SAP,最低需求 Red Hat Enterprise Linux (RHEL) 版本為 RHEL 8。 如 SAP 附註 3189534 所述,任何 SAP Hana SPS07 修訂版 70 或更新版本的安裝、HANA 系統至 HANA 2.0 SPS07 修訂版 70 或更新版的更新,SAP 啟動架構將自動向 systemd 註冊。

使用高可用性解決方案以管理 SAP Hana 系統複寫與已啟用 systemd 的 SAP Hana 執行個體 (請參閱 SAP 附註 3189534),需要額外的步驟以確保高可用性叢集可在沒有 systemd 介入下管理 SAP 執行個體。 因此,針對與 systemd 整合的 SAP Hana 系統,所有叢集必須遵循 Red Hat KBA 7029705 中所述的額外步驟。

實作 SAP HANA 系統複寫勾點

這是與叢集整合最佳化的重要步驟,並可改善需要叢集容錯移轉時的偵測。 必須進行正確的叢集作業,才能啟用 SAPHanaSR 勾點。 強烈建議您同時設定SR和 ChkSrv 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 dnf install -y resource-agents-sap-hana
    

    注意

    針對 RHEL 8.x 和 RHEL 9.x,請確認已安裝的資源代理程式-sap-hana 套件是 0.162.3-5 版或更新版本。

  2. [A] 安裝 HANA system replication hooks。 複寫攔截的組態必須安裝在兩個 HANA DB 節點上。

    1. 停止兩個節點上的 HANA。 以 <sid>adm 身分執行。

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

      [ha_dr_provider_SAPHanaSR]
      provider = SAPHanaSR
      path = /usr/share/SAPHanaSR/srHook
      execution_order = 1
      
      [ha_dr_provider_chksrv]
      provider = ChkSrv
      path = /usr/share/SAPHanaSR/srHook
      execution_order = 2
      action_on_lost = kill
      
      [trace]
      ha_dr_saphanasr = info
      ha_dr_chksrv = info
      

    如果您將 參數 path 指向預設 /usr/share/SAPHanaSR/srHook 位置,Python 勾點程式代碼會自動透過 OS 更新或套件更新來更新。 HANA 會在下次重新啟動時使用勾點程式碼更新。 使用 之類的 /hana/shared/myHooks選擇性路徑,您可以將 OS 更新與 HANA 將使用的攔截版本分離。

    您可以使用 參數來調整攔截action_on_lost的行為ChkSrv。 有效的值為 [ ignore | stop | kill ]。

  3. [A] 叢集需要針對 <sid>adm 每個叢集節點上的 sudoers 設定。 在此範例中,建立新檔案即可達成。 使用 visudo 命令以將 20-saphana Drop-in 檔案編輯為 root

    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] 確認 SRHanaSR 勾點安裝。 在作用中的 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
    
  6. [1] 確認 ChkSrv 勾點安裝。 在作用中的 HANA 系統複寫網站上,以 <sid>adm 身分執行。

     cdtrace
     tail -20 nameserver_chksrv.trc
    

如需 SAP HANA 攔截實作的詳細資訊,請參閱啟用 SAP HANA srConnectionChanged() 攔截和啟用 hdbindexserver 行程失敗動作的 SAP HANA srServiceStateChanged() 攔截。

建立 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

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

注意

如果您有兩個節點的叢集,您可以設定 priority-fencing-delay 叢集屬性。 若發生腦裂 (split-brain) 情況,此屬性會在隔離總資源優先順序較高的節點時出現延遲。 如需詳細資訊,請參閱 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_REGISTER 設定為 true,以便在接管之後,系統複寫可以自動繼續。

請確定叢集狀態正常,且所有資源皆已啟動。 資源在哪個節點上執行並不重要。

注意

上述設定中的逾時只是範例,可能需要針對特定的 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 次要資料庫。 為了確保在接管發生之後仍可存取次要複寫站台,叢集需要將虛擬 IP 位址與 SAP Hana 資源的次要站台一起移動。

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

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

圖表顯示已啟用讀取次要案例 SAP HANA 高可用性。

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

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

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

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

    • 開啟負載平衡器,選取 [前端 IP 集區],然後選取 [新增]
    • 輸入新的前端 IP 集區名稱 (例如 hana-secondaryIP)。
    • 將 [指派] 設為 [靜態],並輸入 IP 位址 (例如,10.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 將會與 SAP HANA 次要資源在次要站台上執行。

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",且 HANA 系統複寫已在 hn1-db-0 上自動註冊,則您的第二個虛擬 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 沒有任何失敗的動作 (透過 pcs status)、沒有未預期的位置條件約束 (例如,移轉測試的剩餘項目),且 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

您可以 root 身分執行下列命令來移轉 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 上的新主要資料庫進行註冊。 在此情況下,以 hn1adm 身分執行下列命令來將 HANA 執行個體設為次要:

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 資源的狀態。 在 hn1-db-0 上啟動 HANA 之後,輸出應如下所示:

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

在此範例中,我們會以 root 身分使用 net_breaker 指令碼來封鎖所有對網路的存取:

sh ./net_breaker.sh BreakCommCmd 10.0.0.6

根據您的叢集組態,虛擬機器現在應該會重新啟動或停止。 如果您將 stonith-action 設定設為 off,虛擬機器會停止,並將資源移轉到執行中的虛擬機器。

當您重新啟動虛擬機器之後,如果您設定 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

切換為 root 身分並清除失敗狀態:

# 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

您可以 root 身分藉由停止 hn1-db-0 節點上的叢集,來測試手動容錯移轉:

pcs cluster stop

容錯移轉之後,您可以重新啟動叢集。 如果您設定 AUTOMATED_REGISTER="false"hn1-db-0 節點上的 SAP HANA 資源會無法以次要身分啟動。 在此情況下,以 root 身分執行下列命令來將 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

接著以 root 身分:

# 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

下一步