IBM Cloud Docs
在 Red Hat Enterprise Linux High Availability Add-On 叢集中設定 SAP HANA 主動/主動 (讀啟用) 系統複製

在 Red Hat Enterprise Linux High Availability Add-On 叢集中設定 SAP HANA 主動/主動 (讀啟用) 系統複製

以下資訊說明 Red Hat Enterprise Linux (RHEL) High Availability Add-On 群集的設定,用於管理 SAP HANA Active-Active (Read Enabled) 系統複製。 群集使用 IBM® Power® Virtual Server 作為群集節點。

Active/Active(啟用讀取) 配置中,SAP HANA 系統複製允許對輔助系統上的資料庫內容進行讀取存取。

本資訊適用於規劃 SAP HANA on Power Virtual Server 高可用性部署的架構人員和專家。

開始之前

檢閱一般需求、產品文件、支援文章,以及 IBM Power Virtual Server 參考資料中為 SAP 應用程式實施高可用性 所列出的 SAP 備註。

必要條件

  • Red Hat High Availability 叢集部署在 Power Virtual Server 的兩個虛擬伺服器實體上。
  • 虛擬伺服器實體需要滿足 SAP HANA 系統範圍內的硬體和資源需求。 請遵循 規劃部署 文件中的指引。
  • 虛擬伺服器實例的主機名稱必須符合 SAP HANA 的要求。
  • SAP HANA 已安裝在兩個虛擬伺服器實體上,並已設定 System Replication。SAP HANA SAP HANA 的安裝和 SAP HANA 系統複製的設定並非 Power Virtual Server 環境所特有,您需要遵循標準程序。

設定 Active/Active(讀取啟用)情境

Active/Active (讀取啟用) 系統複製情境是 Red Hat Enterprise Linux High Availability Add-On 群集中配置 SAP HANA 擴充系統複製中 所述設定的延伸。

在繼續以下步驟之前,請完成生產系統 System Replication 群集的設定。

將系統複製作業模式變更為 Active/Active(讀取啟用)

在執行次要實例的節點上,執行下列指令以變更操作模式。

  1. 將叢集設定為維護模式。
    pcs property set maintenance-mode=true
    
  2. 停止次要 SAP HANA 範例。
    sudo -i -u ${sid}adm -- \
        HDB stop
    
  3. 變更系統複製作業模式。
    sudo -i -u ${sid}adm -- \
        hdbnsutil -sr_changeOperationMode --mode=logreplay_readaccess
    
  4. 啟動第二個 SAP HANA 實例。
    sudo -i -u ${sid}adm -- \
        HDB start
    
  5. 從維護模式移除群集。
    pcs property set maintenance-mode=false
    

為 Active/Active(讀取啟用)情境設定群集資源

使用下列資訊設定 Active/Active(讀取啟用)情境所需的額外群集資源。

建立第二虛擬 IP 位址資源

檢視 Reserving virtual IP addresses(保留虛擬 IP 位址)中的資訊,並為輔助網路保留虛擬 IP 位址。

使用保留的 IP 位址建立虛擬 IP 位址資源。 此虛擬 IP 位址允許用戶端連線到次要 HANA 實例進行唯讀查詢。

在群集節點上,將保留的 IP 位址指定給 VIP_SECONDARY 環境變數,並執行下列指令來建立虛擬 IP 位址群集資源。

export VIP_SECONDARY=<reserved IP address for SAP HANA secondary>
echo $VIP_SECONDARY
pcs resource create vip_s_${SID}_${INSTNO} IPaddr2 ip=$VIP_SECONDARY

檢查已設定的虛擬 IP 位址和群集狀態。

pcs resource config vip_s_${SID}_${INSTNO}
pcs status --full

為第二虛擬 IP 位址建立位置限制

建立群集約束,以確保次要虛擬 IP 位址放置在執行次要實例的群集節點上。

在群集節點上,執行下列指令。

pcs constraint location vip_s_${SID}_${INSTNO} rule \
    score=INFINITY hana_${sid}_sync_state eq SOK \
    and hana_${sid}_roles eq 4:S:master1:master:worker:master
pcs constraint location vip_s_${SID}_${INSTNO} rule \
    score=2000 hana_${sid}_sync_state eq PRIM \
    and hana_${sid}_roles eq 4:P:master1:master:worker:master

