Translated message

A translation of this page exists in English.

使用 RHEL HA 附加组件自动化 SAP HANA 放大系统复制

已更新 -

备注:有关如何设置基于 RHEL HA 附加组件的集群,来在 RHEL 8 上管理 SAP HANA 扩展系统复制的指南,请使用 RHEL 8 for SAP Solutions 产品文档中的文档版本:使用 RHEL HA 附加组件自动化 SAP HANA 扩展系统复制

备注:有关如何设置基于 RHEL HA 附加组件的集群,来在 RHEL 9 上管理 SAP HANA 扩展系统复制的指南,请使用 RHEL 9 for SAP Solutions 产品文档中的文档版本:使用 RHEL HA 附加组件自动化 SAP HANA 扩展系统复制

内容

1.概述

本文论述了如何在支持的 RHEL 版本上的 Pacemaker 集群的扩展中配置自动的 HANA 系统复制。

本文不包括为 SAP HANA 安装准备 RHEL 系统,也不包括 SAP HANA 安装流程。有关这些主题的详情,请参阅 SAP Note 2009879 - SAP HANA Guide for Red Hat Enterprise Linux (RHEL)

1.1.支持的场景

请参阅:RHEL 高可用性集群的支持策略 - 在集群中管理 SAP HANA

1.2.订阅和存储库

需要以下存储库:

RHEL 7.x
- RHEL 服务器:提供 RHEL 内核软件包
- RHEL HA 附加组件:提供 Pacemaker 框架
- RHEL for SAP HANA:为扩展中的 HANA 系统复制自动化提供资源代理

1.2.1.内部或通过云访问自带订阅

对于内部或通过红帽 云访问 自带订阅,要使用的订阅是 RHEL for SAP Solutions

RHEL 7.x:以下是 RHEL for SAP Solutions 7.6 启用的存储库的示例,内部或通过云访问:

# yum repolist
repo id                                                  repo name                                                                                                status
rhel-7-server-e4s-rpms/7Server/x86_64                    Red Hat Enterprise Linux 7 Server - Update Services for SAP Solutions (RPMs)                             18,929
rhel-ha-for-rhel-7-server-e4s-rpms/7Server/x86_64        Red Hat Enterprise Linux High Availability (for RHEL 7 Server) Update Services for SAP Solutions (RPMs)     437
rhel-sap-hana-for-rhel-7-server-e4s-rpms/7Server/x86_64  RHEL for SAP HANA (for RHEL 7 Server) Update Services for SAP Solutions (RPMs)                               38

1.2.2.通过 RHUI 在公有云上按需提供

对于公有云上按需镜像的部署,软件包在 Red Hat Enterprise Linux for SAP with High Availability 和 Update Services 中提供,一个 RHEL for SAP Solutions 的变体,为公有云自定义的,可通过 RHUI 提供。

以下是在具有RHEL for SAP with High Availability 和 Update Services 7.5 的系统上启用的存储库的示例。要在扩展中配置自动的 HANA 系统复制,以下存储库必须存在:

# yum repolist
repo id                                                        repo name                                                                  status
rhui-rhel-7-server-rhui-eus-rpms/7.5/x86_64                   Red Hat Enterprise Linux 7 Server - Extended Update Support (RPMs) from RH 21,199
rhui-rhel-ha-for-rhel-7-server-eus-rhui-rpms/7.5/x86_64       Red Hat Enterprise Linux High Availability from RHUI (for RHEL 7 Server) -    501
rhui-rhel-sap-hana-for-rhel-7-server-eus-rhui-rpms/7.5/x86_64 RHEL for SAP HANA (for RHEL 7 Server) Extended Update Support (RPMs) from      43

2.SAP HANA 系统复制

以下示例演示了如何在 2 个运行 SAP HANA 的节点之间设置系统复制。

示例中使用的配置:

SID:                   RH2
Instance Number:       02
node1 FQDN:            node1.example.com
node2 FQDN:            node2.example.com
node1 HANA site name:  DC1
node2 HANA site name:  DC2
SAP HANA 'SYSTEM' user password: <HANA_SYSTEM_PASSWORD>
SAP HANA administrative user:    rh2adm

确保两个系统都可以解析这两个系统的 FQDN,而无问题。要确保在没有 DNS 的情况下可以解析 FQDN,您可以将其放在 /etc/hosts 中,如下例所示。

# /etc/hosts
192.168.0.11 node1.example.com node1
192.168.0.12 node2.example.com node2

