在 Red Hat Enterprise Linux High Availability Add-On 集群中配置 SAP HANA 活动/活动(已启用读取)系统复制
以下信息介绍了 Red Hat Enterprise Linux (RHEL) High Availability Add-On 集群的配置,用于管理 SAP HANA Active-Active(已启用读取功能)系统复制。 群集使用 IBM® Power® Virtual Server 中的虚拟服务器实例作为群集节点。
在主动/主动(启用读取) 配置中,SAP HANA 系统复制允许读取辅助系统上的数据库内容。
本信息面向计划在 Power Virtual Server 上高可用性部署 SAP HANA 的架构师和专家。
准备工作
查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。
先决条件
- Power Virtual Server 中的两个虚拟服务器实例上部署了 Red Hat High Availability 集群。
- 按照 实施 Red Hat Enterprise Linux 高可用性附加组件 集群安装并设置 RHEL HA 附加组件集群。
- 按照前述文件中的描述配置和验证围栏。
- 虚拟服务器实例需要满足 SAP HANA 范围内系统的硬件和资源要求。 请遵循 规划部署 文件中的指导原则。
- 虚拟服务器实例的主机名必须符合 SAP HANA 的要求。
- SAP HANA 安装在两个虚拟服务器实例上,并配置了 系统复制。SAP HANA SAP HANA 的安装和 SAP HANA 系统复制的设置并非 Power Virtual Server 环境所特有,您需要遵循标准程序。
设置“活动/活动”(已启用读取功能)方案
主动/主动(已启用读取)系统复制方案是 Red Hat Enterprise Linux High Availability Add-On 集群中配置 SAP HANA 扩展系统复制 中所述设置的扩展。
完成生产系统系统复制群集的设置后,再继续以下步骤。
将系统复制运行模式更改为主动/主动(读取启用)
在运行辅助实例的节点上,运行以下命令更改运行模式。
- 将群集置于维护模式。
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
为主动/主动(已启用读取)场景配置群集资源
使用以下信息配置主动/主动(已启用读取)方案所需的额外群集资源。
创建二级虚拟 IP 地址资源
查看“保留虚拟 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 主节点和 SAP HANA 次节点都可用,且 SAP HANA 系统复制状态为
SOK
,则次虚拟 IP 地址会分配给 SAP HANA 次节点处于活动状态的节点。 - 如果 SAP HANA 次节点不可用或 SAP HANA 系统复制状态不是
SOK
,那么次虚拟 IP 将分配给 SAP HANA 主节点处于活动状态的节点。 当 SAP HANA 次要节点可用且 SAP HANA 系统复制状态再次变为SOK
时,第二个虚拟 IP 地址会移回 SAP HANA 次要节点处于活动状态的节点。 - 如果 SAP HANA 主节点或运行它的节点不可用,那么 SAP HANA 次节点将接替主节点的角色。 第二个虚拟 IP 保留在节点上,直到另一个节点变成 SAP HANA 次要角色,SAP HANA 系统复制状态再次
SOK
。
这种行为最大限度地延长了将辅助虚拟 IP 资源分配给运行健康 SAP HANA 实例的节点的时间。
主动/主动(已启用读取)方案的群集配置已完成。
检查集群配置
在群集节点上,运行以下命令检查群集资源的状态。
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 二级运行。
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 主服务器上运行。
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 二级运行。
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 附加集群,用于 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 初级程序崩溃。
在 NODE1 上,运行以下命令。
sudo -i -u ${sid}adm -- HDB kill-9
Test1- 预期行为
- SAP HANA NODE1 上的主实例崩溃。
- 群集检测到已停止的主 SAP HANA 数据库,并将资源标记为
failed
。 - 群集将 NODE2 上的辅助 SAP HANA 数据库升级为新的主数据库。
- 群集释放 NODE1 上的虚拟 IP 地址,并在 NODE2 上的新主 IP 地址上获取该地址。
- 接管后,辅助 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 附加集群,用于 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
一起配置的,因此当 NODE2 重新加入集群且前主服务器重新注册为辅助服务器时,SAP HANA 会重新启动。 当辅助系统达到同步状态 (SOK
) 时,辅助虚拟 IP 地址将移至 NODE2。
Test3- 测试辅助数据库实例的故障
使用以下信息测试辅助数据库实例的故障。
Test3- 说明
模拟二级 SAP HANA 数据库崩溃。
Test3- 先决条件
- 一个功能性双节点 RHEL HA 附加集群,用于 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 附加集群,用于 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 主节点移动到其他节点。
在群集节点上运行以下命令。
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