阿里云上的SAP高可用集群维护指南
1. 前言
本文档面向在阿里云上运行SAP高可用集群环境的SAP Basis管理员和云管理员,旨在提供系统化的日常运维操作指南。
适用场景:本文档适用于已按照《阿里云上的SAP高可用架构》部署指南完成部署的SAP高可用集群环境,涵盖以下两种集群场景:
集群类型 | 集群组件 | 典型SID |
应用层(ASCS/ERS)集群 | Pacemaker + Corosync(UCAST单播) | EN2 |
数据库层(HANA)集群 | Pacemaker + Corosync + HANA System Replication | HA1 |
集群技术栈:
资源管理器:Pacemaker
集群通信层:Corosync(UCAST单播模式)
STONITH/Fencing:阿里云专用
fence_aliyun(通过OpenAPI实现ECS强制重启/关机)虚拟IP管理:
aliyun-vpc-move-ip资源代理(VPC路由表方式管理Overlay IP)HANA资源代理:SAPHanaSR-angi(新版推荐),使用 SAPHanaController 和 SAPHanaTopology
推荐架构:ENSA2 Simple Mount
说明:本文档中所有命令示例均基于 SLES for SAP 15 操作系统,SID 命名沿用部署指南约定——ASCS/ERS 集群使用EN2,HANA 集群使用HA1。
2. 集群状态查看与监控
2.1 crm_mon 命令详解
crm_mon 是查看集群实时状态的核心命令,常用参数如下:
参数 | 说明 |
| 单次输出后退出(非交互模式),适合脚本或快速查看 |
| 显示无效资源和故障信息 |
| 显示各资源的故障计数(failcount) |
| 不显示资源默认值,精简输出 |
常用命令示例:
# 实时监控集群状态(交互模式,按 Ctrl+C 退出)
crm_mon
# 单次输出集群概要
crm_mon -1
# 查看资源故障计数
crm_mon -1f
# 完整输出(含故障信息和无效资源)
crm_mon -1rf
正常状态输出示例(ASCS/ERS集群):
Cluster Summary:
* Stack: corosync
* Current DC: node1 (version 2.1.5+20230509.git63b431033-3.21.1-2.1.5) - partition with quorum
* Last updated: Thu May 14 10:00:00 2026
* Last change: Thu May 14 09:30:00 2026 by hacluster via crmd on node1
* 2 nodes configured
* 8 resource instances configured
Node List:
* Online: [ node1 node2 ]
Active Resources:
* res_ALIYUN_STONITH_1 (stonith:fence_aliyun): Started node1
* res_ALIYUN_STONITH_2 (stonith:fence_aliyun): Started node2
* Resource Group: grp_EN2_ASCS00:
* rsc_ip_EN2_ASCS00 (ocf::heartbeat:aliyun-vpc-move-ip): Started node1
* rsc_sap_EN2_ASCS00 (ocf::heartbeat:SAPInstance): Started node1
* rsc_SAPStartSrv_EN2_ASCS00 (ocf::heartbeat:SAPStartSrv): Started node1
* Resource Group: grp_EN2_ERS10:
* rsc_ip_EN2_ERS10 (ocf::heartbeat:aliyun-vpc-move-ip): Started node2
* rsc_sap_EN2_ERS10 (ocf::heartbeat:SAPInstance): Started node2
* rsc_SAPStartSrv_EN2_ERS10 (ocf::heartbeat:SAPStartSrv): Started node2
2.2 crm status 命令
crm status 提供与 crm_mon -1 类似的概要输出,是快速查看集群状态的便捷命令:
# 查看集群整体状态
crm status
# 查看指定资源的状态
crm status resource rsc_sap_EN2_ASCS00
2.3 查看节点状态
# 查看所有节点状态
crm node status
# 查看节点是否在线/standby
crm node show
节点状态说明:
状态 | 含义 |
Online | 节点正常在线,参与集群 |
Offline | 节点离线,未加入集群 |
Standby | 节点在线但处于待机状态,不运行资源 |
2.4 查看资源故障计数
# 查看所有资源的故障计数
crm_mon -1f
# 查看指定资源在指定节点上的故障计数
crm resource failcount rsc_sap_EN2_ASCS00 show node1
# 查询特定资源的故障计数(使用 crm_attribute)
crm_attribute --type status --node node1 --attr-name fail-count-rsc_sap_EN2_ASCS00 --query-xml
2.5 查看集群属性
# 查看所有集群属性
crm_attribute --list
# 查看特定集群属性
crm_attribute --attr-name stonith-enabled --query
crm_attribute --attr-name maintenance-mode --query
crm_attribute --attr-name no-quorum-policy --query
# 查看资源默认属性
crm_resource --list-attrs
# 查看节点属性
crm_attribute --type nodes --node node1 --list
关键集群默认属性参考:
属性 | 默认值 | 说明 |
| true | 启用STONITH/Fencing |
| reboot | Fencing动作为重启 |
| 150 | STONITH超时时间(秒) |
| 1 | 资源粘性默认值 |
| 3 | 迁移阈值默认值 |
| stop | 丢失quorum时的策略 |
ASCS资源特殊属性:
属性 | 值 | 说明 |
| 5000 | ASCS高粘性,防止回切 |
| 1 | ASCS一次故障即迁移 |
2.6 HANA集群特有属性查看
使用 SAPHanaSR-showAttr 查看 HANA System Replication 状态和集群属性:
# 查看HANA集群的SR状态概览
SAPHanaSR-showAttr
# 示例输出:
# Name Site LPA LPT LPTsys SRA
# node1 SITE1 1715644800 1715644800 1 S_OK
# node2 SITE2 1715644800 0 0 S_OK
# 查看HANA特定SID的属性
SAPHanaSR-showAttr --sid=HA1 --inst=10
# 查看HANA SR Hook状态
python /usr/share/SAPHanaSR-angi/susHanaSR.py --check --sid=HA1 --instnum=10
HANA关键属性说明:
属性 | 说明 |
| 是否优先执行takeover而非本地重启(默认 true) |
| 故障节点恢复后是否自动注册为Secondary(生产环境建议 false) |
| Last Promotion Timestamp,最近一次提升时间 |
| SR Agent 状态 |
# 查看HANA多目标属性
crm_attribute --type rsc_defaults --meta --attr-name AUTOMATED_REGISTER --query
# 查看特定HANA资源的属性
crm_resource --resource mst_SAPHanaCon_HA1_HDB10 --list-attrs
2.7 日志查看
集群和Pacemaker的日志是排查问题的重要依据:
# 实时查看Pacemaker日志
tail -f /var/log/pacemaker/pacemaker.log
# 查看Pacemaker日志中的错误信息
grep -i "error\|warning\|crit" /var/log/pacemaker/pacemaker.log | tail -50
# 查看系统日志中的集群相关信息
tail -f /var/log/messages | grep -i "pacemaker\|corosync\|lrmd\|crmd"
# 查看Corosync日志
tail -f /var/log/messages | grep corosync
# 查看fence_aliyun操作日志
grep "fence_aliyun" /var/log/messages | tail -20
# 查看HANA SR相关日志
grep "SAPHanaSR\|susHanaSR\|susTkOver\|susChkSrv" /var/log/messages | tail -30
说明:在SLES 15中,Pacemaker日志同时写入/var/log/pacemaker/pacemaker.log和/var/log/messages。优先查看pacemaker.log,信息更为集中和完整。
3. 集群维护模式操作
3.1 全局维护模式
全局维护模式会暂停所有资源监控和STONITH操作,适用于需要对集群进行全面升级或大规模变更的场景。
# 将集群置于维护模式
crm configure property maintenance-mode=true
# 确认维护模式已生效
crm_attribute --attr-name maintenance-mode --query
# 应返回:name=maintenance-mode value=true
# 退出维护模式
crm configure property maintenance-mode=false
# 确认已退出维护模式
crm_attribute --attr-name maintenance-mode --query
# 应返回:name=maintenance-mode value=false
重要:维护模式下,STONITH和所有资源监控均暂停。集群不会自动响应任何故障,务必在完成维护后及时退出维护模式。
3.2 单个资源维护
当只需对特定资源进行维护时,建议使用单资源维护模式,其他资源仍受集群正常监控保护:
# 将单个资源置于维护模式
crm resource maintenance rsc_sap_EN2_ASCS00 on
# 退出单个资源的维护模式
crm resource maintenance rsc_sap_EN2_ASCS00 off
# 查看资源是否在维护模式
crm_resource --resource rsc_sap_EN2_ASCS00 --is-maintenance
3.3 节点Standby操作
将节点置于standby状态,使该节点不再运行任何资源:
# 将节点置于standby
crm node standby node2
# 取消节点standby(使节点重新上线)
crm node online node2
# 查看节点状态
crm node show
3.4 典型维护场景操作流程
场景一:OS补丁升级
1. 确认当前集群状态正常 → crm_mon -1
2. 将待升级节点置于standby → crm node standby <node>
3. 确认资源已迁移至另一节点 → crm_mon -1
4. 在standby节点上执行OS补丁升级
5. 升级完成后重启节点(如需要)
6. 节点启动后确认集群状态 → crm_mon -1
7. 将节点重新上线 → crm node online <node>
8. 确认集群状态正常 → crm_mon -1
9. 对另一节点重复步骤2-8
场景二:SAP Kernel升级
1. 确认当前集群状态正常 → crm_mon -1
2. 将集群置于维护模式 → crm configure property maintenance-mode=true
3. 在两节点上分别执行Kernel升级
4. 升级完成后退出维护模式 → crm configure property maintenance-mode=false
5. 确认集群状态正常 → crm_mon -1
6. 验证SAP实例启动正常 → sapcontrol -nr 00 -function GetSystemInstanceList
场景三:HANA数据库升级
1. 确认当前HANA SR状态正常 → SAPHanaSR-showAttr
2. 将HANA集群置于维护模式 → crm configure property maintenance-mode=true
3. 先升级Secondary节点的HANA
4. 执行HANA takeover,将原Primary切换为Secondary
5. 升级新Secondary(原Primary)的HANA
6. 退出维护模式 → crm configure property maintenance-mode=false
7. 确认HANA集群状态正常 → crm_mon -1 && SAPHanaSR-showAttr
警告:维护模式下集群不提供故障自动切换能力。请确保维护窗口足够短,并在维护期间加强人工监控。
4. 资源启停与管理
4.1 启动/停止资源
# 启动资源
crm resource start rsc_sap_EN2_ASCS00
# 停止资源(集群将资源标记为stopped,但仍在集群配置中)
crm resource stop rsc_sap_EN2_ASCS00
# 启动整个资源组
crm resource start grp_EN2_ASCS00
# 停止整个资源组
crm resource stop grp_EN2_ASCS00
说明:crm resource stop停止资源后,集群不会自动重启该资源。需要使用crm resource start手动启动。
4.2 资源清理(清除故障计数)
当资源发生故障后,故障计数会累积。即使故障已恢复,残留的故障计数也可能导致资源意外迁移。因此,在确认故障已解决后,应及时清理故障计数:
# 清理指定资源的故障计数
crm resource cleanup rsc_sap_EN2_ASCS00
# 清理指定资源在指定节点上的故障计数
crm resource cleanup rsc_sap_EN2_ASCS00 node1
# 清理HANA资源的故障计数
crm resource cleanup mst_SAPHanaCon_HA1_HDB10
# 清理所有资源的故障计数
crm resource cleanup
重要:在排查和解决资源故障后,务必执行cleanup操作清除故障计数,否则可能因累计达到migration-threshold而导致资源无法回到原节点。
4.3 资源迁移
# 将ASCS资源组迁移到node2
crm resource move grp_EN2_ASCS00 node2
# 将HANA资源迁移(触发takeover)
crm resource move mst_SAPHanaCon_HA1_HDB10 node2
警告:crm resource move命令会创建一个位置约束(colocation constraint),使资源倾向于运行在目标节点。操作完成后务必执行crm resource clear移除该约束,否则资源将被固定在目标节点,无法在后续故障时正常切换。
4.4 取消迁移约束
# 取消ASCS资源组的迁移约束
crm resource clear grp_EN2_ASCS00
# 取消HANA资源的迁移约束
crm resource clear mst_SAPHanaCon_HA1_HDB10
4.5 资源刷新
# 刷新资源状态(使集群重新检测资源的实际运行状态)
crm resource refresh rsc_sap_EN2_ASCS00
# 刷新所有资源状态
crm resource refresh
4.6 操作流程示例:手动切换ASCS到另一节点
# 步骤1:确认当前集群状态
crm_mon -1
# 步骤2:迁移ASCS资源组到目标节点
crm resource move grp_EN2_ASCS00 node2
# 步骤3:确认迁移完成
crm_mon -1
# 步骤4:清除迁移约束(关键步骤!)
crm resource clear grp_EN2_ASCS00
# 步骤5:最终确认集群状态
crm_mon -1
5. SAP服务启停操作指南
5.1 ASCS/ERS服务
5.1.1 在集群管理下正确启停SAP中央服务
在集群环境下,SAP中央服务的启停支持以下两种方式:
方式一(推荐):通过 sapcontrol 启停
当集群正确配置了 sap-suse-cluster-connector(版本 ≥ 3.1.0)后,管理员可以安全地使用 sapcontrol 命令启停SAP实例。sap-suse-cluster-connector 会在 sapcontrol 执行启停操作前自动通知 Pacemaker 进入资源级维护模式,暂停对该资源的监控和自动恢复,从而避免集群将管理员操作误判为故障。操作完成后,维护模式会自动解除。
# 通过 sapcontrol 停止ASCS(自动触发集群维护模式)
sapcontrol -nr 00 -function StopSystem
# 通过 sapcontrol 启动ASCS
sapcontrol -nr 00 -function StartSystem
# 通过 sapcontrol 停止ERS
sapcontrol -nr 10 -function StopSystem
# 通过 sapcontrol 启动ERS
sapcontrol -nr 10 -function StartSystem
说明:此方式同样适用于 SAP MC/MMC、SAP LaMa、SAP SUM 等管理工具的操作。这些工具底层通过 sapcontrol 接口与 SAP 实例通信,在正确配置 sap-suse-cluster-connector 后均可安全使用。前提条件:
条件 | 要求 |
sap-suse-cluster-connector 版本 | ≥ 3.1.0 |
SAP 实例 Profile 配置 |
|
用户权限 |
|
集群配置 |
|
# 验证 sap-suse-cluster-connector 版本
rpm -q sap-suse-cluster-connector
# 验证 <sid>adm 用户组
id en2adm | grep haclient
# 验证集群 record-pending 配置
crm configure show op_defaults | grep record-pending
方式二:通过集群命令启停
# 通过集群命令停止ASCS
crm resource stop grp_EN2_ASCS00
# 通过集群命令启动ASCS
crm resource start grp_EN2_ASCS00
# 通过集群命令停止ERS
crm resource stop grp_EN2_ERS10
# 通过集群命令启动ERS
crm resource start grp_EN2_ERS10
警告:以下操作方式会绕过集群的 HA 接口,导致集群误判为资源故障,严格禁止使用:
5.1.2 手动切换ASCS到另一节点
当需要将ASCS从当前运行节点手动切换到另一节点时(例如计划内维护):
# 步骤1:确认当前ASCS运行节点
crm_mon -1 | grep -A5 grp_EN2_ASCS00
# 步骤2:迁移ASCS资源组到目标节点
crm resource move grp_EN2_ASCS00 node2
# 步骤3:等待迁移完成,确认ASCS已在目标节点运行
crm_mon -1
# 步骤4:清除迁移约束
crm resource clear grp_EN2_ASCS00
# 步骤5:确认ERS是否仍在原节点运行
# 注意:由于ASCS和ERS的colocation约束score=-5000,ASCS切换后ERS不会自动迁移
crm_mon -1 | grep -A5 grp_EN2_ERS10
# 步骤6:如果需要,可手动迁移ERS
crm resource move grp_EN2_ERS10 node1
crm resource clear grp_EN2_ERS10
说明:ASCS和ERS的colocation约束设置了 score=-5000(强反亲和),意味着两者不应运行在同一节点。正常情况下,ASCS和ERS分处不同节点。ASCS迁移后,ERS应保持原位置不变。5.1.3 仅查看SAP实例状态(不进行操作)
以下命令仅用于查看状态,不会影响集群管理,可以安全使用:
# 查看ASCS实例状态
sapcontrol -nr 00 -function GetSystemInstanceList
# 查看ERS实例状态
sapcontrol -nr 10 -function GetSystemInstanceList
# 查看实例进程列表
sapcontrol -nr 00 -function GetProcessList
5.2 HANA数据库服务
5.2.1 HANA集群中的正确启停操作
# ===== 停止HANA集群资源 =====
# 停止HANA资源(Primary和Secondary均停止)
crm resource stop mst_SAPHanaCon_HA1_HDB10
# 停止HANA拓扑资源
crm resource stop cln_SAPHanaTop_HA1_HDB10
# ===== 启动HANA集群资源 =====
# 先启动拓扑资源
crm resource start cln_SAPHanaTop_HA1_HDB10
# 再启动HANA控制资源
crm resource start mst_SAPHanaCon_HA1_HDB10
# ===== 错误:不要直接使用以下命令 =====
# HDB stop
# systemctl stop saphana_HA1_HDB10
说明:HANA数据库的启停由集群通过SAPHanaSR-angi资源代理管理,该代理会协调Primary和Secondary的启动顺序和SR注册过程。
5.2.2 手动执行HANA Takeover
当需要手动将HANA从当前Primary切换到Secondary时:
# 步骤1:确认当前HANA SR状态
SAPHanaSR-showAttr
# 步骤2:确认集群状态
crm_mon -1
# 步骤3:确认目标Secondary节点的SR同步状态为SYNC
# 在Secondary节点执行:
su - ha1adm -c "hdbnsutil -sr_state"
# 确认 mode: SYNC 和 site mode: SYNC
# 步骤4:通过集群命令执行takeover
crm resource move mst_SAPHanaCon_HA1_HDB10 node2
# 步骤5:等待takeover完成,确认状态
crm_mon -1
SAPHanaSR-showAttr
# 步骤6:清除迁移约束
crm resource clear mst_SAPHanaCon_HA1_HDB10
# 步骤7:确认原Primary已重新注册为Secondary
# 如果 AUTOMATED_REGISTER=true,集群会自动完成注册
# 如果 AUTOMATED_REGISTER=false,需要手动注册(见5.2.3)
警告:执行takeover前,务必确认Secondary节点的SR同步状态为 SYNC,否则可能导致数据丢失。
5.2.3 Takeover后重新注册原Primary为Secondary
当 AUTOMATED_REGISTER=false 时,takeover后需要手动将原Primary注册为Secondary:
# 在原Primary节点(现在是未注册状态)执行:
# 步骤1:确认HANA已停止
su - ha1adm -c "HDB info"
# 步骤2:以recovery模式注册为Secondary
su - ha1adm -c "hdbnsutil -sr_register --remoteHost=node2 --remoteInstance=10 --replicationMode=sync --operationMode=logreplay_readaccess --name=SITE1"
# 步骤3:启动HANA(由集群管理)
# 集群将自动检测到新注册的Secondary并启动HANA
crm resource cleanup mst_SAPHanaCon_HA1_HDB10
crm resource cleanup cln_SAPHanaTop_HA1_HDB10
# 步骤4:确认SR状态
su - ha1adm -c "hdbnsutil -sr_state"
SAPHanaSR-showAttr
5.2.4 AUTOMATED_REGISTER参数说明
参数值 | 行为 | 适用场景 |
| 故障节点恢复后不自动注册,需手动执行注册 | 生产环境推荐——在故障原因查明前不自动注册,避免潜在风险 |
| 故障节点恢复后,集群自动将其注册为Secondary | 非生产环境或已充分验证故障恢复流程的场景 |
重要:生产环境建议将AUTOMATED_REGISTER设置为false。原因是当故障发生后,在故障根因尚未查明的情况下,自动将故障节点重新注册为Secondary可能存在风险(如数据不一致、硬件故障未排除等)。建议在人工确认故障原因并验证节点健康状态后,再手动执行注册操作。
# 查看当前AUTOMATED_REGISTER设置
crm_resource --resource mst_SAPHanaCon_HA1_HDB10 --get-parameter AUTOMATED_REGISTER
# 修改AUTOMATED_REGISTER设置
crm_resource --resource mst_SAPHanaCon_HA1_HDB10 --set-parameter AUTOMATED_REGISTER --parameter-value true
6. STONITH与Fencing管理
6.1 查看STONITH资源状态
# 查看STONITH资源状态
crm_mon -1 | grep -i stonith
# 查看所有STONITH资源
crm_resource --list | grep -i stonith
# 查看特定STONITH资源配置
crm configure show res_ALIYUN_STONITH_1
crm configure show res_ALIYUN_STONITH_2
6.2 测试STONITH是否正常工作
# 列出所有可用的STONITH设备
stonith_admin -L
# 查看指定STONITH设备的元数据
stonith_admin --metadata -a fence_aliyun
# 测试fence_aliyun连接(仅验证,不执行fencing)
# 需要替换为实际的ECS实例ID
fence_aliyun --action=list --region=cn-shanghai plug=<ECS instance id> ram_role=SAP-HA-ROLE
# 验证STONITH设备是否可以fencing指定节点
stonith_admin --validate --env-host=node2
警告:请勿在业务运行期间执行实际的fencing测试(fence_aliyun --action=off或--action=reboot),这将强制重启目标ECS实例,导致业务中断。
6.3 临时禁用STONITH
警告:临时禁用STONITH会显著降低集群的可靠性。在禁用STONITH期间,如果发生节点故障,集群无法隔离故障节点,可能导致脑裂(split-brain)或数据损坏。仅在紧急排障时短暂使用,并尽快恢复。
# 临时禁用STONITH(不推荐)
crm configure property stonith-enabled=false
# 恢复STONITH
crm configure property stonith-enabled=true
7. 集群配置查看与修改
7.1 查看当前CIB配置
# 查看完整集群配置
crm configure show
# 导出完整CIB XML(用于深度排查)
cibadmin --query > /tmp/cib_backup.xml
# 查看特定资源配置
crm configure show res_ALIYUN_STONITH_1
crm configure show rsc_sap_EN2_ASCS00
crm configure show mst_SAPHanaCon_HA1_HDB10
7.2 查看资源组和约束
# 查看资源组配置
crm configure show grp_EN2_ASCS00
crm configure show grp_EN2_ERS10
# 查看colocation约束
crm configure show | grep -A2 colocation
# 查看ordering约束
crm configure show | grep -A2 order
# 查看location约束
crm configure show | grep -A2 location
7.3 修改资源参数
# 方法一:使用 crm configure edit(交互式编辑器)
crm configure edit
# 方法二:使用 crm_resource 修改特定参数
# 查看当前参数值
crm_resource --resource mst_SAPHanaCon_HA1_HDB10 --get-parameter AUTOMATED_REGISTER
# 修改参数值
crm_resource --resource mst_SAPHanaCon_HA1_HDB10 --set-parameter AUTOMATED_REGISTER --parameter-value true
# 方法三:使用 crm configure 命令行修改
crm configure property stonith-timeout=200
crm configure rsc_defaults resource-stickiness=10
7.4 导出/备份集群配置
# 导出集群配置到文件
crm configure save /tmp/cluster_config_$(date +%Y%m%d).txt
# 备份CIB XML
cibadmin --query > /tmp/cib_backup_$(date +%Y%m%d).xml
# 从备份恢复集群配置
crm configure load update /tmp/cluster_config_20260514.txt
# 从CIB XML恢复
cibadmin --replace --xml-file /tmp/cib_backup_20260514.xml
重要:在进行任何集群配置变更前,务必备份当前配置。变更操作不可逆,备份可确保在变更失败时快速恢复。
7.5 Hook脚本路径和配置查看
HANA高可用集群依赖以下Hook脚本,由SAPHanaSR-angi软件包提供:
Hook脚本 | 功能 | 路径 |
| 监控SR连接状态变化,通知集群 | /usr/share/SAPHanaSR-angi/susHanaSR.py |
| Takeover前检查SR同步状态 | /usr/share/SAPHanaSR-angi/susTkOver.py |
| 监控HANA服务(indexserver/nameserver等)运行状态 | /usr/share/SAPHanaSR-angi/susChkSrv.py |
查看HANA global.ini中的ha_dr_provider配置
# 查看ha_dr_provider配置
su - ha1adm -c "hdbuserstore list"
su - ha1adm -c "python /usr/share/SAPHanaSR-angi/susHanaSR.py --check --sid=HA1 --instnum=10"
# 查看HANA的ha_dr_provider配置
su - ha1adm -c "hdbsql -i 10 -d SYSTEMDB -u SYSTEM -p <password> \"SELECT * FROM M_INIFILE_CONTENTS WHERE FILE_NAME='global.ini' AND SECTION='ha_dr_provider'\""
# 或者直接查看global.ini文件
cat /hana/shared/HA1/global/hdb/custom/config/global.ini | grep -A20 ha_dr_provider
global.ini 中 ha_dr_provider 配置示例:
[ha_dr_provider_susHanaSR]
provider = susHanaSR
path = /usr/share/SAPHanaSR-angi
execution_order = 1
[ha_dr_provider_susTkOver]
provider = susTkOver
path = /usr/share/SAPHanaSR-angi
execution_order = 2
[ha_dr_provider_susChkSrv]
provider = susChkSrv
path = /usr/share/SAPHanaSR-angi
execution_order = 3
查看sudo权限配置
Hook脚本执行时需要通过sudo调用集群命令,相关sudoers配置位于:
# 查看SAPHanaSR的sudoers配置
cat /etc/sudoers.d/SAPHanaSR
# 验证ha1adm用户的sudo权限
sudo -l -U ha1adm | grep -i "crm_\|cibadmin\|stonith_admin"
8. 常见运维场景操作手册
8.1 计划内维护(OS补丁/SAP升级)
8.1.1 ASCS/ERS集群的OS补丁
┌─────────────────────────────────────────────────────────────────┐
│ 步骤1: 确认集群状态正常 │
│ crm_mon -1 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤2: 将待维护节点置于standby │
│ crm node standby node2 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤3: 确认资源已迁移至另一节点 │
│ crm_mon -1 │
│ (ASCS和ERS应均运行在node1) │
├─────────────────────────────────────────────────────────────────┤
│ 步骤4: 在node2上执行OS补丁升级并重启 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤5: node2重启后确认集群状态 │
│ crm_mon -1 │
│ (node2应自动重新加入集群,但资源不会回迁) │
├─────────────────────────────────────────────────────────────────┤
│ 步骤6: 将node2重新上线 │
│ crm node online node2 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤7: 如需恢复ASCS/ERS的原分布,手动迁移ERS回到node2 │
│ crm resource move grp_EN2_ERS10 node2 │
│ crm resource clear grp_EN2_ERS10 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤8: 对node1重复步骤2-7 │
├─────────────────────────────────────────────────────────────────┤
│ 步骤9: 最终确认集群状态 │
│ crm_mon -1 │
└─────────────────────────────────────────────────────────────────┘
8.1.2 HANA集群的OS补丁
# 步骤1:确认HANA SR状态
SAPHanaSR-showAttr
su - ha1adm -c "hdbnsutil -sr_state"
# 步骤2:将Secondary节点置于standby
crm node standby node2 # 假设node2为Secondary
# 步骤3:确认集群状态正常(Primary不受影响)
crm_mon -1
# 步骤4:在node2上执行OS补丁升级并重启
# 步骤5:node2重启后重新上线
crm node online node2
# 步骤6:确认HANA SR恢复
SAPHanaSR-showAttr
# 等待SR重新建立同步
# 步骤7:执行HANA takeover,使原Secondary成为新Primary
crm resource move mst_SAPHanaCon_HA1_HDB10 node2
crm resource clear mst_SAPHanaCon_HA1_HDB10
# 步骤8:确认takeover完成
SAPHanaSR-showAttr
# 步骤9:对原Primary节点(现为Secondary)重复步骤2-6
# 步骤10:最终确认集群状态
crm_mon -1 && SAPHanaSR-showAttr
8.2 节点故障后恢复
8.2.1 ASCS/ERS集群节点恢复
当ASCS/ERS集群中某节点发生故障(如ECS实例异常)后的恢复流程:
# 步骤1:确认故障节点的资源已自动迁移到健康节点
crm_mon -1
# 步骤2:恢复故障节点(修复ECS实例、启动实例等)
# 步骤3:确认节点自动重新加入集群
crm node show
# 节点应显示为 Online
# 步骤4:清理故障计数
crm resource cleanup
# 步骤5:确认资源分布
# ASCS和ERS应分布在不同节点(由于colocation score=-5000)
# 如果ERS未回到原节点,可手动迁移
crm resource move grp_EN2_ERS10 node2
crm resource clear grp_EN2_ERS10
# 步骤6:最终确认
crm_mon -1
说明:ASCS的resource-stickiness=5000和migration-threshold=1意味着ASCS不会自动回切。如需恢复到原始分布,需手动迁移ERS资源组。
8.2.2 HANA集群节点恢复
# 步骤1:确认当前集群状态
crm_mon -1
SAPHanaSR-showAttr
# 步骤2:确认takeover已自动完成(如果PREFER_SITE_TAKEOVER=true)
# 健康节点应已成为新Primary
# 步骤3:恢复故障节点(修复ECS实例等)
# 步骤4:确认故障节点已重新加入集群
crm node show
# 步骤5:检查HANA SR注册状态
SAPHanaSR-showAttr
# 情况A:如果 AUTOMATED_REGISTER=true
# 集群会自动将恢复节点注册为Secondary并启动HANA
# 确认SR同步正常:
su - ha1adm -c "hdbnsutil -sr_state"
# 情况B:如果 AUTOMATED_REGISTER=false
# 需要手动注册(参见5.2.3节)
# 步骤6:清理资源故障计数
crm resource cleanup mst_SAPHanaCon_HA1_HDB10
crm resource cleanup cln_SAPHanaTop_HA1_HDB10
# 步骤7:最终确认
crm_mon -1 && SAPHanaSR-showAttr
8.3 集群资源持续报错
当集群资源持续报错时,按以下步骤排查:
# 步骤1:查看集群状态,定位报错资源
crm_mon -1rf
# 步骤2:查看资源的故障计数
crm resource failcount rsc_sap_EN2_ASCS00 show node1
# 步骤3:查看Pacemaker日志,定位错误原因
grep "rsc_sap_EN2_ASCS00" /var/log/pacemaker/pacemaker.log | tail -50
# 步骤4:查看资源操作日志(重点关注last-rc-change和rc-code)
crm_resource --resource rsc_sap_EN2_ASCS00 --force-demote --verbose
# 步骤5:查看资源代理的详细输出
# 手动执行资源代理的monitor操作
crm_resource --resource rsc_sap_EN2_ASCS00 --probe node1
# 步骤6:查看系统日志
grep "rsc_sap_EN2_ASCS00\|SAPInstance\|lrmd" /var/log/messages | tail -30
# 步骤7:根据错误原因修复问题后,清理故障计数
crm resource cleanup rsc_sap_EN2_ASCS00
# 步骤8:确认资源恢复
crm_mon -1
常见错误及处理:
错误现象 | 可能原因 | 处理方法 |
SAPInstance monitor失败 | SAP进程崩溃或挂起 | 检查SAP工作进程日志 dev_w*,修复后cleanup |
资源Start失败 | 配置文件错误或文件系统不可用 | 检查SAP配置文件和共享存储挂载 |
资源Stop超时 | SAP进程无法正常停止 | 手动kill残留进程后cleanup |
故障计数持续增长 | 底层问题未解决 | 先解决根因,再cleanup |
资源在两节点间反复切换 | migration-threshold过低或底层问题反复出现 | 提高migration-threshold或修复根因 |
8.4 虚拟IP未正确漂移
虚拟IP(Overlay IP)未正确漂移是常见问题,按以下步骤排查:
# 步骤1:检查aliyun-vpc-move-ip资源状态
crm_mon -1 | grep -i vpc-move-ip
# 步骤2:查看虚拟IP资源详情
crm configure show rsc_ip_EN2_ASCS00
# 步骤3:检查资源在哪个节点运行
crm_resource --resource rsc_ip_EN2_ASCS00 --locate
# 步骤4:如果资源状态与实际不符,手动刷新
crm resource refresh rsc_ip_EN2_ASCS00
检查RAM角色权限
在控制台确认 ECS 实例正确绑定了 SAP-HA-ROLE 角色, 其权限策略中包含以下 VPC 权限:
vpc:CreateRouteEntry
vpc:DeleteRouteEntry
vpc:Describe*
检查VPC路由表
在控制台检查:
确认 Overlay IP 在 VPC 路由表中指向正确的 ECS 实例。
确认路由条目的目标网段与集群配置中的地址一致。
确认路由表关联到了正确的虚拟交换机。
手动触发虚拟IP漂移
# 如果自动漂移失败,可尝试手动操作
# 步骤1:停止当前节点的VIP资源
crm resource stop rsc_ip_EN2_ASCS00
# 步骤2:启动目标节点的VIP资源
crm resource start rsc_ip_EN2_ASCS00
# 步骤3:确认路由表条目已更新
# 在阿里云控制台检查VPC路由表
# 步骤4:清理故障计数
crm resource cleanup rsc_ip_EN2_ASCS00
说明:aliyun-vpc-move-ip 资源代理通过调用阿里云VPC OpenAPI修改路由表条目实现虚拟IP漂移。如果OpenAPI调用失败(如权限不足、网络不通),虚拟IP将无法漂移。9. 注意事项与最佳实践
9.1 操作系统与版本一致性
重要:同一集群内的两个节点,操作系统版本、内核版本、SAP相关软件包版本必须保持一致。版本不一致可能导致集群行为异常或资源代理执行结果不同。
# 检查两节点OS版本
cat /etc/os-release
# 检查内核版本
uname -r
# 检查SAPHanaSR-angi版本(HANA集群)
rpm -qa | grep SAPHanaSR
9.2 不要直接使用systemctl管理SAP服务
SAP服务由Pacemaker集群管理,直接使用systemctl启停会导致集群检测到资源状态异常,触发不必要的恢复动作。
# ===== 错误操作 =====
systemctl start SAPEN2_00
systemctl stop SAPEN2_00
systemctl restart SAPEN2_00
# ===== 正确操作 =====
crm resource start rsc_sap_EN2_ASCS00
crm resource stop rsc_sap_EN2_ASCS00
9.3 关闭SAP实例的autostart
为避免ECS实例重启时SAP实例先于集群启动,导致集群资源状态混乱,必须关闭SAP实例的autostart:
# 检查SAP实例的autostart状态
systemctl is-enabled SAPEN2_00
systemctl is-enabled SAPEN2_10
systemctl is-enabled SAPHA1_10
# 如果返回 enabled,需要禁用
systemctl disable SAPEN2_00
systemctl disable SAPEN2_10
systemctl disable SAPHA1_10
# 同时确认SAP profile中的autostart设置
# 检查以下profile文件中的 Autostart 参数:
grep -i autostart /usr/sap/EN2/SYS/profile/EN2_ASCS00_*
grep -i autostart /usr/sap/EN2/SYS/profile/EN2_ERS10_*
grep -i autostart /usr/sap/HA1/SYS/profile/HA1_HDB10_*
# Autostart值应为0或该行被注释
# 如不是,修改为:
# Autostart = 0
重要:如果在部署时遗漏了此步骤,ECS重启后SAP实例会自动启动,与集群管理产生冲突,可能导致fencing操作或资源反复启停。
9.4 定期检查集群状态和STONITH可用性
建议将以下检查纳入日常巡检:
# 1. 集群整体状态
crm_mon -1
# 2. STONITH资源状态
crm_mon -1 | grep -i stonith
# 3. HANA SR状态
SAPHanaSR-showAttr
# 4. 检查是否有未清理的故障计数
crm_mon -1f | grep -i "fail"
# 5. 检查Corosync通信
corosync-cfgtool -s
# 6. 检查集群节点成员
crm_node -l
9.5 变更前务必备份集群配置
# 在执行任何集群配置变更前,备份当前配置
crm configure save /root/cluster_config_backup_$(date +%Y%m%d%H%M).txt
cibadmin --query > /root/cib_backup_$(date +%Y%m%d%H%M).xml
9.6 升级操作前先将节点置于standby或集群进入维护模式
警告:在集群正常运行状态下直接对节点执行重启或升级操作,可能触发STONITH fencing,导致非预期的节点重启。
# 正确做法:先将节点置于standby
crm node standby <node>
# 或将整个集群置于维护模式
crm configure property maintenance-mode=true
# 执行升级操作...
# 完成后恢复
crm node online <node>
# 或
crm configure property maintenance-mode=false
9.7 资源迁移后务必清除约束
# 每次执行 crm resource move 后,必须执行:
crm resource clear <resource>
# 检查是否存在残留的位置约束
crm configure show | grep -A2 "location cli-"
9.8 关注集群通信
Corosync使用UCAST单播模式,两节点间需要稳定的网络通信:
# 检查Corosync环形状态
corosync-cfgtool -s
# 检查Corosync成员
corosync-cmapctl | grep -i member
# 检查Corosync配置
cat /etc/corosync/corosync.conf
说明:本文档中的命令示例基于 SLES for SAP 15 和 Pacemaker 2.x 环境。如使用其他版本,命令格式可能略有差异,请参考对应版本的官方文档。