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(已启用读取功能)系统复制。 群集使用 IBM® Power® Virtual Server 中的虚拟服务器实例作为群集节点。

主动/主动(启用读取) 配置中,SAP HANA 系统复制允许读取辅助系统上的数据库内容。

本信息面向计划在 Power Virtual Server 上高可用性部署 SAP HANA 的架构师和专家。

准备工作

查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。

先决条件

  • Power Virtual Server 中的两个虚拟服务器实例上部署了 Red Hat High Availability 集群。
  • 虚拟服务器实例需要满足 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 扩展系统复制 中所述设置的扩展。

完成生产系统系统复制群集的设置后,再继续以下步骤。

将系统复制运行模式更改为主动/主动(读取启用)

在运行辅助实例的节点上,运行以下命令更改运行模式。

  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
    

为主动/主动(已启用读取)场景配置群集资源

使用以下信息配置主动/主动(已启用读取)方案所需的额外群集资源。

创建二级虚拟 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)

使用基于提示的语句路由检查访问情况

使用基于提示的语句路由验证与辅助实例的连接。

  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 主服务器上运行。

      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 二级运行。

    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