使用 sap-hana-ha
资源代理在 Red Hat Enterprise Linux High Availability Add-On 集群中配置 SAP HANA 扩展系统复制
以下信息介绍了 Red Hat Enterprise Linux (RHEL) High Availability Add-On 集群的配置,用于管理 SAP HANA Scale-Up System Replication。 群集使用 IBM® Power® Virtual Server 中的虚拟服务器实例作为群集节点。
本说明介绍了如何在 RHEL HA 附加组件群集上,在性能优化的情况下为单个数据库部署自动复制 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 安装和系统复制设置并非 Power Virtual Server 环境所特有。 遵循标准程序。
- 需要有效的 RHEL for SAP Applications 或 RHEL for SAP Solutions 订阅,才能启用安装 SAP HANA 和高可用性资源代理所需的资源库。
在 IBM 上的 RHEL HA Add-On 集群中配置 SAP HANA 系统复制 Power Virtual Server
这些说明基于 Red Hat 产品文档和 IBM Power Virtual Server 参考资料中为 SAP 应用程序实现高可用性所 列出的文章。
准备环境变量
为简化设置,请为两个节点上的根用户定义以下环境变量。 这些变量将在本程序后面的操作系统命令中使用。
在两个节点上设置以下环境变量。
# General settings
export SID=<SID> # SAP HANA System ID (uppercase)
export sid=<sid> # SAP HANA System ID (lowercase)
export INSTNO=<INSTNO> # SAP HANA instance number
# Cluster node 1
export NODE1=<HOSTNAME_1> # Virtual server instance hostname
export DC1="Site1" # HANA system replication site name
# Cluster node 2
export NODE2=<HOSTNAME_2> # Virtual server instance hostname
export DC2="Site2" # HANA system replication site name
# Single zone and Multizone region
export VIP=<IP address> # SAP HANA system replication cluster virtual IP address
# Multizone region only
export CLOUD_REGION=<CLOUD_REGION> # Multizone region name
export APIKEY="APIKEY or path to file" # API Key of the IBM Cloud IAM ServiceID for the resource agent
export API_TYPE="private or public" # Use private or public API endpoints
# resource agent powervs-move-ip only
export ROUTE_CRN1=<Route_CRN1> # CRN of the static route in Workspace_1 with destination VIP (powervs-move-ip only)
export ROUTE_CRN2=<Route_CRN2> # CRN of the static route in Workspace_2 with destination VIP (powervs-move-ip only)
export MON_API="false or true" # Use cloud api in monitor command (powervs-move-ip only)
# resource agent powervs-subnet only
export IBMCLOUD_CRN_1=<IBMCLOUD_CRN_1> # Workspace 1 CRN (powervs-subnet only)
export IBMCLOUD_CRN_2=<IBMCLOUD_CRN_2> # Workspace 2 CRN (powervs-subnet only)
export POWERVSI_1=<POWERVSI_1> # Virtual server instance 1 id (powervs-subnet only)
export POWERVSI_2=<POWERVSI_2> # Virtual server instance 2 id (powervs-subnet only)
export SUBNET_NAME="vip-${sid}-net" # Name which is used to define the subnet in IBM Cloud (powervs-subnet only)
export CIDR="CIDR of subnet" # CIDR of the subnet containing the service IP address (powervs-subnet only)
export JUMBO="true or false" # Enable Jumbo frames (powervs-subnet only)
为单区实施设置额外的环境变量
查看 预订虚拟 IP 地址 并为 SAP HANA 系统复制群集预订虚拟 IP 地址。 将 VIP
环境变量设置为保留 IP 地址。
为多区区域实施设置额外的环境变量
按照 为配置高可用性群集收集参数 一节中的描述,设置 CLOUD_REGION
, APIKEY
, IBMCLOUD_CRN_?
, POWERVSI_?
变量。 将 API_TYPE
设置为 private
,以便通过专用端点与
IBM Cloud IAM 和 IBM Power Cloud API 通信。
为 powervs-subnet
资源代理准备变量:
SUBNET_NAME
指定子网的名称。CIDR
以无类别域间路由(CIDR) 格式定义子网:<IPv4_address>/number
.VIP
是虚拟 IP 地址,必须在定义的CIDR
范围内。- 将
JUMBO
设置为true
,以启用对子网中大 MTU 大小的支持。
子网 SUBNET_NAME
必须不存在,其 CIDR 范围不得与任一工作区中任何现有子网的 IP 范围重叠。
下面的导出命令示例展示了如何为多区 powervs-subnet
实现设置所需的环境变量。
export CLOUD_REGION="eu-de"
export IBMCLOUD_CRN_1="crn:v1:bluemix:public:power-iaas:eu-de-2:a/a1b2c3d4e5f60123456789a1b2c3d4e5:a1b2c3d4-0123-4567-89ab-a1b2c3d4e5f6::"
export IBMCLOUD_CRN_2="crn:v1:bluemix:public:power-iaas:eu-de-1:a/a1b2c3d4e5f60123456789a1b2c3d4e5:e5f6a1b2-cdef-0123-4567-a1b2c3d4e5f6::"
export POWERVSI_1="a1b2c3d4-0123-890a-f012-0123456789ab"
export POWERVSI_2="e5f6a1b2-4567-bcde-3456-cdef01234567"
export APIKEY="@/root/.apikey.json"
export API_TYPE="private"
export SUBNET_NAME="vip-mh1-net"
export CIDR="10.40.41.100/30"
export VIP="10.40.41.102"
export JUMBO="true"
安装 SAP HANA 资源代理
sap-hana-ha
软件包包括三个资源代理。
- SAPHanaTopology:收集 SAP HANA 系统复制在每个节点上的状态和配置。 它还会启动和监控本地 SAP HostAgent,这是启动、停止和监控 SAP HANA 实例所必需的。
- SAPHanaFilesystem (可选):检查对 SAP HANA 文件系统的访问。 如果 SAP HANA 主节点出现存储故障,该代理会对节点进行围栏,以实现更快的故障切换。
- SAPHanaController:管理 SAP HANA 实例,用于单主机(扩容)和多主机(扩容)部署。 如果 SAP HANA 主系统发生故障,该代理会触发对辅助系统的接管。
在两个节点上运行以下命令安装 sap-hana-ha
资源代理包。
dnf install -y sap-hana-ha
这里描述的设置需要 1.2.8-4 或更高版本的 sap-hana-ha package
。
启动 SAP HANA 系统
启动 SAP HANA 并验证系统复制是否激活。 详见 2.4。 检查 SAP HANA 系统复制状态.
在两个节点上运行以下命令启动 SAP HANA。
sudo -i -u ${sid}adm -- HDB start
sudo -i -u ${sid}adm -- <<EOT
hdbnsutil -sr_state
HDBSettings.sh systemReplicationStatus.py
EOT
配置基于 systemd
的 SAP HANA 启动框架
SAP HANA 启动框架默认与 RHEL 9 上的 systemd
集成,适用于 SAP HANA 2.0 SPS07 修订版 70 及更新版本。 应用额外的修改,以按照正确的顺序管理起搏器 systemd 服务和 SAP HANA 实例 systemd 服务。
在两个节点上运行以下命令,检查是否已启用 SAP HANA instance systemd 集成。
systemctl list-units --all SAP*
# systemctl list-units --all SAP*
UNIT LOAD ACTIVE SUB DESCRIPTION
SAPMH1_00.service loaded active running SAP Instance SAPMH1_00
SAP.slice loaded active active SAP Slice
如果命令输出中出现单位 SAP${SID}_${INSTNO}.service
,请在两个节点上完成以下步骤。
-
为
pacemaker
服务插入文件创建目录。mkdir /etc/systemd/system/pacemaker.service.d
-
创建
pacemaker
服务插件文件。cat >> /etc/systemd/system/pacemaker.service.d/HA.conf << EOT [Unit] Description=Pacemaker needs the SAP HANA instance service Wants=SAP${SID}_${INSTNO}.service After=SAP${SID}_${INSTNO}.service EOT
-
重新加载
systemctl
守护进程。systemctl daemon-reload
启用 SAP HANA 钩子脚本
SAP HANA 提供了在特定事件发生时发送通知的钩子。 有关详细信息,请参阅 实施 HA/DR 提供程序。
srConnectionChanged( ) 钩子有助于检测需要群集干预的 SAP HANA 系统复制状态变化。 其目的是通过避免意外接管来防止数据丢失或损坏。
SAP HANA indexserver
。 如果出现问题,SAP HANA 会尝试通过停止和重启进程来自动恢复。 要完成恢复,Linux 内核必须释放分配给进程的所有内存。 对于大型数据库,这种清理工作可能需要大量时间。 在此期间,SAP HANA 将继续运行并接受客户请求,这可能导致系统复制不同步。 如果在索引服务器完全重启和恢复之前发生另一个错误,数据一致性就会受到影响。 srServiceStateChanged( ) 钩子通过停止整个 SAP
HANA 实例来解决这种情况,从而实现更快、更安全的恢复。
为所有 SAP HANA 实例配置挂钩 HanaSR
sap-hana-ha 软件包包括 HanaSR.py
钩子脚本,它位于 /usr/share/sap-hana-ha
目录中。 在所有 SAP HANA 集群节点上配置此钩子。
在继续群集设置之前,请启用并测试 SAP HANA srConnectionChanged( ) 钩子。
-
更新每个 SAP HANA 节点上的
global.ini
文件,启用HanaSR
钩子脚本。在两个节点上运行以下命令。
sudo -i -u ${sid}adm -- <<EOT python \$DIR_INSTANCE/exe/python_support/setParameter.py \ -set SYSTEM/global.ini/ha_dr_provider_hanasr/provider=HanaSR \ -set SYSTEM/global.ini/ha_dr_provider_hanasr/path=/usr/share/sap-hana-ha/ \ -set SYSTEM/global.ini/ha_dr_provider_hanasr/execution_order=1 \ -set SYSTEM/global.ini/trace/ha_dr_hanasr=info EOT
-
验证更新后的
global.ini
文件。在两个节点上运行以下命令。
cat /hana/shared/${SID}/global/hdb/custom/config/global.ini
-
为 SAP HANA 操作系统的管理员 sidadm 配置 sudo 设置。
这些设置允许钩子脚本 srConnectionChanged( ) 更新节点属性。
在两个节点上运行以下命令,创建所需的 sudo 配置文件。
cat >> /etc/sudoers.d/20-saphana << EOT Cmnd_Alias DC1_SOK = /usr/sbin/crm_attribute -n hana_${sid}_site_srHook_${DC1} -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias DC1_SFAIL = /usr/sbin/crm_attribute -n hana_${sid}_site_srHook_${DC1} -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias DC2_SOK = /usr/sbin/crm_attribute -n hana_${sid}_site_srHook_${DC2} -v SOK -t crm_config -s SAPHanaSR Cmnd_Alias DC2_SFAIL = /usr/sbin/crm_attribute -n hana_${sid}_site_srHook_${DC2} -v SFAIL -t crm_config -s SAPHanaSR Cmnd_Alias FENCE_ME = /usr/bin/SAPHanaSR-hookHelper --sid=${SID} --case=fenceMe ${sid}adm ALL=(ALL) NOPASSWD: DC1_SOK, DC1_SFAIL, DC2_SOK, DC2_SFAIL, FENCE_ME Defaults!DC1_SOK, DC1_SFAIL, DC2_SOK, DC2_SFAIL, FENCE_ME !requiretty EOT
只有在使用参数
action_on_lost = fence
配置ChkSrv
钩子脚本时,才需要Cmnd_Alias FENCE_ME
。设置正确的所有权和权限,并使用
visudo
验证其语法。chown root:root /etc/sudoers.d/20-saphana
chmod 0440 /etc/sudoers.d/20-saphana
cat /etc/sudoers.d/20-saphana
visudo -c
纠正 visudo -c
命令报告的任何问题。
为所有 SAP HANA 实例配置 ChkSrv
钩子(可选)
sap-hana-ha 软件包包括 ChkSrv.py
钩子脚本,它位于 /usr/share/sap-hana-ha
目录中。 在所有 SAP HANA 集群节点上配置此钩子。
您可以配置挂钩 srServiceStateChanged( ),以便在 indexserver
进程失败时加速恢复。 此配置是可选的。
ChkSrv.py
脚本会停止整个 SAP HANA 实例,以便更快地恢复。 如果群集中启用了 automated failover
,且辅助节点处于健康状态,系统将启动接管操作。 如果无法进行故障转移,脚本会强制重启本地节点上的 SAP HANA 实例。
钩子脚本会分析实例事件,过滤事件细节,并根据过滤结果触发操作。 它将 SAP HANA indexserver
进程与作为实例关闭的一部分而停止的进程区分开来,前者是由系统停止并重新启动的。
钩子触发的操作取决于 action_on_lost
参数的配置。
- 忽略
- 此操作会将事件详情和相应的决策逻辑记录到文件中。
- 停止
- 通过使用
sapcontrol
命令,该操作可优雅地停止 SAP HANA 实例。 - 终止
- 该操作会触发
HDB kill-<signal>
命令,默认信号为 9。 信号可以配置。
停止和杀死操作都会停止 SAP HANA 实例,但杀死操作稍快一些。
- 防护
- 当检测到
indexserver
进程失效时,该操作会对群集节点进行围栏。 授予sudo
权限,允许 sidadm 用户运行/usr/bin/SAPHanaSR-hookHelper
脚本。
-
更新每个 SAP HANA 节点上的
global.ini
文件,启用钩子脚本。在两个节点上运行以下命令。
sudo -i -u ${sid}adm -- <<EOT python \$DIR_INSTANCE/exe/python_support/setParameter.py \ -set SYSTEM/global.ini/ha_dr_provider_chksrv/provider=ChkSrv \ -set SYSTEM/global.ini/ha_dr_provider_chksrv/path=/usr/share/sap-hana-ha/ \ -set SYSTEM/global.ini/ha_dr_provider_chksrv/execution_order=2 \ -set SYSTEM/global.ini/ha_dr_provider_chksrv/action_on_lost=stop \ -set SYSTEM/global.ini/trace/ha_dr_chksrv=info EOT
在本例中,
action_on_lost
参数设置为stop
;默认值为ignore
。 您可以选择配置stop_timeout
参数(默认值:20 秒)和kill_signal
参数(默认值:9)。
激活挂钩
-
重新载入挂钩配置。
在两个节点上运行以下命令激活钩子。
sudo -i -u ${sid}adm -- hdbnsutil -reloadHADRProviders
-
通过检查跟踪日志来验证钩子是否处于活动状态。
在两个节点上运行以下命令。
sudo -i -u ${sid}adm -- sh -c 'grep "ha_dr_provider" $DIR_INSTANCE/$VTHOSTNAME/trace/nameserver_* | cut -d" " -f2,3,6-'
样本输出:
2025-02-27 15:47:21.855038 HADRProviderManager.cpp(00087) : loading HA/DR Provider 'ChkSrv' from /usr/share/sap-hana-ha/ 2025-02-27 15:47:22.648229 HADRProviderManager.cpp(00087) : loading HA/DR Provider 'HanaSR' from /usr/share/sap-hana-ha/
配置一般群集属性
为防止在初始测试和后期制作阶段发生意外的资源故障切换,请为 resource-stickiness
和 migration-threshold
参数配置以下默认值。
这些默认值不适用于为这些参数定义自定义值的资源。
在 NODE1 上,运行以下命令。
pcs resource defaults update resource-stickiness=1000
pcs resource defaults update migration-threshold=5000
创建克隆的 SAPHanaTopology 资源
NODE1 上,运行以下命令创建 SAPHanaTopology 资源。
pcs resource create SAPHanaTopology_${SID}_${INSTNO} SAPHanaTopology \
SID=${SID} \
InstanceNumber=${INSTNO} \
op start timeout=600 \
op stop timeout=300 \
op monitor interval=10 timeout=600 \
clone meta clone-max=2 clone-node-max=1 interleave=true \
--future \
--disabled
运行以下命令验证资源配置和群集状态。
pcs resource config SAPHanaTopology_${SID}_${INSTNO}
pcs resource config SAPHanaTopology_${SID}_${INSTNO}-clone
创建克隆的 SAPHanaFilesystem 资源
该 SAPHanaFilesystem 资源监控 SAP HANA 系统使用的文件系统。
NODE1 上,运行以下命令创建 SAPHanaFilesystem 资源。
pcs resource create SAPHanaFilesystem_${SID}_${INSTNO} SAPHanaFilesystem \
SID=${SID} \
InstanceNumber=${INSTNO} \
op start interval=0 timeout=10 \
op stop interval=0 timeout=20 \
op monitor interval=120 timeout=120 \
clone meta clone-max=2 clone-node-max=1 interleave=true \
--future \
--disabled
运行以下命令验证资源配置和群集状态。
pcs resource config SAPHanaFilesystem_${SID}_${INSTNO}
pcs resource config SAPHanaFilesystem_${SID}_${INSTNO}-clone
创建可推广的 SAPHanaController 资源
该 SAPHanaController 资源管理两个为系统复制而配置的 SAP HANA 实例。
NODE1 上,运行以下命令创建 SAPHanaController 资源。
pcs resource create SAPHanaController_${SID}_${INSTNO} SAPHanaController \
SID=${SID} \
InstanceNumber=${INSTNO} \
HANA_CALL_TIMEOUT=120 \
PREFER_SITE_TAKEOVER=true \
DUPLICATE_PRIMARY_TIMEOUT=7200 \
AUTOMATED_REGISTER=false \
op start timeout=3600 \
op stop timeout=3600 \
op monitor interval=59 role="Unpromoted" timeout=700 \
op monitor interval=61 role="Promoted" timeout=700 \
op promote timeout=900 \
op demote timeout=320 \
meta priority=100 \
promotable meta clone-max=2 clone-node-max=1 interleave=true \
--future \
--disabled
验证资源配置和群集状态。
pcs resource config SAPHanaController_${SID}_${INSTNO}
创建虚拟 IP 地址群资源
根据部署方案选择合适的配置路径:
- 在单一区域环境中创建虚拟 IP 群集资源:如果群集节点在单个 Power Virtual Server 工作区中运行,请按照以下步骤操作。
- 在多区区域环境中创建虚拟 IP 群集资源:如果群集节点在不同的 Power Virtual Server 工作区中运行,请按照以下步骤操作。
在单区环境中创建虚拟 IP 群集资源
使用保留的 IP 地址创建虚拟 IP 地址集群资源。 通过该 IP 地址可以访问 SAP HANA 系统复制主实例。
使用以下命令创建虚拟 IP 地址集群资源。
pcs resource create vip_${SID}_${INSTNO} IPaddr2 \
ip=$VIP \
--disabled
验证虚拟 IP 地址资源配置和群集状态。
pcs resource config vip_${SID}_${INSTNO}
pcs status --full
转到 创建群集资源限制 部分。
在多区区域环境中创建虚拟 IP 群集资源
确定 多区域环境中 SAP HANA 高可用性解决方案中虚拟 IP 集群资源的资源管理器 - 网络注意 事项部分。
确保完成了“为虚拟 IP 地址资源准备多区 RHEL HA Add-On 群集”部分中的所有步骤。
使用 pcs resource describe powervs-move-ip
命令获取有关 powervs-move-ip
资源代理参数的信息。 使用 pcs resource describe powervs-subnet
命令获取有关 powervs-subnet
资源代理参数的信息。
如果使用 powervs-move-ip
资源代理,请在 NODE1 上运行以下命令,为虚拟 IP 地址创建群集资源。
pcs resource create vip_${SID}_${INSTNO} powervs-move-ip \
api_key=${APIKEY} \
api_type=${API_TYPE} \
ip=${VIP} \
route_host_map="${NODE1}:${ROUTE_CRN1};${NODE2}:${ROUTE_CRN2}" \
region=${CLOUD_REGION} \
monitor_api=${MON_API}
op start timeout=60 \
op stop timeout=60 \
op monitor interval=60 timeout=60 \
--disabled
否则,请在 NODE1 上运行以下命令,为虚拟 IP 地址创建 powervs-subnet
群集资源。
pcs resource create vip_${SID}_${INSTNO} powervs-subnet \
api_key=${APIKEY} \
api_type=${API_TYPE} \
cidr=${CIDR} \
ip=${VIP} \
crn_host_map="${NODE1}:${IBMCLOUD_CRN_1};${NODE2}:${IBMCLOUD_CRN_2}" \
vsi_host_map="${NODE1}:${POWERVSI_1};${NODE2}:${POWERVSI_2}" \
jumbo=${JUMBO} \
region=${CLOUD_REGION} \
subnet_name=${SUBNET_NAME} \
op start timeout=720 \
op stop timeout=300 \
op monitor interval=60 timeout=30 \
--disabled
当 API_TYPE
设置为 public
时,还必须指定 proxy
参数。
在运行 pcs resource config
命令之前,请确认群集中的两个虚拟服务器实例的状态都是 Active
,其健康状态都是 OK
。
验证已配置的虚拟 IP 资源和群集状态。
pcs resource config vip_${SID}_${INSTNO}
powervs-subnet
资源代理的输出示例:
# pcs resource config vip_MH1_00
Resource: vip_MH1_00 (class=ocf provider=heartbeat type=powervs-subnet)
Attributes: vip_MH1_00-instance_attributes
api_key=@/root/.apikey.json
api_type=private
cidr=10.40.41.100/30
crn_host_map=cl-mh1-1:crn:v1:bluemix:public:power-iaas:eu-de-2:a/**********************************:**********************************::;cl-mh1-2:crn:v1:bluemix:public:power-iaas:eu-
de-1:a/**********************************:**********************************::
ip=10.40.41.102
jumbo=true
region=eu-de
subnet_name=vip-mh1-net
vsi_host_map=cl-mh1-1:**********************************;cl-mh1-2:**********************************
Operations:
monitor: vip_MH1_00-monitor-interval-60
interval=60 timeout=30
start: vip_MH1_00-start-interval-0s
interval=0s timeout=720
stop: vip_MH1_00-stop-interval-0s
interval=0s timeout=300
创建群集资源限制
确保 SAPHanaTopology 资源在 SAPHanaController 资源。
虚拟 IP 地址必须分配给托管主资源的节点。SAPHanaController 资源的节点。
-
创建资源限制,强制执行启动顺序。 这一约束确保 SAPHanaTopology 在 SAPHanaController.
NODE1 上,使用以下命令创建 SAPHanaTopology 订单约束。
pcs constraint order SAPHanaTopology_${SID}_${INSTNO}-clone \ then SAPHanaController_${SID}_${INSTNO}-clone symmetrical=false
验证约束是否正确应用。
pcs constraint
-
创建资源限制,将虚拟 IP 地址与 SAP HANA 系统复制主实例同地放置。 该限制可确保虚拟 IP 地址分配给已推广的 SAPHanaController 资源(即 SAP HANA 主节点)运行的节点分配虚拟 IP 地址。
在 NODE1 上,运行以下命令创建虚拟 IP 主机代管约束。
pcs constraint colocation add vip_${SID}_${INSTNO} \ with Promoted SAPHanaController_${SID}_${INSTNO}-clone 2000
验证是否应用了主机代管约束。
pcs constraint
样本输出:
# pcs constraint Colocation Constraints: Started resource 'vip_MH1_00' with Promoted resource 'SAPHanaController_MH1_00-clone' score=2000 Order Constraints: start resource 'SAPHanaTopology_MH1_00-clone' then start resource 'SAPHanaController_MH1_00-clone' symmetrical=0
启用群集资源
集群资源最初是使用 --disabled
标志创建的。
在 NODE1 上,使用以下命令启用每个群集资源。
pcs resource enable SAPHanaTopology_${SID}_${INSTNO}-clone
pcs resource enable SAPHanaFilesystem_${SID}_${INSTNO}-clone
pcs resource enable SAPHanaController_${SID}_${INSTNO}-clone
pcs resource enable vip_${SID}_${INSTNO}
验证所有资源都在运行。
pcs status --full
以下是 SAP HANA 系统复制群集的输出示例,该群集部署在多区区域。
# pcs status --full
Cluster name: SAP_MH1
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: cl-mh1-1 (1) (version 2.1.7-5.2.el9_4-0f7f88312) - partition with quorum
* Last updated: Thu Feb 27 17:43:57 2025 on cl-mh1-1
* Last change: Thu Feb 27 17:43:22 2025 by root via root on cl-mh1-1
* 2 nodes configured
* 8 resource instances configured
Node List:
* Node cl-mh1-1 (1): online, feature set 3.19.0
* Node cl-mh1-2 (2): online, feature set 3.19.0
Full List of Resources:
* res_fence_sbd (stonith:fence_sbd): Started cl-mh1-1
* Clone Set: SAPHanaTopology_MH1_00-clone [SAPHanaTopology_MH1_00]:
* SAPHanaTopology_MH1_00 (ocf:heartbeat:SAPHanaTopology): Started cl-mh1-2
* SAPHanaTopology_MH1_00 (ocf:heartbeat:SAPHanaTopology): Started cl-mh1-1
* Clone Set: SAPHanaFilesystem_MH1_00-clone [SAPHanaFilesystem_MH1_00]:
* SAPHanaFilesystem_MH1_00 (ocf:heartbeat:SAPHanaFilesystem): Started cl-mh1-2
* SAPHanaFilesystem_MH1_00 (ocf:heartbeat:SAPHanaFilesystem): Started cl-mh1-1
* Clone Set: SAPHanaController_MH1_00-clone [SAPHanaController_MH1_00] (promotable):
* SAPHanaController_MH1_00 (ocf:heartbeat:SAPHanaController): Unpromoted cl-mh1-2
* SAPHanaController_MH1_00 (ocf:heartbeat:SAPHanaController): Promoted cl-mh1-1
* vip_MH1_00 (ocf:heartbeat:powervs-subnet): Started cl-mh1-1
Node Attributes:
* Node: cl-mh1-1 (1):
* hana_mh1_clone_state : PROMOTED
* hana_mh1_roles : master1:master:worker:master
* hana_mh1_site : SiteA
* hana_mh1_srah : -
* hana_mh1_version : 2.00.079.00
* hana_mh1_vhost : cl-mh1-1
* master-SAPHanaController_MH1_00 : 150
* Node: cl-mh1-2 (2):
* hana_mh1_clone_state : DEMOTED
* hana_mh1_roles : master1:master:worker:master
* hana_mh1_site : SiteB
* hana_mh1_srah : -
* hana_mh1_version : 2.00.079.00
* hana_mh1_vhost : cl-mh1-2
* master-SAPHanaController_MH1_00 : 100
Migration Summary:
Tickets:
PCSD Status:
cl-mh1-1: Online
cl-mh1-2: Online
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
在已升级的群集节点上,验证群集服务 IP 地址是否处于活动状态。
ip addr show
启用自动注册辅助实例
根据操作要求设置 AUTOMATED_REGISTER
参数。 要保留恢复到先前主 SAP HANA 实例的功能,请设置 AUTOMATED_REGISTER=false
。 此设置可防止自动将上一个主局注册为新的辅助局。
如果群集触发的接管导致数据问题,如果 AUTOMATED_REGISTER
设置为 false
,则可以手动恢复配置。
AUTOMATED_REGISTER=true
时,前一个主 SAP HANA 实例会自动注册为辅助实例。 实例将失去历史记录,无法在旧状态下重新激活。 这种设置的好处是,当故障节点重新加入群集时,高可用性会自动恢复。
AUTOMATED_REGISTER
使用默认值 false
,直到群集经过全面测试并验证了故障转移方案。
要启用自动注册,请使用 pcs resource update SAPHanaController_${SID}_${INSTNO} AUTOMATED_REGISTER=true
更新资源属性。
测试 SAP HANA 系统复制群集
彻底测试群集配置,以帮助确保所有组件按预期运行。 以下示例描述了故障转移测试场景,但并不全面。 每个测试用例都包括以下详细信息。
- 正在测试的组件
- 测试描述
- 启动故障切换前的先决条件和群集状态
- 测试程序
- 预期行为和结果
- 恢复程序
测试 1 - 测试主数据库实例故障
使用以下步骤测试主 SAP HANA 数据库实例的故障。
测试 1 - 说明
模拟在 NODE1 上运行的 SAP HANA 主数据库实例崩溃。
测试 1 - 先决条件
- 为 HANA 系统复制配置的功能性双节点 RHEL HA Add-On 集群
- 群集在两个节点上运行
SAPHanaController_${SID}_${INSTNO}
资源配置为AUTOMATED_REGISTER=false
- 验证 SAP HANA 系统复制状态:
- SAP HANA 主数据库运行在 NODE1
- SAP HANA 备用数据库运行在 NODE2
- 系统复制已启动并保持同步
测试 1 - 测试程序
以 sidadm 用户身份发送 SIGKILL 信号,模拟 SAP HANA 主实例崩溃。
在 NODE1 上,运行以下命令。
sudo -i -u ${sid}adm -- HDB kill-9
测试 1 - 预期行为
- SAP HANA NODE1 上的主实例崩溃。
- 群集会检测到已停止的 HANA 主数据库,并将资源标记为
failed
。 - 群集会将 NODE2 上的辅助 HANA 数据库升级为新的主数据库。
- 虚拟 IP 地址从 NODE1 释放,并重新分配给 NODE2。
- SAP NetWeaver 等应用程序如果连接到租户数据库,会自动重新连接到新的主数据库。
测试 1 - 恢复程序
由于 SAPHanaController_${SID}_${INSTNO}
资源配置为 AUTOMATED_REGISTER=false
,因此群集不会重新启动故障的 SAP HANA 实例,也不会将其注册到新的主服务器上。 因此,NODE2 上的新主站显示原副站处于 CONNECTION TIMEOUT
状态。
要手动将先前的主设备重新注册为新的辅助设备,请在 NODE1 上运行以下命令。
sudo -i -u ${sid}adm -- <<EOT
hdbnsutil -sr_register \
--name=${DC1} \
--remoteHost=${NODE2} \
--remoteInstance=00 \
--replicationMode=sync \
--operationMode=logreplay \
--online
EOT
验证 SAP HANA 系统复制状态。
sudo -i -u ${sid}adm -- <<EOT
hdbnsutil -sr_state
HDBSettings.sh systemReplicationStatus.py
EOT
手动注册和资源刷新后,新的辅助实例会重新启动,并显示为 SOK
(同步)状态。
在 NODE1 上,运行以下命令。
pcs resource refresh SAPHanaController_${SID}_${INSTNO}
pcs status --full
测试 2 - 测试运行主数据库的节点发生故障的情况
使用以下步骤模拟和测试主 SAP HANA 数据库实例所在节点的故障。
测试 2 - 说明
模拟托管 SAP HANA 主数据库实例的节点崩溃。
测试 2 - 准备
确保 SAPHanaController_${SID}_${INSTNO}
资源配置为 AUTOMATED_REGISTER=true
。
在 NODE1 上,运行以下命令。
pcs resource update SAPHanaController_${SID}_${INSTNO} AUTOMATED_REGISTER=true
pcs resource config SAPHanaController_${SID}_${INSTNO}
测试 2 - 先决条件
- 为 HANA 系统复制配置的功能性双节点 RHEL HA Add-On 集群
- 群集在两个节点上运行
- 验证 SAP HANA 系统复制状态:
- SAP HANA 主数据库运行在 NODE2
- SAP HANA 备用数据库运行在 NODE1
- 系统复制已启动并保持同步
测试 2 - 测试程序
通过触发系统崩溃,在 NODE2 上模拟节点故障。
在 NODE2 上,运行以下命令。
sync; echo c > /proc/sysrq-trigger
测试 2 - 预期行为
- NODE2 关闭。
- 群集检测到故障节点,并将其状态标记为
OFFLINE
。 - 群集会将 NODE1 上的辅助 SAP HANA 实例升级为新的主实例。
- 虚拟 IP 地址将重新分配给 NODE1。
- SAP NetWeaver 等应用程序如果连接到租户数据库,会自动重新连接到新的主数据库。
测试 2 - 恢复程序
登录 IBM Cloud® 控制台,启动 NODE2 实例。 NODE2 可用后,重新启动群集框架。
在 NODE2 上,运行以下命令。
pcs cluster start
pcs status --full
由于 AUTOMATED_REGISTER=true
是为 SAPHanaController_${SID}_${INSTNO}
资源配置的,因此当 NODE_B1 重新加入群集时,SAP HANA 会自动重新启动。 前主实例重新注册为辅助实例。
测试 3 - 测试辅助数据库实例故障
按照以下步骤模拟辅助数据库实例发生故障。
测试 3 - 说明
该测试模拟辅助 SAP HANA 实例崩溃,以验证群集故障切换行为。
测试 3 - 先决条件
- 为 HANA 系统复制配置的功能性双节点 RHEL HA Add-On 集群
- 群集在两个节点上运行
SAPHanaController_${SID}_${INSTNO}
资源配置为AUTOMATED_REGISTER=true
- 验证 SAP HANA 系统复制状态:
- SAP HANA 主数据库运行在 NODE1
- SAP HANA 备用数据库运行在 NODE2
- HANA 系统复制已激活并保持同步
测试 3 - 测试程序
以 sidadm 用户身份发送 SIGKILL 信号,模拟二级 SAP HANA 实例崩溃。
在 NODE2 上,运行以下命令。
sudo -i -u ${sid}adm -- HDB kill-9
测试 3 - 预期行为
- NODE2 上的辅助 SAP HANA 实例崩溃。
- 群集会检测到已停止的二级 HANA 数据库,并将资源标记为
failed
。 - 群集重新启动辅助 HANA 实例。
- 群集验证系统复制是否重新建立并保持同步。
测试 3 - 恢复程序
等待直到辅助 SAP HANA 实例启动,系统复制状态恢复到 SOK
。 然后,清理任何失败的资源操作,如 pcs status
所示。
在 NODE2 上,运行以下命令。
pcs resource refresh SAPHanaController_${SID}_${INSTNO}
pcs status --full
测试 4 - 将 SAPHana 资源手动移动到另一个节点的测试
请按照以下步骤将一个 SAPHanaController 资源到另一个节点。
测试 4 - 说明
使用群集管理命令将主 SAP HANA 实例迁移到另一个节点进行维护。
测试 4 - 先决条件
- 一个功能性双节点 RHEL HA Add-On 集群,配置用于 SAP HANA 系统复制
- 群集在两个节点上运行
SAPHanaController_${SID}_${INSTNO}
资源配置为AUTOMATED_REGISTER=true
- 验证 SAP HANA 系统复制状态:
- 主 SAP HANA 实例在 NODE1
- 辅助 SAP HANA 实例在 NODE2
- HANA 系统复制已激活并保持同步
测试 4 - 测试程序
使用 pcs resource move
命令,手动将主 SAP HANA 实例移动到另一个节点。
在 NODE1 上,运行以下命令。
pcs resource move SAPHanaController_${SID}_${INSTNO}-clone
测试 4 - 预期行为
- 集群会创建临时位置限制,将资源重新定位到目标节点。
- 群集启动接管,将辅助 SAP HANA 实例提升为主要实例。
- SAP NetWeaver 等应用程序如果连接到租户数据库,会自动重新连接到新的主实例。
测试 4 - 恢复程序
作为资源移动过程的一部分,群集会自动注册并启动原主节点作为新的辅助实例。 移动成功完成后,群集会删除任何临时位置限制。
在 NODE1 上运行以下命令,以确认临时限制已删除并验证群集状态。
pcs constraint
pcs status --full