要使系统复制可以工作,SAP HANA log_mode 变量必须设置为 normal。这可以在两个节点上使用以下命令,以 HANA 系统用户身份进行验证。

[rh2adm]# hdbsql -u system -p <HANA_SYSTEM_PASSWORD> -i 02 "select value from "SYS"."M_INIFILE_CONTENTS" where key='log_mode'"
VALUE "normal"
1 row selected

请注意,主和辅助节点的后续配置仅在设置过程中使用。角色(主/辅助)可能会根据集群配置,在集群操作过程中改变。

许多配置步骤是从系统上 SAP HANA 管理用户执行的,用户的名称是在安装过程中选择的。在示例中,我们将使用 rh2adm ,因为我们使用 SID RH2。要成为 SAP HANA 管理用户,您可以使用以下命令:

[root]# sudo -i -u rh2adm
[rh2adm]#

2.1.配置 HANA 主节点

只有在执行了初始备份后,SAP HANA 系统复制才能工作。以下命令将在 /tmp/foo 目录中创建一个初始备份。请注意,备份的大小取决于数据库大小,可能需要一些时间才能完成。将要存放备份的目录必须可被 SAP HANA 管理用户写。

a)在单一容器系统上,可以使用以下命令进行备份:

[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "BACKUP DATA USING FILE ('/tmp/foo')"
0 rows affected (overall time xx.xxx sec; server time xx.xxx sec)

b)在多个容器系统(MDC)上,SYSTEMDB 和所有租户数据库需要备份:

以下示例是关于 SYSTEMDB 的备份。请参阅 SAP 文档来了解如何备份租户数据库。

