在 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 的兩個虛擬伺服器實體上。
- 依照 實作 Red Hat Enterprise Linux 高可用性附加元件 叢集安裝並設定 RHEL HA 附加元件叢集。
- 依照前述文件所述,設定並驗證圍網。
- 虛擬伺服器實體需要滿足 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(讀取啟用)
在執行次要實例的節點上,執行下列指令以變更操作模式。
- 將叢集設定為維護模式。
pcs property set maintenance-mode=true
- 停止次要 SAP HANA 範例。
sudo -i -u ${sid}adm -- \ HDB stop
- 變更系統複製作業模式。
sudo -i -u ${sid}adm -- \ hdbnsutil -sr_changeOperationMode --mode=logreplay_readaccess
- 啟動第二個 SAP HANA 實例。
sudo -i -u ${sid}adm -- \ HDB start
- 從維護模式移除群集。
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)
使用基於提示的語句路由檢查存取
使用基於提示的語句路由,驗證與次要實例的連線。
-
在沒有 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)
-
使用與 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