這些位置限制為第二個虛擬 IP 資源建立下列行為:

  • 如果 SAP HANA primary 和 SAP HANA secondary 都可用,且 SAP HANA 系統複製狀態為 SOK,則會將次級虛擬 IP 位址指定給 SAP HANA secondary 處於活動狀態的節點。
  • 如果 SAP HANA 次要節點不可用,或 SAP HANA 系統複製狀態不是 SOK,則次要虛擬 IP 會指定給 SAP HANA 主要作用中的節點。 當 SAP HANA 次級可用且 SAP HANA 系統複製狀態再次為 SOK 時,第二個虛擬 IP 位址會移回 SAP HANA 次級作用中的節點。
  • 如果 SAP HANA primary 或執行 SAP HANA primary 的節點無法使用,則 secondary 會取代 primary 的角色。 第二個虛擬 IP 會保留在節點上,直到其他節點變成 SAP HANA 次要角色,且 SAP HANA 系統複製狀態再次 SOK

此行為可將次要虛擬 IP 資源指派給正執行健康 SAP HANA 範例的節點的時間最大化。

Active/Active (已啟用讀取) 方案的群集組態已完成。

檢查叢集配置

在群集節點上,執行下列指令以檢查群集資源的狀態。

pcs status --full

輸出範例:

# pcs status --full
Cluster name: H4S_cluster
Cluster Summary:
  * Stack: corosync
  * Current DC: cl-h4s-1 (1) (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
  * Last updated: Mon Jul 31 11:46:11 2023
  * Last change:  Mon Jul 31 11:44:34 2023 by root via crm_attribute on cl-h4s-1
  * 2 nodes configured
  * 7 resource instances configured

Node List:
  * Online: [ cl-h4s-1 (1) cl-h4s-2 (2) ]

Full List of Resources:
  * res_fence_ibm_powervs	(stonith:fence_ibm_powervs):	 Started cl-h4s-1
  * vip_H4S_00_primary	(ocf::heartbeat:IPaddr2):	 Started cl-h4s-1
  * Clone Set: SAPHanaTopology_H4S_00-clone [SAPHanaTopology_H4S_00]:
    * SAPHanaTopology_H4S_00	(ocf::heartbeat:SAPHanaTopology):	 Started cl-h4s-2
    * SAPHanaTopology_H4S_00	(ocf::heartbeat:SAPHanaTopology):	 Started cl-h4s-1
  * Clone Set: SAPHana_H4S_00-clone [SAPHana_H4S_00] (promotable):
    * SAPHana_H4S_00	(ocf::heartbeat:SAPHana):	 Slave cl-h4s-2
    * SAPHana_H4S_00	(ocf::heartbeat:SAPHana):	 Master cl-h4s-1
  * vip_s_H4S_00	(ocf::heartbeat:IPaddr2):	 Started cl-h4s-2

Node Attributes:
  * Node: cl-h4s-1 (1):
    * hana_h4s_clone_state            	: PROMOTED
    * hana_h4s_op_mode                	: logreplay_readaccess
    * hana_h4s_remoteHost             	: cl-h4s-2
    * hana_h4s_roles                  	: 4:P:master1:master:worker:master
    * hana_h4s_site                   	: SiteA
    * hana_h4s_srmode                 	: syncmem
    * hana_h4s_sync_state             	: PRIM
    * hana_h4s_version                	: 2.00.070.00.1679989823
    * hana_h4s_vhost                  	: cl-h4s-1
    * lpa_h4s_lpt                     	: 1690796675
    * master-SAPHana_H4S_00           	: 150
  * Node: cl-h4s-2 (2):
    * hana_h4s_clone_state            	: DEMOTED
    * hana_h4s_op_mode                	: logreplay_readaccess
    * hana_h4s_remoteHost             	: cl-h4s-1
    * hana_h4s_roles                  	: 4:S:master1:master:worker:master
    * hana_h4s_site                   	: SiteB
    * hana_h4s_srmode                 	: syncmem
    * hana_h4s_sync_state             	: SOK
    * hana_h4s_version                	: 2.00.070.00.1679989823
    * hana_h4s_vhost                  	: cl-h4s-2
    * lpa_h4s_lpt                     	: 30
    * master-SAPHana_H4S_00           	: 100

Migration Summary:

Tickets:

PCSD Status:
  cl-h4s-1: Online
  cl-h4s-2: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

在群集節點上,執行下列指令以檢查已定義的限制。

pcs constraint --full

輸出範例:

# pcs constraint --full
Location Constraints:
  Resource: vip_s_H4S_00
    Constraint: location-vip_s_H4S_00
      Rule: boolean-op=and score=INFINITY (id:location-vip_s_H4S_00-rule)
        Expression: hana_h4s_sync_state eq SOK (id:location-vip_s_H4S_00-rule-expr)
        Expression: hana_h4s_roles eq 4:S:master1:master:worker:master (id:location-vip_s_H4S_00-rule-expr-1)
    Constraint: location-vip_s_H4S_00-1
      Rule: boolean-op=and score=2000 (id:location-vip_s_H4S_00-1-rule)
        Expression: hana_h4s_sync_state eq PRIM (id:location-vip_s_H4S_00-1-rule-expr)
        Expression: hana_h4s_roles eq 4:P:master1:master:worker:master (id:location-vip_s_H4S_00-1-rule-expr-1)
Ordering Constraints:
  promote SAPHana_H4S_00-clone then start vip_H4S_00_primary (kind:Mandatory) (id:order-SAPHana_H4S_00-clone-vip_H4S_00_primary-mandatory)
  start SAPHanaTopology_H4S_00-clone then start SAPHana_H4S_00-clone (kind:Mandatory) (non-symmetrical) (id:order-SAPHanaTopology_H4S_00-clone-SAPHana_H4S_00-clone-mandatory)
Colocation Constraints:
  vip_H4S_00_primary with SAPHana_H4S_00-clone (score:2000) (rsc-role:Started) (with-rsc-role:Master) (id:colocation-vip_H4S_00_primary-SAPHana_H4S_00-clone-2000)
Ticket Constraints:

檢查存取啟用讀取功能的次要 SAP HANA 範例

您可以使用 SAP HANA 系統複製 Active/Active(已啟用讀取功能) 連結至輔助系統,以改善整體效能。 有兩種連接方法可用於存取啟用讀取功能的第二 HANA 實例:

  • 顯式唯讀連線 應用程式開啟與次要 HANA 實例的明確連線。

  • 基於提示的語句路由 應用程式 (例如 SAP S/4HANA ) 會開啟與主要 HANA 實例的連線。 在此連線上,具有系統複製特定提示的 SQL 語句會先準備好,然後執行。 在執行過程中,SQL 語句會自動路由到輔助系統,並在那裡進行處理。 有關提示的詳細資訊,請參閱 SAP HANA SQL 和系統檢視參考指南

將下列兩個環境變數設定為 SAP HANA 主要和次要的虛擬 IP 位址。

export VIP_PRIMARY=<virtual IP address of SAP HANA primary>
export VIP_SECONDARY=<virtual IP address of SAP HANA secondary>

以下兩節中的命令會提示輸入 SAP HANA SYSTEM 使用者的密碼。 命令輸出會顯示執行 SQL 語句的 SAP HANA 系統的主機名稱和 IP 位址。

使用明確的唯讀連線檢查存取

使用明確的唯讀連線,驗證與次要實例的連線。

在群集節點上,執行下列指令。

sudo -i -u ${sid}adm -- \
    hdbsql -n $VIP_SECONDARY -i $INSTNO -d SYSTEMDB -u SYSTEM \
      "select * from m_host_information \
      where key = 'net_hostnames' or key = 'net_ip_addresses'"

範例輸出顯示語句在 SAP HANA secondary 上執行。

HOST,KEY,VALUE
"cl-h4s-2","net_hostnames","cl-h4s-2"
"cl-h4s-2","net_ip_addresses","10.40.10.132,10.40.10.211"
2 rows selected (overall time 7518 usec; server time 291 usec)

使用基於提示的語句路由檢查存取

使用基於提示的語句路由,驗證與次要實例的連線。

  1. 在沒有 SQL 提示的情況下,使用與 SAP HANA primary 的明確連線執行連線測試。

    在群集節點上,執行下列指令。

    sudo -i -u ${sid}adm -- \
        hdbsql -n $VIP_PRIMARY -i $INSTNO -d SYSTEMDB -u SYSTEM \
          "select * from m_host_information \
          where key = 'net_hostnames' or key = 'net_ip_addresses'"
    

    範例輸出顯示語句在 SAP HANA primary 上執行。

      HOST,KEY,VALUE
    "cl-h4s-1","net_hostnames","cl-h4s-1"
    "cl-h4s-1","net_ip_addresses","10.40.10.162,10.40.10.201"
    2 rows selected (overall time 5239 usec; server time 361 usec)
    
  2. 使用與 SAP HANA primary 的明確連線和 result_lag SQL 提示,執行連線測試。

    sudo -i -u ${sid}adm -- \
        hdbsql -n $VIP_PRIMARY -i $INSTNO -d SYSTEMDB -u SYSTEM \
          "select * from m_host_information \
          where key = 'net_hostnames' or key = 'net_ip_addresses' \
          with hint(result_lag('hana_sr'))"
    

    範例輸出顯示語句在 SAP HANA secondary 上執行。

    HOST,KEY,VALUE
    "cl-h4s-2","net_hostnames","cl-h4s-2"
    "cl-h4s-2","net_ip_addresses","10.40.10.132,10.40.10.211"
    2 rows selected (overall time 40.722 msec; server time 16.428 msec)
    

啟用自動註冊副實例

您需要根據操作需求設定參數 AUTOMATED_REGISTER。 如果您想要保留還原到前一個主要 SAP HANA 範例狀態的能力,則 AUTOMATED_REGISTER=false 可避免將前一個主要自動註冊為新的次要。

如果您在群集觸發的接管後遇到資料問題,如果 AUTOMATED_REGISTER 設定為 false,您可以手動還原。

如果 AUTOMATED_REGISTER 設定為 true,先前的主要 SAP HANA 範例會自動註冊為次要,且無法在其先前的歷史記錄上啟動。 設定 AUTOMATED_REGISTER=true 的好處是,故障節點重新出現在群集中後,高可用性會自動重新建立。

目前,建議您將 AUTOMATED_REGISTER 保留為預設值 false,直到群集完全測試完成,並驗證故障移轉情況是否如預期般運作。

pcs resource update 指令用來修改資源屬性,而 pcs resource update SAPHana_${SID}_${INSTNO} AUTOMATED_REGISTER=true 會將屬性設定為 true

測試 SAP HANA 系統複製群集

徹底測試群集配置以確保群集正常運作非常重要。 以下資訊提供了一些故障移轉測試情境範例,但並非完整的測試情境清單。

例如,每個測試案例的說明包括下列資訊。

  • 正在測試的元件
  • 測試說明
  • 開始故障移轉測試前的先決條件和群集狀態
  • 測試程序
  • 預期的行為和結果
  • 復原程序

Test1- 測試主資料庫實例失敗

使用下列資訊測試主要資料庫實例的故障。

Test1- 說明

模擬在 NODE1 上執行的主 SAP HANA 資料庫實例當機。

Test1- 先決條件

  • 一個功能性雙結點 RHEL HA Add-On 集群,用於 SAP HANA 系統複製。
  • 兩個群集節點都處於活動狀態。
  • 在 NODE1 和 NODE2 上啟動的群集。
  • 使用 AUTOMATED_REGISTER=false 配置的群集資源 SAPHana_${SID}_${INSTNO}
  • 檢查 SAP HANA 系統複製狀態:
    • 主要 SAP HANA 資料庫在 NODE1
    • 次要 SAP HANA 資料庫在 NODE2
    • SAP HANA 系統複製已啟動並保持同步

Test1- 測試程序

當使用者 ${sid}adm 時,透過傳送 SIGKILL 訊號使 SAP HANA primary 崩潰。

在 NODE1 上,執行下列指令。

sudo -i -u ${sid}adm -- HDB kill-9

Test1- 預期行為

  • SAP HANA NODE1 上的主要實例當機。
  • 群集偵測到已停止的主要 SAP HANA 資料庫,並將資源標示為 failed
  • 群集將 NODE2 上的次要 SAP HANA 資料庫升級為新的主要資料庫。
  • 群集釋放 NODE1 上的虛擬 IP 位址,並在 NODE2 上的新主網路上取得該位址。
  • 接管後,次要 SAP HANA 範例不可用,次要虛擬 IP 位址會保留在 NODE2 上。
  • 如果應用程式 (例如 SAP NetWeaver ) 連線至 SAP HANA 的租戶資料庫,則應用程式會自動重新連線至新的主要資料庫。

Test1- 復原程序

由於群集資源 SAPHana_${SID}_${INSTNO} 是以 AUTOMATED_REGISTER=false 設定的,因此群集不會重新啟動失敗的 SAP HANA 資料庫,也不會針對新的主要資料庫註冊該資料庫。 也就是說,新的主要 ( NODE2 ) 狀態也會顯示次要為「CONNECTION TIMEOUT」狀態。

要重新註冊先前的主要為新的次要,請使用下列指令。

在 NODE1 上,執行下列指令。

sudo -i -u ${sid}adm -- \
    hdbnsutil -sr_register \
      --name=${DC1} \
      --remoteHost=${NODE2} \
      --remoteInstance=00 \
      --replicationMode=sync \
      --operationMode=logreplay_readaccess \
      --online

驗證系統複製狀態:

sudo -i -u ${sid}adm -- \
    hdbnsutil -sr_state

在群集節點上,執行下列指令以刷新群集資源。 此指令會啟動輔助實體。

pcs resource refresh SAPHana_${SID}_${INSTNO}

當次級達到同步狀態 (SOK) 時,次級虛擬 IP 位址會移至 NODE1。

在群集節點上,執行下列指令檢查群集狀態。

pcs status --full

Test2- 執行主要資料庫的節點測試失敗

使用下列資訊測試執行主要資料庫的節點是否故障。

Test2- 說明

模擬執行主要 SAP HANA 資料庫的節點當機。

Test2- 準備工作

請確定群集資源 SAPHana_${SID}_${INSTNO} 已設定為 AUTOMATED_REGISTER=true

在 NODE1 上,執行下列指令。

pcs resource update SAPHana_${SID}_${INSTNO} AUTOMATED_REGISTER=true

驗證資源組態中的 AUTOMATED_REGISTER 設定。

pcs resource config SAPHana_${SID}_${INSTNO} | grep Attributes

Test2- 先決條件

  • 一個功能性雙結點 RHEL HA Add-On 集群,用於 SAP HANA 系統複製。
  • 兩個節點都處於活動狀態。
  • 群集在 NODE1 和 NODE2 上啟動。
  • 檢查 SAP HANA 系統複製狀態。
    • 主要 SAP HANA 資料庫在 NODE2
    • 次要 SAP HANA 資料庫在 NODE1
    • SAP HANA 系統複製已啟動並保持同步
    • 次要虛擬 IP 位址在 NODE1

Test2- 測試程序

透過發送崩潰系統請求使 NODE2 上的主節點崩潰。

在 NODE2 上,執行下列指令。

sync; echo c > /proc/sysrq-trigger

Test2- 預期行為

  • NODE2 關閉。
  • 群集偵測到故障節點,並將其狀態設定為 OFFLINE
  • 群集將 NODE1 上的次要 SAP HANA 資料庫升級為新的主要資料庫。
  • 群集在 NODE1 上取得新主網路上的虛擬 IP 位址。
  • 接管後,次要 SAP HANA 範例不可用,次要虛擬 IP 位址會保留在 NODE1 上。
  • 如果應用程式 (例如 SAP NetWeaver ) 連線至 SAP HANA 的租戶資料庫,則應用程式會自動重新連線至新的主要資料庫。

Test2- 復原程序

登入 IBM Cloud® 主控台並啟動 NODE2 範例。 等到 NODE2 再次可用時,再重新啟動群集框架。

在 NODE2 上,執行下列指令。

pcs cluster start
pcs status --full

由於群集資源 SAPHana_${SID}_${INSTNO} 是以 AUTOMATED_REGISTER=true 設定,因此 SAP HANA 會在 NODE2 重新加入群集時重新啟動,而前主要會重新註冊為次要。 當次級達到同步狀態 (SOK) 時,次級虛擬 IP 位址會移至 NODE2。

Test3- 測試次要資料庫實例的故障

使用下列資訊測試次要資料庫實例的故障。

Test3- 說明

模擬次要 SAP HANA 資料庫當機。

Test3- 先決條件

  • 一個功能性雙結點 RHEL HA Add-On 集群,用於 SAP HANA 系統複製。
  • 兩個節點都處於活動狀態。
  • 群集在 NODE1 和 NODE2 上啟動。
  • 群集資源 SAPHana_${SID}_${INSTNO} 配置為 AUTOMATED_REGISTER=true
  • 檢查 SAP HANA 系統複製狀態:
    • 主要 SAP HANA 資料庫在 NODE1
    • 次要 SAP HANA 資料庫在 NODE2
    • SAP HANA 系統複製已啟動並保持同步
    • 次要虛擬 IP 位址在 NODE2

Test3- 測試程序

當使用者 ${sid}adm 時,透過傳送 SIGKILL 訊號讓 SAP HANA secondary 崩潰。

在 NODE2 上,執行下列指令。

sudo -i -u ${sid}adm -- HDB kill-9

Test3- 預期行為

  • SAP HANA 次要關於 碰撞。NODE2
  • 群集偵測到停止的次要 SAP HANA 資料庫,並將資源標記為 failed
  • 群集會將第二虛擬 IP 位址移至 NODE1。
  • 群集重新啟動次級 SAP HANA 資料庫。
  • 群集偵測到系統複製再次同步。
  • 群集會將次級虛擬 IP 位址移回 NODE2。

Test3- 復原程序

等到次要 SAP HANA 範例再次啟動並同步 (SOK),然後如 pcs status 所示,清理失敗的資源動作。

在群集節點上,執行下列指令。

pcs resource refresh SAPHana_${SID}_${INSTNO}
pcs status --full

Test4- 測試手動將 SAPHana 資源移動到另一個節點

使用下列資訊測試手動將 SAPHana 資源移至其他節點。

Test4- 說明

使用群集指令將主要實例移至其他節點,以便進行維護。

Test4- 先決條件

  • 一個功能性雙結點 RHEL HA Add-On 集群,用於 SAP HANA 系統複製。
  • 兩個節點都處於活動狀態。
  • 群集在 NODE1 和 NODE2 上啟動。
  • 群集資源 SAPHana_${SID}_${INSTNO} 配置為 AUTOMATED_REGISTER=true
  • 檢查 SAP HANA 系統複製狀態:
    • 主要 SAP HANA 資料庫在 NODE1
    • 次要 SAP HANA 資料庫在 NODE2
    • SAP HANA 系統複製已啟動並保持同步
    • 次要虛擬 IP 位址在 NODE2

Test4- 測試程序

使用 pcs resource move 指令將 SAP HANA primary 移至其他節點。

在群集節點上,執行下列指令。

pcs resource move SAPHana_${SID}_${INSTNO}-clone

輸出範例:

# pcs resource move SAPHana_H4S_00-clone
Warning: Creating location constraint 'cli-ban-SAPHana_H4S_00-clone-on-cl-hdb-1' with a score of -INFINITY for resource SAPHana_H4S_00-clone on cl-hdb-1.
        This will prevent SAPHana_H4S_00-clone from running on cl-hdb-1 until the constraint is removed
        This will be the case even if cl-hdb-1 is the last node in the cluster

Test4- 預期行為

  • 群集會建立位置限制來移動資源。
  • 群集觸發接管到次要 SAP HANA 資料庫。
  • 次要虛擬 IP 位址保留在 NODE2 上。
  • 如果應用程式 (例如 SAP NetWeaver ) 連線至 SAP HANA 的租戶資料庫,則應用程式會自動重新連線至新的主要資料庫。

Test4- 復原程序

必須移除自動建立的位置限制,以允許未來自動故障移轉。

等到主要 SAP HANA 範例啟動後,移除限制。

在群集節點上,執行下列指令。

pcs constraint
pcs resource clear SAPHana_${SID}_${INSTNO}-clone
pcs constraint

群集將 SAP HANA 資料庫作為新的次要實例註冊並啟動。 系統複製狀態再次同步後 (SOK),群集會將第二虛擬 IP 位址移至 NODE1。

pcs status --full