[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> -d SYSTEMDB "BACKUP DATA USING FILE ('/tmp/foo')"
0 rows affected (overall time xx.xxx sec; server time xx.xxx sec)
[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> -d SYSTEMDB "BACKUP DATA FOR RH2 USING FILE ('/tmp/foo-RH2')"
0 rows affected (overall time xx.xxx sec; server time xx.xxx sec)

在初始备份后,使用以下命令初始化复制。

[rh2adm]# hdbnsutil -sr_enable --name=DC1
checking for active nameserver ...
nameserver is active, proceeding ...
successfully enabled system as system replication source site
done.

验证初始化是否显示当前节点为 'primary',并且 SAP HANA 正在其上运行。

[rh2adm]# hdbnsutil -sr_state
checking for active or inactive nameserver ...
System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~
mode: primary
site id: 1
site name: DC1
Host Mappings:

2.2.配置 HANA 辅助节点

辅助节点需要注册到现在运行的主节点。在使用以下命令之前,辅助节点上的 SAP HANA 必须关闭。

[rh2adm]# HDB stop

(仅限 SAP HANA2.0)将 SAP HANA 系统 PKI SSFS_RH2.KEYSSFS_RH2.DAT 文件从主节点复制到辅助节点。

[rh2adm]# scp root@node1:/usr/sap/RH2/SYS/global/security/rsecssfs/key/SSFS_RH2.KEY /usr/sap/RH2/SYS/global/security/rsecssfs/key/SSFS_RH2.KEY
[rh2adm]# scp root@node1:/usr/sap/RH2/SYS/global/security/rsecssfs/data/SSFS_RH2.DAT /usr/sap/RH2/SYS/global/security/rsecssfs/data/SSFS_RH2.DAT

要注册辅助节点,请使用以下命令。

[rh2adm]# hdbnsutil -sr_register --remoteHost=node1 --remoteInstance=02 --replicationMode=syncmem --name=DC2
adding site ...
checking for inactive nameserver ...
nameserver node2:30201 not responding.
collecting information ...
updating local ini files ...
done.

在辅助节点上启动 SAP HANA。

[rh2adm]# HDB start

验证辅助节点是否正在运行,且 'mode' 是否为 syncmem。输出应类似以下输出。

[rh2adm]# hdbnsutil -sr_state
checking for active or inactive nameserver ...

System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~
mode: syncmem
site id: 2
site name: DC2
active primary site: 1

Host Mappings:
~~~~~~~~~~~~~~
node2 -> [DC1] node1
node2 -> [DC2] node2

2.3.测试 SAP HANA 系统复制

要手动测试 SAP HANA 系统复制设置,您可以按照以下 SAP 文档中描述的流程操作:

2.4.检查 SAP HANA 系统复制状态

要检查 SAP HANA System Replication 的当前状态,您可以以 SAP HANA 管理用户身份在当前主 SAP HANA 节点上执行以下命令。

single_container 系统上:

[rh2adm]# python /usr/sap/RH2/HDB02/exe/python_support/systemReplicationStatus.py

| 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 |
| ----- | ----- | ------------ | --------- | ------- | --------- | --------- | --------- | --------- | --------- | ------------- | ----------- | ----------- | -------------- |
| node1 | 30201 | nameserver   |         1 |       1 | DC1       | node2     |     30201 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |
| node1 | 30207 | xsengine     |         2 |       1 | DC1       | node2     |     30207 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |
| node1 | 30203 | indexserver  |         3 |       1 | DC1       | node2     |     30203 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |

status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1

multiple_containers 系统(MDC)上:

[rh2adm]# python /usr/sap/RH2/HDB02/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 | node1 | 30201 | nameserver   |         1 |       1 | DC1       | node2     |     30201 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |
| RH2      | node1 | 30207 | xsengine     |         2 |       1 | DC1       | node2     |     30207 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |
| RH2      | node1 | 30203 | indexserver  |         3 |       1 | DC1       | node2     |     30203 |         2 | DC2       | YES           | SYNCMEM     | ACTIVE      |                |

status system replication site "2": ACTIVE
overall system replication status: ACTIVE

Local System Replication State
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mode: PRIMARY
site id: 1
site name: DC1

3.在 SAP HANA 中为集群资源代理配置监控帐户(SAP HANA 1.0 SPS12 及更早版本)

不再需要从 SAP HANA 2.0 SPS0 监控帐户开始
具有 CATALOG READMONITOR ADMIN 特权的技术用户必须在 SAP HANA 中存在,以便资源代理能够对系统复制状态运行查询。以下示例演示了如何创建这样的用户,为其分配正确的权限,并为此用户禁用密码过期。

monitoring user username: rhelhasync
monitoring user password: <MONITORING_USER_PASSWORD>

3.1.创建监控用户

当 SAP HANA 系统复制处于活跃状态时,只有主系统可以访问数据库。访问辅助系统将失败。

在主系统上,运行以下命令来创建监控用户。

[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "create user rhelhasync password \"<MONITORING_USER_PASSWORD>\""
[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "grant CATALOG READ to rhelhasync"
[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "grant MONITOR ADMIN to rhelhasync"
[rh2adm]# hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "ALTER USER rhelhasync DISABLE PASSWORD LIFETIME"

3.2.在所有节点上存储监控用户凭证

SAP HANA userkey 允许 OS 级别上的"root"用户通过监控用户访问 SAP HANA,而无需密码。资源代理需要这一点,以便它们可以对 HANA 系统复制状态运行查询。

[root]# /usr/sap/RH2/HDB02/exe/hdbuserstore SET SAPHANARH2SR localhost:30215 rhelhasync "<MONITORING_USER_PASSWORD>"

要验证 userkey 是否已在 root 的 userstore 中正确创建了,您可以在每个节点上运行 hdbuserstore list 命令,并检查监控帐户是否在输出中存在,如下所示:

[root]# /usr/sap/RH2/HDB02/exe/hdbuserstore list

DATA FILE      :  /root/.hdb/node1/SSFS_HDB.DAT
KEY FILE       :  /root/.hdb/node1/SSFS_HDB.KEY

KEY SAPHANARH2SR
  ENV : localhost:30215
  USER: rhelhasync

另外,请通过在 SAP HANA SR 设置的主节点上运行以下命令,来验证是否可以使用 SAPHANASR userkey ,以 root 用户身份运行 hdbsql 命令,而不提示输入密码:

[root]# /usr/sap/RH2/HDB02/exe/hdbsql -U SAPHANARH2SR -i 02 "select distinct REPLICATION_STATUS from SYS.M_SERVICE_REPLICATION"
REPLICATION_STATUS
"ACTIVE"
1 row selected

如果您收到有关密码问题的错误消息,或者提示您输入密码,请使用 hdbsql 命令或 HANA Studio 验证上面使用 hdbsql 命令创建的用户的密码没有被配置为 'to be changed on first login',或者密码尚未过期。您可以使用以下命令。
(注:确保使用大写的监控用户的名称)

[root]# /usr/sap/RH2/HDB02/exe/hdbsql -i 02 -u system -p <HANA_SYSTEM_PASSWORD> "select * from sys.users where USER_NAME='RHELHASYNC'"

USER_NAME,USER_ID,USER_MODE,EXTERNAL_IDENTITY,CREATOR,CREATE_TIME,VALID_FROM,VALID_UNTIL,LAST_SUCCESSFUL_CONNECT,LAST_INVALID_CONNECT_ATTEMPT,INVALID_CONNECT_A
TTEMPTS,ADMIN_GIVEN_PASSWORD,LAST_PASSWORD_CHANGE_TIME,PASSWORD_CHANGE_NEEDED,IS_PASSWORD_LIFETIME_CHECK_ENABLED,USER_DEACTIVATED,DEACTIVATION_TIME,IS_PASSWORD
_ENABLED,IS_KERBEROS_ENABLED,IS_SAML_ENABLED,IS_X509_ENABLED,IS_SAP_LOGON_TICKET_ENABLED,IS_SAP_ASSERTION_TICKET_ENABLED,IS_RESTRICTED,IS_CLIENT_CONNECT_ENABLE
D,HAS_REMOTE_USERS,PASSWORD_CHANGE_TIME
"RHELHASYNC",156529,"LOCAL",?,"SYSTEM","2017-05-12 15:10:49.971000000","2017-05-12 15:10:49.971000000",?,"2017-05-12 15:21:12.117000000",?,0,"TRUE","2017-05-12
 15:10:49.971000000","FALSE","FALSE","FALSE",?,"TRUE","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","TRUE","FALSE",?
1 row selected

4.在 pacemaker 集群中配置 SAP HANA

请参阅以下文档来首先建立一个 pacemaker 集群。请注意,集群必须符合文章 RHEL 高可用性集群的支持策略 - 隔离/STONITH 的通用要求

本指南假定以下事项工作正常:

  • Pacemaker 集群按照文档进行了配置,并有适当和正常的隔离
  • 在所有集群节点上禁用在引导时启动 SAP HANA ,因为启动和停止将由集群管理
  • SAP HANA 系统复制和使用 SAP 工具的接管在集群节点之间工作正常
  • 两个节点都已订阅了所需的通道:
    • RHEL 7:'high-availability' 和 'RHEL for SAP HANA'(https://access.redhat.com/solutions/2334521)通道

4.1.使用 RHEL HA 附加组件安装管理 SAP HANA 扩展系统复制所需的资源代理和其他组件

[root]# yum install resource-agents-sap-hana

:这将只安装建立此 HA 解决方案所需的资源代理和其他组件。对于红帽支持的完全可操作的设置,仍必须执行以下部分中记录的配置步骤。

4.2.启用 SAP HANA srConnectionChanged()钩子

如 SAP 的 实施 HA/DR 提供者 中所述,SAP HANA 的最新版本提供所谓的"钩子",允许 SAP HANA 为特定事件发送通知。srConnectionChanged() 钩子可用于改进集群检测 HANA 系统复制状态中发生变化时,需要集群采取行动的能力,并通过防止在应该避免的情况下触发意外接管来避免数据丢失/数据损坏。当使用 SAP HANA 2.0 SPS0 或更高版本,以及为支持 srConnectionChanged() 钩子提供组件的 resource-agents-sap-hana 版本时,需要在继续进行集群设置之前启用钩子。

4.2.1.验证是否安装了 resource-agents-sap-hana 软件包的版本,它提供启用 srConnectionChanged()钩子的组件

请验证是否安装了为 RHEL 版本提供启用 srConnectionChanged() 钩子所需组件的 resource-agents-sap-hana 软件包的正确版本,如以下文章中所述:srConnectionChanged ()钩子支持用于 SAP HANA 扩展系统复制的红帽高可用性解决方案吗?

4.2.2.在所有 SAP HANA 实例上激活 srConnectionChanged()钩子

注意 :需要为每个 SAP HANA 实例激活 srConnectionChanged() 钩子的步骤。

  1. 在两个节点上停止集群,并验证 HANA 实例是否已完全停止。

    [root]# pcs cluster stop --all
    
  2. 将钩子脚本安装到每个 HANA 实例的 /hana/shared/myHooks 目录中,并确保它在所有节点上有正确的所有权(将 rh2adm 替换为 HANA 实例的 admin 用户的用户名)。

    [root]# mkdir -p /hana/shared/myHooks
    [root]# cp /usr/share/SAPHanaSR/srHook/SAPHanaSR.py /hana/shared/myHooks
    [root]# chown -R rh2adm:sapsys /hana/shared/myHooks
    
  3. 更新每个节点上的 global.ini 文件,以使两个 HANA 实例都可以使用钩子脚本(例如,在文件 /hana/shared/RH2/global/hdb/custom/config/global.ini 中):

    [ha_dr_provider_SAPHanaSR]
    provider = SAPHanaSR
    path = /hana/shared/myHooks
    execution_order = 1
    
    [trace]
    ha_dr_saphanasr = info
    
  4. 在每个集群节点上,通过运行 sudo visudo -f /etc/sudoers.d/20-saphana 创建文件 /etc/sudoers.d/20-saphana,并添加以下内容,以允许钩子脚本在 srConnectionChanged() 钩子被调用时更新节点属性。
    rh2 替换为您的 HANA 安装的小写 SID,并将 DC1DC2 替换为您的 HANA 站点名称。

    Cmnd_Alias DC1_SOK   = /usr/sbin/crm_attribute -n hana_rh2_site_srHook_DC1 -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias DC1_SFAIL = /usr/sbin/crm_attribute -n hana_rh2_site_srHook_DC1 -v SFAIL -t crm_config -s SAPHanaSR
    Cmnd_Alias DC2_SOK   = /usr/sbin/crm_attribute -n hana_rh2_site_srHook_DC2 -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias DC2_SFAIL = /usr/sbin/crm_attribute -n hana_rh2_site_srHook_DC2 -v SFAIL -t crm_config -s SAPHanaSR
    rh2adm ALL=(ALL) NOPASSWD: DC1_SOK, DC1_SFAIL, DC2_SOK, DC2_SFAIL
    Defaults!DC1_SOK, DC1_SFAIL, DC2_SOK, DC2_SFAIL !requiretty
    

    有关为什么需要 Defaults 设置的更多信息,请参阅 管理 SAP HANA 系统复制的 Pacemaker 集群中的 srHook 属性被设置为 SFAIL,即使复制处于健康状态

  5. 手动启动这两个 HANA 实例,而不启动集群。

  6. 验证钩子脚本是否按预期工作。执行一些操作来触发钩子,如停止 HANA 实例。然后,使用如下方法检查钩子是否记录了任何内容。

    [rh2adm]# cdtrace
    [rh2adm]# awk '/ha_dr_SAPHanaSR.*crm_attribute/ { printf "%s %s %s %s\n",$2,$3,$5,$16 }' nameserver_*
    2018-05-04 12:34:04.476445 ha_dr_SAPHanaSR SFAIL
    2018-05-04 12:53:06.316973 ha_dr_SAPHanaSR SOK
    [rh2adm]# grep ha_dr_ *
    

    备注:如需更多信息,请参阅 SAP 文档 安装和配置 HA/DR 提供者脚本

  7. 验证了钩子的功能后,可以再次启动集群。

    [root]# pcs cluster start --all
    

4.3.配置常规集群属性

为了避免在初始测试和后期生产过程中资源的不必要故障转移,请为 resource-stickiness 和 migration-threshold 参数设置以下默认值:请注意,默认值不适用于使用自己的定义值覆盖它们的资源。

[root]# pcs resource defaults resource-stickiness=1000
[root]# pcs resource defaults migration-threshold=5000

备注
1.在集群的一个节点上运行上述命令就足够了。
2.本文档的早期版本推荐为集群设置的初始测试设置这些默认值,但在生产后删除它们。由于客户反馈和其他测试,已确定对生产环境集群设置使用这些默认设置也是有益的。
3.命令 resource-stickiness=1000 将鼓励资源在其所在的位置运行,而 migration-threshold=5000 将导致资源在 5000 次失败后移至新节点。5000 通常足以防止资源过早故障转移到另一个节点。这也可确保资源故障切换时间保持在可控制的限制内。

本指南的之前版本建议将 no-quorum-policy 设置为 ignore,但当前还不支持。在默认配置中,集群的 no-quorum policy 属性不需要修改。要实现此选项提供的行为,请参阅 在 RHEL 6 或 7 中丢失仲裁后,是否可以配置 pacemaker ,来继续管理资源?

4.4.创建克隆的 SAPHanaTopology 资源

SAPHanaTopology 资源收集每个节点上 SAP HANA 系统复制的状态和配置。另外,它启动并监控本地 SAP HostAgent,这是启动、停止和监控 SAP HANA 实例所需要的。它有以下属性:

属性名称 必需? 默认值 描述
SID null SAP HANA 安装的 SAP System Identifier (SID)(对于所有节点都必须一样)。例如:RH2
InstanceNumber null SAP HANA 安装的实例号(对于所有节点必须一样)。例如:02

以下是创建 SAPHanaTopology 克隆资源的一个命令示例。

注意 :下面显示的资源操作的超时只是示例,可能需要根据实际的 SAP HANA 设置(例如,大型 HANA 数据库可能需要更长的时间才能启动,因此可能需要增加启动超时)。

[root]# pcs resource create SAPHanaTopology_RH2_02 SAPHanaTopology SID=RH2 InstanceNumber=02 \
op start timeout=600 \
op stop timeout=300 \
op monitor interval=10 timeout=600 \
clone clone-max=2 clone-node-max=1 interleave=true

生成的资源应类似如下:

[root]# pcs resource show SAPHanaTopology_RH2_02-clone

 Clone: SAPHanaTopology_RH2_02-clone
  Meta Attrs: clone-max=2 clone-node-max=1 interleave=true
  Resource: SAPHanaTopology_RH2_02 (class=ocf provider=heartbeat type=SAPHanaTopology)
   Attributes: SID=RH2 InstanceNumber=02
   Operations: start interval=0s timeout=600 (SAPHanaTopology_RH2_02-start-interval-0s)
               stop interval=0s timeout=300 (SAPHanaTopology_RH2_02-stop-interval-0s)
               monitor interval=10 timeout=600 (SAPHanaTopology_RH2_02-monitor-interval-10s)

启动资源后,您将看到以节点属性形式存储的信息,可通过命令 crm_mon -A1 进行查看。以下是在仅启动 SAPHanaTopology 时,属性看起来是什么样子的示例。

[root]# crm_mon -A1
...
Node Attributes:
* Node node1:
    + hana_rh2_remoteHost               : node2
    + hana_rh2_roles                    : 1:P:master1::worker:
    + hana_rh2_site                     : DC1
    + hana_rh2_srmode                   : syncmem
    + hana_rh2_vhost                    : node1
* Node node2:
    + hana_rh2_remoteHost               : node1
    + hana_rh2_roles                    : 1:S:master1::worker:
    + hana_rh2_site                     : DC2
    + hana_rh2_srmode                   : syncmem
    + hana_rh2_vhost                    : node2
...

4.5.创建主/从 SAPHana 资源

SAPHana 资源代理管理 HANA 系统复制中配置的两个 SAP HANA 实例(数据库)。

属性名称 必需? 默认值 描述
SID null SAP HANA 安装的 SAP System Identifier (SID)(对于所有节点都必须一样)。例如:RH2
InstanceNumber null SAP HANA 安装的实例号(对于所有节点必须一样)。例如:02
PREFER_SITE_TAKEOVER null 资源代理应希望切换到辅助实例,而不是在本地重启主实例?true :更倾向于接管到辅助站点;false: : : 更倾向于在本地重启;never:在任何情况下都不要接管到另一个节点。
AUTOMATED_REGISTER false 如果发生了接管事件,并且 DUPLICATE_PRIMARY_TIMEOUT 已过期,则之前的主实例应被注册为辅助实例?("false": 不, 需要手动干预; "true": 是的,之前的主实例将被资源代理注册为辅助实例)[1]
DUPLICATE_PRIMARY_TIMEOUT 7200 如果发生了 dual-primary 情况,则在两个主时间戳之间需要时间差(以秒为单位)。如果时间差小于时间间隔,集群将把一个或多个实例保持在"WAITING"状态。这是为了让系统管理员有机会对接管做出反应。在传递了时间差后,如果 AUTOMATED_REGISTER 被设为 true,则失败的前主实例将注册为辅助实例。在注册新主实例后,前主实例上的所有数据都将被系统复制覆盖。

[1] - 作为测试和 PoC 的良好实践,我们建议让 AUTOMATED_REGISTER 保持其默认值 (AUTOMATED_REGISTER_REGISTER="false"),以防止失败的主实例自动注册为辅助实例。测试后,如果故障转移场景按预期工作,特别是对于生产环境中,那么我们建议设置 AUTOMATED_REGISTER="true",以便在接管后,系统复制将及时恢复,以避免中断。当 AUTOMATED_REGISTER="false" 时,如果在主节点上失败,调查后,您需要手动将其注册为辅助 HANA 系统复制节点。

注意
- 以下显示的资源操作的超时只是示例,可能需要根据实际的 SAP HANA 设置(例如,大型 HANA 数据库可能需要更长时间才能启动,因此可能需要增加启动超时)进行调整。

4.5.1.RHEL 7.x

以下是一个创建 SAPHana 主/从资源的命令的示例。

[root]# pcs resource create SAPHana_RH2_02 SAPHana SID=RH2 InstanceNumber=02 \
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 meta notify=true clone-max=2 clone-node-max=1 interleave=true

RHEL 7.x 在运行 pcs-0.9.158-6.el7 或更高版本时使用以下命令避免弃用警告。有关更改的更多信息,在 pcs resource create 命令中 master--master 选项之间的区别是什么? 中进行了解释。

[root]# pcs resource create SAPHana_RH2_02 SAPHana SID=RH2 InstanceNumber=02 \
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

生成的资源应类似如下:

[root]# pcs resource show SAPHana_RH2_02-master
     Master: SAPHana_RH2_02-master
      Meta Attrs: clone-max=2 clone-node-max=1 interleave=true notify=true
      Resource: SAPHana_RH2_02 (class=ocf provider=heartbeat type=SAPHana)
       Attributes: AUTOMATED_REGISTER=false DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=02 PREFER_SITE_TAKEOVER=true SID=RH2
       Operations: demote interval=0s timeout=3600 (SAPHana_RH2_02-demote-interval-0s)
                   methods interval=0s timeout=5 (SAPHana_RH2_02-methods-interval-0s)
                   monitor interval=61 role=Slave timeout=700 (SAPHana_RH2_02-monitor-interval-61)
                   monitor interval=59 role=Master timeout=700 (SAPHana_RH2_02-monitor-interval-59)
                   promote interval=0s timeout=3600 (SAPHana_RH2_02-promote-interval-0s)
                   start interval=0s timeout=3600 (SAPHana_RH2_02-start-interval-0s)
                   stop interval=0s timeout=3600 (SAPHana_RH2_02-stop-interval-0s)

资源启动后,它将添加描述节点上 SAP HANA 数据库当前状态的其它节点属性,如下所示。

[root]# crm_mon -A1
...
Node Attributes:
* Node node1:
    + hana_rh2_clone_state              : PROMOTED
    + hana_rh2_op_mode                  : delta_datashipping
    + hana_rh2_remoteHost               : node2
    + hana_rh2_roles                    : 4:S:master1:master:worker:master
    + hana_rh2_site                     : DC1
    + hana_rh2_sync_state               : PRIM
    + hana_rh2_srmode                   : syncmem
    + hana_rh2_vhost                    : node1
    + lpa_rh2_lpt                       : 1495204085
    + master-hana                       : 150
* Node node2:
    + hana_rh2_clone_state              : DEMOTED
    + hana_rh2_remoteHost               : node1
    + hana_rh2_roles                    : 4:P:master1:master:worker:master
    + hana_rh2_site                     : DC2
    + hana_rh2_srmode                   : syncmem
    + hana_rh2_sync_state               : SOK
    + hana_rh2_vhost                    : node2
    + lpa_rh2_lpt                       : 30
    + master-hana                       : 100
...

4.6.创建虚拟 IP 地址资源

集群将包含虚拟 IP 地址,以访问 SAP HANA 的主实例。以下是创建 IP 为 192.168.0.15IPaddr2 资源的命令的示例。

[root]# pcs resource create vip_RH2_02 IPaddr2 ip="192.168.0.15"

生成的资源应类似如下:

[root]# pcs resource show vip_RH2_02

 Resource: vip_RH2_02 (class=ocf provider=heartbeat type=IPaddr2)
  Attributes: ip=192.168.0.15
  Operations: start interval=0s timeout=20s (vip_RH2_02-start-interval-0s)
              stop interval=0s timeout=20s (vip_RH2_02-stop-interval-0s)
              monitor interval=10s timeout=20s (vip_RH2_02-monitor-interval-10s)

4.7.创建约束

为了进行正确的操作,我们需要确保在启动 SAPHana 资源之前启动 SAPHanaTopology 资源,并且虚拟 IP 地址也在运行 SAPHana 的主资源的节点上存在。要达到此目的,需要创建以下 2 个约束。

4.7.1 RHEL 7.x

4.7.1.1 约束 - 在 SAPHana 之前启动 SAPHanaTopology

以下示例命令将创建强制这些资源启动顺序的约束。这里有 2 个值得提及的事情:

  • symmetrical=false 属性定义我们只关注资源的 启动,不需要以相反的顺序停止它们。
  • 两个资源(SAPHanaSAPHanaTopology)都有属性 interleave=true,它允许在节点上并行启动这些资源。这允许,不管什么顺序,我们都不会等待所有节点启动 SAPHanaTopology,但只要 SAPHanaTopology 在任何节点上运行,我们就可以启动 SAPHana 资源。

创建约束的命令:

[root]# pcs constraint order SAPHanaTopology_RH2_02-clone then SAPHana_RH2_02-master symmetrical=false

生成的约束应类似以下示例。

[root]# pcs constraint
...
Ordering Constraints:
  start SAPHanaTopology_RH2_02-clone then start SAPHana_RH2_02-master (kind:Mandatory) (non-symmetrical)
...
4.7.1.2 约束 - 将 IPaddr2 资源与 SAPHana 资源共存

以下是一个示例命令,它将 IPaddr2 资源与被提升为主资源的 SAPHana 资源共存。

[root]# pcs constraint colocation add vip_RH2_02 with master SAPHana_RH2_02-master 2000

请注意,约束使用的是 2000 分,而不是默认的 INFINITY。这允许在 SAPHana 资源中没有提升的主资源时,IPaddr2 资源被集群关闭,因此仍然可以将此地址与 SAP 管理控制台或 SAP LVM 等工具一起使用,这些工具可以使用这个地址来查询有关 SAP 实例的状态信息。

生成的约束应类似如下示例。

[root]# pcs constraint
...
Colocation Constraints:
  vip_RH2_02 with SAPHana_RH2_02-master (score:2000) (rsc-role:Started) (with-rsc-role:Master)
...

4.8.为 Active/Active (Read-Enabled) HANA 系统复制设置添加辅助虚拟 IP 地址

从 SAP HANA 2.0 SPS1 开始,SAP 为 SAP HANA 系统复制启用 'Active/Active (Read Enabled)' 设置,其中 SAP HANA 系统复制的辅助系统可以主动用于读密集型工作负载。为了能够支持此类设置,需要辅助虚拟 IP 地址,其使客户端能够访问辅助 SAP HANA 数据库。为确保在发生接管后辅助复制站点仍然可以被访问,集群需要将虚拟 IP 地址与主/从 SAPHana 资源一起移动。

请注意,当为启用了读的辅助配置建立 HSR 时,operationMode 应设置为 logreplay_readaccess

4.8.1.创建管理辅助虚拟 IP 地址的资源

[root]# pcs resource create vip2_RH2_02 IPaddr2 ip="192.168.1.11"

请根据集群运行的平台,使用适当的资源代理来管理 IP 地址。

4.8.2.创建位置约束,以确保辅助虚拟 IP 地址被放在正确的集群节点上

[root]# pcs constraint location vip2_RH2_02 rule score=INFINITY hana_rh2_sync_state eq SOK and hana_rh2_roles eq 4:S:master1:master:worker:master
[root]# pcs constraint location vip2_RH2_02 rule score=2000 hana_rh2_sync_state eq PRIM and hana_rh2_roles eq 4:P:master1:master:worker:master

这些位置约束确保辅助虚拟 IP 资源具有以下行为:

  • 如果有一个 Master/PRIMARY 节点和一个 Slave/SECONDARY 节点,两者都可用,且 HANA 系统复制为 "SOK",则辅助虚拟 IP 将在 Slave/SECONDARY 节点上运行。

  • 如果 Slave/SECONDARY 节点不可用,或者 HANA System Replication 不是 "SOK",则辅助虚拟 IP 将在 Master/PRIMARY 节点上运行。当 Slave/SECONDARY 将为可用,且 HANA System Replication 将再次为 "SOK" 时,辅助虚拟 IP 将移回到 Slave/SECONDARY 节点上。

  • 如果 Master/PRIMARY 节点不可用,或者上面运行的 HANA 实例有问题时,当 Slave/SECONDARY 将接管 Master/PRIMARY 角色时,辅助虚拟 IP 将继续在同一节点上运行,直到其他节点将接管 Slave/SECONDARY 角色,且 HANA 系统复制将是"SOK"。

这最大化了辅助虚拟 IP 资源将被分配给运行健康 SAP HANA 实例的节点的时间。

4.9.测试将 SAPHana 资源的手动移动到另一节点(SAP Hana 被集群接管)

测试将 SAPHana 资源从一个节点移动到另一个节点

4.9.1.在 RHEL 7 上移动 SAPHana 资源

在 RHEL 7 上使用以下命令。请注意,由于 SAPHana 资源内部工作的方式,运行以下命令时 应使用选项 --master

[root]# pcs resource move SAPHana_RH2_02-master

使用每个 pcs resource move 命令调用,集群创建导致资源移动的位置约束。在验证了 HANA 系统复制接管已完成后,必须删除这些约束,以便允许集群可以再次管理前主 HANA 实例。要删除 move 创建的约束,请运行以下命令。

[root]# pcs resource clear SAPHana_RH2_02-master

Comments