阿里云上的SAP高可用架构
1. SAP高可用架构基本概念简介
1.1 高可用性的定义与目标
高可用性(High Availability, HA)是指通过冗余的技术架构设计,消除单点故障(Single Point of Failure, SPOF),使SAP系统在组件发生故障时能够自动切换到备用组件,从而将业务中断时间降到最低。
SAP系统的高可用架构通常围绕以下核心目标展开:
消除单点故障:在应用层、数据库层、网络层和存储层分别设计冗余机制
自动故障检测与切换:通过集群软件(如Pacemaker)实现故障的自动感知和资源的自动迁移
数据零丢失:通过同步复制(Synchronous Replication)确保故障切换时不丢失已提交事务
最小化切换时间:通过预加载、内存保持等技术缩短故障切换所需时间
1.2 SAP系统的分层架构
一个典型的SAP系统采用分布式三层架构:

每一层都有对应的高可用方案:
层级 | 关键组件 | 高可用方案 |
表示层 | SAP Web Dispatcher | HA集群 / 负载均衡 |
应用层 - 中央服务 | ASCS (ABAP Central Services) | Enqueue Replication + Pacemaker集群 |
应用层 - 应用服务器 | PAS / AAS | 多实例横向扩展(无需集群) |
数据库层 | SAP HANA | System Replication + Pacemaker集群 |
1.3 核心高可用技术组件
1.3.1 Pacemaker集群
Pacemaker是Linux环境下的开源高可用集群资源管理器,是SUSE Linux Enterprise Server for SAP Applications(SLES for SAP)内置的HA组件。它负责:
监控集群节点和资源的健康状态
在检测到故障时自动执行资源迁移
管理虚拟IP地址的漂移
协调集群成员之间的仲裁(Quorum)
1.3.2 Corosync
Corosync是集群通信层,提供节点间的心跳检测和消息传递。在阿里云环境中,建议使用UCAST(单播)模式进行通信。
1.3.3 STONITH/Fencing
STONITH(Shoot The Other Node In The Head)是集群隔离机制,用于在节点失去响应时强制关闭该节点,避免脑裂(Split Brain)。阿里云提供专用的STONITH设备fence_aliyun,通过调用阿里云OpenAPI来实现ECS实例的强制重启/关机。
1.3.4 SAP Enqueue Replication
SAP Enqueue Server是SAP系统中管理锁表的关键组件。Enqueue Replication通过在备用节点上维护锁表的实时副本,确保在主节点故障时锁信息不丢失。目前有两个版本:
ENSA1(Enqueue Replication Server 1):适用于SAP NetWeaver 7.40/7.50
ENSA2(Enqueue Replication Server 2):适用于SAP S/4HANA 1809及更新版本,是当前推荐的标准
1.3.5 SAP HANA System Replication
SAP HANA System Replication(HSR)是HANA数据库内置的数据复制机制,支持同步(sync)和异步(async)模式。在HA场景中使用同步模式,确保主库的每次提交都在备库完成持久化后才返回确认。
1.4 阿里云上的SAP HA整体架构视图
在阿里云上部署SAP高可用架构,推荐采用独立集群的设计模式:

关键设计原则:
应用层中央服务(ASCS/ERS)组成独立的两节点Pacemaker集群
SAP HANA数据库组成独立的两节点Pacemaker集群
PAS/AAS应用服务器不需要集群化,通过多实例部署实现冗余
共享文件系统使用阿里云NAS服务
2. SAP应用服务器的高可用架构规划
SAP应用服务器层的高可用核心在于ASCS(ABAP Central Services)和ERS(Enqueue Replication Server)的集群化。ASCS包含Message Server和Enqueue Server,是SAP系统中最关键的单点故障组件。
2.1 ECS选型
2.1.1 ASCS/ERS节点
ASCS和ERS节点的资源需求相对较低,主要消耗CPU和内存用于锁管理和消息路由。
推荐实例族(按代际优先级排序):
实例族 | 定位 | 推荐场景 |
ecs.g9i | 通用算力增强型(第9代) | 生产环境 |
ecs.g7 | 通用型(第7代) | 生产环境 |
ecs.g6e / ecs.g6 | 通用型(第6代) | 生产/非生产环境 |
ecs.r9i | 内存增强型(第9代) | 大型系统ASCS |
ecs.r7 | 内存型(第7代) | 大型系统ASCS |
ASCS/ERS节点典型选型建议:
系统规模 | 推荐实例 | 规格 | SAPS |
小型(< 500用户) | ecs.g7.xlarge | 4 vCPUs, 16 GiB | 6,429 |
中型(500-2000用户) | ecs.g7.2xlarge | 8 vCPUs, 32 GiB | 12,858 |
大型(> 2000用户) | ecs.g7.4xlarge | 16 vCPUs, 64 GiB | 25,715 |
注意:ASCS/ERS两个节点应选择相同的实例规格,因为任一节点都可能同时运行ASCS和ERS实例。
2.1.2 PAS/AAS节点
PAS(Primary Application Server)和AAS(Additional Application Server)承载实际的业务负载,选型需根据SAP Sizing结果确定。这些节点不需要集群化,通过多实例横向扩展(Adding AAS)来提升处理能力和可用性。
常用实例族包括:
实例族 | 规格范围 | 特点 |
ecs.g9i | 2-192 vCPUs, 8-768 GiB | 最新一代,性价比高 |
ecs.r9i | 2-192 vCPUs, 16-1536 GiB | 内存密集型负载 |
ecs.g7 | 2-64 vCPUs, 8-256 GiB | 通用均衡型 |
ecs.r7 | 2-128 vCPUs, 16-1024 GiB | 内存密集型负载 |
2.2 存储选型
SAP应用层涉及的存储需求分为以下几类:
存储用途 | 推荐方案 | 文件系统 | 说明 |
| 阿里云NAS(通用型) | NFS v4 | 所有节点共享,存放SAP全局配置和profile |
| 阿里云NAS(通用型) | NFS v4 | SAP系统目录,所有节点共享 |
| 阿里云NAS(通用型) | NFS v4 | ASCS实例目录,Simple Mount方案下通过NFS共享 |
| 阿里云NAS(通用型) | NFS v4 | ERS实例目录,Simple Mount方案下通过NFS共享 |
| 云盘(ESSD) | XFS | 本地目录,包含sapservices和saphostagent |
阿里云NAS配置要点:
选择通用型NAS
为ASCS和ERS各创建独立的NAS文件系统(传统架构),或共享一个NAS(Simple Mount架构)
NAS挂载参数推荐:
vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport
2.3 组网设计
2.3.1 IP地址规划
用途 | IP地址(示例) | 说明 |
ASCS节点物理IP | 10.0.1.10 | sapapp1 |
ERS节点物理IP | 10.0.2.10 | sapapp2 |
ASCS虚拟IP | 10.0.100.11 | Overlay IP,由集群管理 |
ERS虚拟IP | 10.0.100.12 | Overlay IP,由集群管理 |
关键点:阿里云上的虚拟IP使用Overlay IP方案(通过路由表实现),由aliyun-vpc-move-ip资源代理管理。这些VIP不需要与物理网段重叠,可以使用独立的IP段。2.3.2 阿里云OpenAPI端点
集群STONITH设备和VIP资源代理需要通过阿里云OpenAPI进行操作。在VPC内部可以通过内网端点访问,无需配置NAT网关:
ECS端点:
ecs-vpc.<region-id>.aliyuncs.comVPC端点:
vpc-vpc.<region-id>.aliyuncs.com
2.3.3 /etc/hosts 配置
所有集群节点的/etc/hosts必须包含完整的名称解析(示例):
10.0.1.10 sapapp1 # ASCS节点
10.0.2.10 sapapp2 # ERS节点
10.0.100.11 vsapascs # ASCS虚拟主机名
10.0.100.12 vsapers # ERS虚拟主机名
2.4 文件系统设计
SAP应用层有两种文件系统架构可选,当前推荐使用Simple Mount架构:
2.4.1 Simple Mount架构(推荐,适用于新部署)
Simple Mount架构通过NFS共享替代集群控制的文件系统资源,大幅简化集群配置和维护。
NFS Server (阿里云NAS)
├── /sapmnt/<SID> ── 所有节点NFS挂载
└── /usr/sap/<SID> ── 所有集群节点NFS挂载
├── ASCS<xx>/ ── ASCS实例目录
├── ERS<xx>/ ── ERS实例目录
└── SYS/ ── 系统目录
各节点本地文件系统:
/usr/sap/ ── 本地XFS(包含sapservices, saphostagent)
各节点的/etc/fstab中配置NFS挂载:
<nas-endpoint>:/sapmnt/<SID> /sapmnt/<SID> nfs defaults 0 0
<nas-endpoint>:/usr/sap/<SID> /usr/sap/<SID> nfs defaults 0 0
2.4.2 传统架构(适用于已有集群)
传统架构为ASCS和ERS各使用独立的NAS文件系统,通过Pacemaker的Filesystem资源代理控制挂载/卸载:
NAS文件系统1 --> /usr/sap/<SID>/ASCS<xx> (由集群控制挂载)
NAS文件系统2 --> /usr/sap/<SID>/ERS<xx> (由集群控制挂载)
NFS共享 --> /sapmnt (OS层面挂载)
NFS共享 --> /usr/sap/<SID>/SYS (OS层面挂载)
2.5 Pacemaker集群配置
2.5.1 前提条件
操作系统:SUSE Linux Enterprise Server for SAP Applications 15 SP1或更高版本
软件包:
sap-suse-cluster-connector>= 3.1.0,sapstartsrv-resource-agents>= 0.9.1,resource-agents>= 4.x禁用ASCS和ERS的systemd自启动服务
安装阿里云专用STONITH设备(fence_aliyun)和VIP资源代理(aliyun-vpc-move-ip)
2.5.2 阿里云专用组件安装
安装相关依赖包:
# 安装libcurl-devel,fence-agents,pycurl,pexpect
zypper install libcurl-devel
zypper install fence-agents
pip3 install pycurl pexpect
# 安装阿里云SDK
pip install aliyun-python-sdk-core aliyun-python-sdk-vpc aliyun-python-sdk-ecs
安装最新的fence_aliyun(STONITH设备):
# 下载fence_aliyun
curl https://raw.githubusercontent.com/ClusterLabs/fence-agents/refs/heads/main/agents/aliyun/fence_aliyun.py \
-o /usr/sbin/fence_aliyun
chmod 755 /usr/sbin/fence_aliyun
chown root:root /usr/sbin/fence_aliyun
# 设置Python路径
sed -i "s|@PYTHON@|$(which python3 2>/dev/null || which python 2>/dev/null)|" /usr/sbin/fence_aliyun
sed -i "s|@FENCEAGENTSLIBDIR@|/usr/share/fence|" /usr/sbin/fence_aliyun
安装aliyun-vpc-move-ip(VIP资源代理):
mkdir -p /usr/lib/ocf/resource.d/aliyun
curl https://raw.githubusercontent.com/ClusterLabs/resource-agents/refs/heads/main/heartbeat/aliyun-vpc-move-ip \
-o /usr/lib/ocf/resource.d/aliyun/vpc-move-ip
chmod 755 /usr/lib/ocf/resource.d/aliyun/vpc-move-ip
chown root:root /usr/lib/ocf/resource.d/aliyun/vpc-move-ip
配置RAM角色认证:
创建RAM策略SAP-HA-ROLE-POLICY,包含以下权限:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:StartInstance",
"ecs:StopInstance",
"ecs:RebootInstance",
"ecs:Describe*"
],
"Resource": ["*"]
},
{
"Effect": "Allow",
"Action": [
"vpc:CreateRouteEntry",
"vpc:DeleteRouteEntry",
"vpc:Describe*"
],
"Resource": ["*"]
}
]
}
创建RAM角色SAP-HA-ROLE并绑定该策略,然后将此RAM角色绑定到所有集群ECS实例。
阿里云CLI授权:
在ECS上安装阿里云CLI:
/bin/bash -c "$(curl -fsSL https://aliyuncli.alicdn.com/install.sh)"配置阿里云CLI授权:
# aliyun configure --profile ecsRamRoleProfile --mode EcsRamRole
Configuring profile 'ecsRamRoleProfile' in 'EcsRamRole' authenticate mode...
Ecs Ram Role []:
Default Region Id []:
Default Output Format [json]: json (Only support json)
Default Language [zh|en] en:
Saving profile[ecsRamRoleProfile] ...Done.Ecs Ram Role: SAP-HA-ROLE
Default Region Id: 输入ECS所在的region id,如cn-shanghai
2.5.3 集群初始化
在节点1执行ha-cluster-init脚本。
ha-cluster-init -y -i eth0 -u在节点2执行ha-cluster-join脚本。
ha-cluster-join -y -c <节点1的node名称或ip地址> -i eth0在阿里云环境中使用udpu(单播)模式,对应参数 "-u"。2.5.4 ENSA2 Simple Mount集群资源配置(推荐)
前置条件检查
在Simple Mount资源配置下,sapstartsrv服务也将作为集群资源被集群独立管理,控制ASCS和ERS对应的sapstartsrv服务在哪个节点上运行。
因此需要检查当前操作系统中已经包含资源代理:sapstartsrv-resource-agents。
ENSA2 Simple Mount集群配置方案需要操作系统版本不低于SUSE Linux Enterprise Server for SAP 15 SP1。
# 检查系统中是否已经安装sapstartsrv-resource-agents资源代理
ls /usr/lib/ocf/resource.d/suse/SAPStartSrv
# 如系统中无法找到上述文件,执行下面的命令进行安装
zypper install sapstartsrv-resource-agents
这个包来自 SLE-Module-SAP-Applications 模块。如果 zypper 找不到这个包,检查以下模块是否启用:
SUSEConnect --list-extensions | grep SAP如果模块未激活,执行以下操作来激活模块:
SUSEConnect -p sle-module-sap-applications/<版本号>/x86_64此外,由于sapstartsrv服务由集群控制,因此建议禁用SAP系统systemd自启动服务,避免发生切换时,由于sapstartsrv进程冲突导致集群无法正常启动SAP资源。
# 检查当前机器的SAP实例systemd自启动服务
systemctl list-unit-files | grep SAP
# 根据上述命令的输出,执行下面的命令禁用该服务的开机自启动
systemctl disable SAP<SID>_<instance number> # ASCS
systemctl disable SAP<SID>_<instance number> # ERS集群脚本实例
以下是基于ENSA2 Simple Mount架构在阿里云上的完整Pacemaker资源配置示例(SID=EN2,ASCS实例号=00,ERS实例号=10):
# === 集群全局属性 ===
property cib-bootstrap-options: \
stonith-enabled="true" \
stonith-action="reboot" \
stonith-timeout="150"
rsc_defaults rsc-options: \
resource-stickiness="1" \
migration-threshold="3"
op_defaults op-options: \
timeout="600" \
record-pending=true
# === STONITH资源(阿里云fence_aliyun) ===
primitive res_ALIYUN_STONITH_1 stonith:fence_aliyun \
op monitor interval=120 timeout=60 \
params filter="InstanceIds=[\"<ECS Id1>\", \"<ECS Id2>\"]" plug=<ECS Id1> ram_role=SAP-HA-ROLE region=<region ID> \
meta target-role=Started
primitive res_ALIYUN_STONITH_2 stonith:fence_aliyun \
op monitor interval=120 timeout=60 \
params filter="InstanceIds=[\"<ECS Id1>\", \"<ECS Id2>\"]" plug=<ECS Id2> ram_role=SAP-HA-ROLE region=<region ID> \
meta target-role=Started
# STONITH位置约束:节点不运行自己的STONITH资源
location loc_stonith1_not_on_sapapp1 res_ALIYUN_STONITH_1 -inf: sapapp1
location loc_stonith2_not_on_sapapp2 res_ALIYUN_STONITH_2 -inf: sapapp2
# === ASCS资源 ===
# ASCS虚拟IP(使用阿里云vpc-move-ip)
# routing_table参数的值为ECS所在VPC对应的默认路由表ID
primitive rsc_ip_EN2_ASCS00 ocf:aliyun:vpc-move-ip \
params address=<ascs-vip> \
routing_table=<routing-table-id> \
endpoint=vpc-vpc.<region-id>.aliyuncs.com \
interface=eth0 \
op monitor interval=10s timeout=20s
# ASCS SAPStartSrv资源(Simple Mount架构专用)
primitive rsc_SAPStartSrv_EN2_ASCS00 ocf:suse:SAPStartSrv \
params InstanceName=EN2_ASCS00_sapen2as
# ASCS SAPInstance资源
primitive rsc_sap_EN2_ASCS00 SAPInstance \
op monitor interval=11 timeout=60 on-fail=restart \
params InstanceName=EN2_ASCS00_sapen2as \
START_PROFILE="/sapmnt/EN2/profile/EN2_ASCS00_sapen2as" \
AUTOMATIC_RECOVER=false \
meta resource-stickiness=5000 failure-timeout=60 \
migration-threshold=1 priority=10
# === ERS资源 ===
# ERS虚拟IP
# routing_table参数的值为ECS所在VPC对应的默认路由表ID
primitive rsc_ip_EN2_ERS10 ocf:aliyun:vpc-move-ip \
params address=<ers-vip> \
routing_table=<routing-table-id> \
endpoint=vpc-vpc.<region-id>.aliyuncs.com \
interface=eth0 \
op monitor interval=10s timeout=20s
# ERS SAPStartSrv资源
primitive rsc_SAPStartSrv_EN2_ERS10 ocf:suse:SAPStartSrv \
params InstanceName=EN2_ERS10_sapen2er
# ERS SAPInstance资源
primitive rsc_sap_EN2_ERS10 SAPInstance \
op monitor interval=11 timeout=60 on-fail=restart \
params InstanceName=EN2_ERS10_sapen2er \
START_PROFILE="/sapmnt/EN2/profile/EN2_ERS10_sapen2er" \
AUTOMATIC_RECOVER=false IS_ERS=true \
meta priority=1000
# === 资源组 ===
group grp_EN2_ASCS00 rsc_ip_EN2_ASCS00 rsc_SAPStartSrv_EN2_ASCS00 rsc_sap_EN2_ASCS00 \
meta resource-stickiness=3000
group grp_EN2_ERS10 rsc_ip_EN2_ERS10 rsc_SAPStartSrv_EN2_ERS10 rsc_sap_EN2_ERS10
# === 约束 ===
# ASCS和ERS不能运行在同一节点
colocation col_sap_EN2_not_both -5000: grp_EN2_ERS10 grp_EN2_ASCS00
# ASCS优先在ERS所在节点启动(故障切换后)
location loc_sap_EN2_failover_to_ers rsc_sap_EN2_ASCS00 \
rule 2000: runs_ers_EN2 eq 1
# ASCS先于ERS启动
order ord_sap_EN2_first_ascs Optional: rsc_sap_EN2_ASCS00:start rsc_sap_EN2_ERS10:stop
2.5.5 ENSA1传统架构集群资源配置
对于仍在使用SAP NetWeaver 7.40/7.50的场景,使用ENSA1架构。与ENSA2相比,主要区别在于:
使用Filesystem资源代理控制ASCS和ERS的文件系统挂载/卸载
不使用SAPStartSrv资源代理
资源组中包含Filesystem资源
# ASCS文件系统资源(传统架构)
primitive rsc_fs_EN2_ASCS00 Filesystem \
params device="<nas-mount-point>:/" \
directory="/usr/sap/EN2/ASCS00" \
fstype=nfs \
options="vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2" \
op start timeout=60s interval=0 \
op stop timeout=60s interval=0 \
op monitor interval=20s timeout=40s
# 资源组包含文件系统
group grp_EN2_ASCS00 rsc_ip_EN2_ASCS00 rsc_fs_EN2_ASCS00 rsc_sap_EN2_ASCS00 \
meta resource-stickiness=3000
2.5.6 sap-suse-cluster-connector集成
sap-suse-cluster-connector实现了SAP sapstartsrv与Pacemaker集群之间的通信接口(API v3),使SAP管理员通过sapcontrol或SAP MMC执行的操作能正确通知集群,避免集群误判。
安装和配置:
# 安装
zypper install sap-suse-cluster-connector
# 将<sid>adm用户加入haclient组
usermod -a -G haclient <sid>adm
# 在SAP实例profile中添加
service/halib = $(DIR_EXECUTABLE)/saphascriptco.so
service/halib_cluster_connector = /usr/bin/sap_suse_cluster_connector
3. SAP HANA数据库的高可用架构规划
SAP HANA数据库的高可用通过HANA System Replication(HSR)+ Pacemaker集群实现。SUSE提供了专用的资源代理SAPHanaController(或旧版SAPHana)和SAPHanaTopology来自动化管理。
3.1 HSR方案选型
方案 | 适用场景 | 切换时间 | 二次节点利用 | 推荐度 |
Performance Optimized | 生产环境,要求快速切换 | 短(表预加载) | 支持Read-Enabled只读 | 首选 |
Cost Optimized | 开发/测试,预算有限 | 较长(需先停非复制实例) | 运行非复制实例(QAS/DEV) | 预算敏感场景 |
3.1.1 Performance Optimized方案
二次节点配置表预加载(preload),数据常驻内存,切换时间通常很短。支持logreplay_readaccess操作模式,允许在二次节点上进行只读查询。

3.1.2 Cost Optimized方案
二次节点在正常运行时同时运行一个非复制的SAP HANA实例(如QAS),通过Pacemaker的反亲和约束(anti-colocation)管理。当主库需要切换时,先自动停止非复制实例,再执行takeover。

3.2 ECS选型
SAP HANA对硬件有严格的认证要求。在阿里云上,HANA节点必须使用经过SAP HANA Hardware Directory认证的ECS实例类型。
HANA认证实例,参考支持SAP HANA部署的ECS机型
选型原则:
主节点和备节点必须使用相同规格(两个站点都需要能运行Primary)
内存大小根据SAP HANA Sizing报告确定
Cost Optimized方案中,备节点内存需同时满足Secondary(减少内存模式)+ 非复制实例的需求
3.3 存储选型
SAP HANA对存储性能有严格要求,需要满足SAP HANA TDI(Tailored DataCenter Integration)存储标准。
挂载点 | 用途 | 存储类型 | 容量建议 | 性能要求 |
| 数据卷 | ESSD PL1及以上 | 1.5x RAM | 高IOPS、高吞吐 |
| 日志卷 | ESSD PL1及以上 | 0.5x RAM (最小512GB) | 极低延迟、高IOPS |
| 共享卷 | ESSD PL0 或 NAS | 1x RAM (最小256GB) | 中等 |
| SAP二进制 | ESSD PL0 | 50GB | 低 |
存储设计要点:
/hana/data和/hana/log使用本地ESSD云盘,不在节点间共享/hana/shared对集群至关重要,可使用ESSD云盘(各节点独立)或NAS共享使用
SAPHanaFilesystem资源代理监控/hana/shared的可用性文件系统统一使用XFS格式
3.4 组网设计
HANA集群的组网设计与应用层类似,但有额外的网络需求:
VPC网络规划:
├── 业务网络vSwitch (ring0): 用于SAP应用访问和集群心跳
│ ├── HANA Primary
│ └── HANA Secondary
├── 复制网络vSwitch(可选,与业务共用): 用于HANA System Replication数据传输
└── 管理网络vSwitch(可选): 用于运维管理
IP地址规划示例:
用途 | IP地址 | 主机名 |
HANA Primary物理IP | 10.0.1.20 | hana01 |
HANA Secondary物理IP | 10.0.1.21 | hana02 |
HANA Primary VIP | 10.0.100.20 | vhanadb |
HANA Read-Enabled VIP(可选) | 10.0.100.21 | vhanadbro |
HANA System Replication网络要求:
同步模式(sync/syncmem)对网络延迟敏感,主备节点之间的网络延迟应尽可能低
HANA默认使用端口
3<instance_number>01至3<instance_number>99进行通信
3.5 文件系统设计
HANA Primary (hana01) HANA Secondary (hana02)
├── /hana/shared/<SID>/ (ESSD) ├── /hana/shared/<SID>/ (ESSD)
├── /hana/data/<SID>/ (ESSD) ├── /hana/data/<SID>/ (ESSD)
├── /hana/log/<SID>/ (ESSD) ├── /hana/log/<SID>/ (ESSD)
└── /usr/sap/<SID>/ (ESSD) └── /usr/sap/<SID>/ (ESSD)
注意:HANA数据和日志卷在主备节点上各自独立,数据通过HANA System Replication在数据库层面复制,无需共享存储。
3.6 SAPHanaSR资源代理包的选择
SUSE为SAP HANA System Replication集群提供了两代资源代理包,分别适用于不同场景。在配置集群前,需要明确当前系统安装的是哪个版本,并根据需要选择。
3.6.1 两代资源代理包对比
维度 | SAPHanaSR(经典版) | SAPHanaSR-angi(新版) |
定位 | 经典版本,长期稳定 | 新一代(a next generation interface),是未来方向 |
提供的核心RA |
|
|
拓扑采集RA |
|
|
额外RA | 无 |
|
HA/DR Provider Hook |
|
|
Scale-up支持 | 支持 | 支持 |
Scale-out支持 | 有限 | 完整支持 |
Multi-tenant支持 | 有限 | 完整支持 |
SLES版本要求 | SLES 12 SP2+ / SLES 15+ | SLES 15 SP4+(推荐SP5+) |
共存性 | 不能与angi共存 | 不能与经典版共存 |
3.6.2 如何检查当前安装的版本
# 查看已安装的包
rpm -qa | grep SAPHanaSR
# 可能的输出:
# SAPHanaSR-0.155.0-... → 经典版
# SAPHanaSR-doc-0.155.0-...
# 或
# SAPHanaSR-angi-1.2.1-... → 新版
# SAPHanaSR-angi-doc-1.2.1-...
根据安装的包确认使用对应的RA名称:
# 经典版 - 确认SAPHana RA存在
ls /usr/lib/ocf/resource.d/suse/SAPHana
# 新版 - 确认SAPHanaController RA存在
ls /usr/lib/ocf/resource.d/suse/SAPHanaController
3.6.3 选型建议
新部署且SLES >= 15 SP4:推荐使用
SAPHanaSR-angi,它是SUSE未来的主线方向,功能更完善已有集群运行经典版:无需强制迁移,经典版仍然受支持;升级到angi需要重新配置集群资源
SLES 15 SP3及更低版本:只能使用经典版
SAPHanaSR两个包不能共存,切换时需要先卸载旧包再安装新包:
# 从经典版切换到angi(需在集群维护模式下操作)
zypper remove SAPHanaSR SAPHanaSR-doc
zypper install SAPHanaSR-angi SAPHanaSR-angi-doc
3.6.4 对集群配置的影响
两个版本的集群资源配置差异主要在RA名称和hook脚本:
配置项 | SAPHanaSR(经典版) | SAPHanaSR-angi(新版) |
主资源 |
|
|
Hook脚本路径 |
|
|
Hook provider名 |
|
|
额外hook | 无 |
|
sudo配置 |
|
|
本文档后续章节中的集群配置示例基于新版 SAPHanaSR-angi(ocf:suse:SAPHanaController)。如使用 SAPHanaSR,请将RA名称替换为 ocf:suse:SAPHana,并参考SUSE官方的SAPHanaSR配置文档调整hook脚本配置。
3.7 Pacemaker集群配置
3.7.1 HANA System Replication配置
在配置集群之前,需先完成HANA System Replication的设置:
# 在Primary节点 (hana01) 上启用SR
hdbnsutil -sr_enable --name=SiteA
# 在Secondary节点 (hana02) 上注册
hdbnsutil -sr_register --remoteHost=hana01 --remoteInstance=<inst_nr> \
--replicationMode=sync --operationMode=logreplay --name=SiteB
3.7.2 HA/DR Provider Hook脚本配置
SUSE提供了三个关键的HA/DR provider hook脚本,需在HANA的global.ini中配置:
susHanaSR.py — 监控SR连接状态变化(必需):
[ha_dr_provider_sushanasr]
provider = susHanaSR
path = /usr/share/SAPHanaSR-angi/
execution_order = 1
[trace]
ha_dr_sushanasr = info
susTkOver.py — 在takeover前进行检查,阻止非预期的手动takeover:
[ha_dr_provider_sustkover]
provider = susTkOver
path = /usr/share/SAPHanaSR-angi/
execution_order = 2
[trace]
ha_dr_sustkover = info
susChkSrv.py — 监控服务状态变化,加速indexserver故障时的切换:
[ha_dr_provider_suschksrv]
provider = susChkSrv
path = /usr/share/SAPHanaSR-angi/
execution_order = 3
action_on_lost = stop
[trace]
ha_dr_suschksrv = info
配置sudo权限:
创建/etc/sudoers.d/SAPHanaSR:
<sid>adm ALL=(ALL) NOPASSWD: /usr/sbin/crm_attribute -n hana_<sid>_*
<sid>adm ALL=(ALL) NOPASSWD: /usr/bin/SAPHanaSR-hookHelper --sid=<SID> *
3.7.3 STONITH/Fencing配置
参考SAP应用服务器高可用架构规划的fence_aliyun方案(2.5.2 阿里云专用组件安装)。
3.7.4 HANA集群资源配置(Performance Optimized)
以下为完整的HANA Pacemaker集群资源配置示例(SID=HA1,实例号=10):
# === 集群全局属性 ===
property cib-bootstrap-options: \
stonith-enabled="true" \
stonith-action="reboot" \
stonith-timeout="150" \
priority-fencing-delay="30"
rsc_defaults rsc-options: \
resource-stickiness="1000" \
migration-threshold="5000"
op_defaults op-options: \
timeout="600" \
record-pending=true
# === STONITH ===
# 阿里云fence_aliyun(与应用层类似)
primitive res_ALIYUN_STONITH_1 stonith:fence_aliyun \
op monitor interval=120 timeout=60 \
params filter="InstanceIds=[\"<ECS Id1>\", \"<ECS Id2>\"]" plug=<ECS Id1> ram_role=SAP-HA-ROLE region=<region ID> \
meta target-role=Started
primitive res_ALIYUN_STONITH_2 stonith:fence_aliyun \
op monitor interval=120 timeout=60 \
params filter="InstanceIds=[\"<ECS Id1>\", \"<ECS Id2>\"]" plug=<ECS Id2> ram_role=SAP-HA-ROLE region=<region ID> \
meta target-role=Started
location loc_node1_stonith_not_on_node1 res_ALIYUN_STONITH_1 -inf: <node1>
location loc_node2_stonith_not_on_node2 res_ALIYUN_STONITH_2 -inf: <node2>
# === SAPHanaTopology ===
primitive rsc_SAPHanaTop_HA1_HDB10 ocf:suse:SAPHanaTopology \
op start interval=0 timeout=600 \
op stop interval=0 timeout=300 \
op monitor interval=50 timeout=600 \
params SID=HA1 InstanceNumber=10
clone cln_SAPHanaTop_HA1_HDB10 rsc_SAPHanaTop_HA1_HDB10 \
meta clone-node-max=1 interleave=true
# === SAPHanaController ===
primitive rsc_SAPHanaCon_HA1_HDB10 ocf:suse:SAPHanaController \
op start interval=0 timeout=3600 \
op stop interval=0 timeout=3600 \
op promote interval=0 timeout=900 \
op demote interval=0 timeout=320 \
op monitor interval=60 role=Promoted timeout=700 \
op monitor interval=61 role=Unpromoted timeout=700 \
params SID=HA1 InstanceNumber=10 \
PREFER_SITE_TAKEOVER=true \
DUPLICATE_PRIMARY_TIMEOUT=7200 \
AUTOMATED_REGISTER=false \
meta priority=100
clone mst_SAPHanaCon_HA1_HDB10 rsc_SAPHanaCon_HA1_HDB10 \
meta clone-node-max=1 promotable=true interleave=true maintenance=true
# === 虚拟IP ===
# Primary VIP
primitive rsc_ip_HA1_HDB10 ocf:aliyun:vpc-move-ip \
params address=10.0.100.20 routing_table=<rt-id> \
endpoint=vpc-vpc.<region-id>.aliyuncs.com interface=eth0
# === 约束 ===
# VIP跟随Promoted的HANA
colocation col_saphana_ip_HA1_HDB10 2000: \
rsc_ip_HA1_HDB10:Started mst_SAPHanaCon_HA1_HDB10:Promoted
# Topology先于Controller启动
order ord_saphana_HA1_HDB10 Optional: \
cln_SAPHanaTop_HA1_HDB10 mst_SAPHanaCon_HA1_HDB10
3.7.5 关键参数说明
参数 | Performance Optimized | Cost Optimized | 说明 |
PREFER_SITE_TAKEOVER | true | false | 是否优先切换到备站(而非本地重启) |
AUTOMATED_REGISTER | false (初始) / true (生产) | false / true | 是否自动注册故障Primary为新Secondary |
DUPLICATE_PRIMARY_TIMEOUT | 7200 | 7200 | 双主检测时间窗口(秒) |
3.7.6 Active/Active Read-Enabled(可选)
如果启用了logreplay_readaccess操作模式,可以为Secondary添加只读VIP:
primitive rsc_ip_HA1_HDB10_readenabled ocf:aliyun:vpc-move-ip \
params address=10.0.100.20 routing_table=<rt-id> \
endpoint=vpc-vpc.<region-id>.aliyuncs.com interface=eth0
colocation col_saphana_ip_HA1_HDB10_readenabled 2000: \
rsc_ip_HA1_HDB10_readenabled:Started mst_SAPHanaCon_HA1_HDB10:Unpromoted
4. Web Dispatcher的高可用架构部署方案
SAP Web Dispatcher是SAP系统的HTTP/HTTPS入口点,负责将Web请求分发到后端应用服务器。在高可用架构中,Web Dispatcher本身也需要避免成为单点故障。
4.1 方案概述
在阿里云上部署Web Dispatcher高可用有以下几种方案:
方案 | 复杂度 | 适用场景 | 优势 | 局限 |
方案A:嵌入式部署 | 低 | 小型系统 | 无需额外节点 | 依赖ASCS集群 |
方案B:独立Pacemaker集群 | 中 | 企业级部署 | 完全自主HA | 需要额外节点 |
方案C:阿里云SLB + 多实例 | 低 | 云原生方案 | 无单点故障、可弹性扩展 | 需配置健康检查 |
4.2 方案A:嵌入式部署(Embedded in ASCS)
SAP支持将Web Dispatcher嵌入到ASCS实例中运行(参见SAP Note 3115889)。在此方案中,Web Dispatcher作为ASCS的一个子进程,随ASCS一起由Pacemaker管理。

优点:
无需额外基础设施
与ASCS共享集群管理,运维简单
Web Dispatcher随ASCS自动切换
缺点:
Web Dispatcher的负载可能影响ASCS性能
切换期间Web服务中断
不适合高并发Web访问场景
4.3 方案B:独立Pacemaker集群
为Web Dispatcher构建独立的两节点Pacemaker集群,采用active/passive模式。

集群资源配置:
# Web Dispatcher VIP
primitive rsc_ip_WD ocf:aliyun:vpc-move-ip \
params address=<wd-vip> \
routing_table=<rt-id> \
endpoint=vpc-vpc.<region-id>.aliyuncs.com \
interface=eth0 \
op monitor interval=10s timeout=20s
# === Web Dispatcher SAPInstance 资源 ===
primitive rsc_sap_WD_W00 SAPInstance \
operations $id=rsc_sap_WD_W00-operations \
op monitor interval=11 timeout=60 on-fail=restart \
params InstanceName=<SID>_W00_<虚拟主机名> \
START_PROFILE="/sapmnt/<SID>/profile/<SID>_W00_<虚拟主机名>" \
AUTOMATIC_RECOVER=false \
MONITOR_SERVICES="sapwebdisp" \
meta resource-stickiness=5000 failure-timeout=60 \
migration-threshold=1 priority=10
# 资源组
group grp_WD rsc_ip_WD rsc_sap_WD_W00
# STONITH(与应用层类似配置fence_aliyun)
优点:
Web Dispatcher完全独立,不影响ASCS
自动故障切换
缺点:
需要额外的ECS实例(至少2台)
切换期间有短暂服务中断
4.4 方案C:阿里云SLB + 多实例(推荐)
利用阿里云SLB(Server Load Balancer)实现Web Dispatcher的负载均衡和高可用。这是云原生环境下的推荐方案。

部署架构:
SLB配置:
创建SLB实例(内网或公网,根据访问需求选择)
配置HTTP/HTTPS监听,端口通常为443(HTTPS)或8443
配置后端服务器组,加入多台Web Dispatcher实例
配置健康检查:HTTP方式,检查路径
/sap/public/ping,期望返回码200
Web Dispatcher实例:
部署2-3个独立的Web Dispatcher实例
每个实例独立运行,无需集群软件
使用相同的配置(
icm/server_port、后端目标等)
会话保持:
SLB配置基于Cookie的会话保持
或在Web Dispatcher层配置
wdisp/sticky_sid参数
SLB健康检查配置建议:
参数 | 推荐值 |
检查协议 | HTTP |
检查路径 | /sap/public/ping |
正常状态码 | 200 |
检查间隔 | 5秒 |
不健康阈值 | 3次 |
健康阈值 | 2次 |
优点:
无单点故障,多实例同时服务
可根据负载弹性扩缩Web Dispatcher实例
无需Pacemaker集群,运维复杂度低
支持HTTPS卸载(SSL Offloading)
缺点:
需要额外的SLB费用
需要确保所有Web Dispatcher实例配置一致
4.5 方案选择建议
场景 | 推荐方案 |
小型SAP系统,Web访问量低 | 方案A:嵌入式部署 |
传统企业部署,偏好标准集群方案 | 方案B:Pacemaker集群 |
云原生部署,Web访问量大 | 方案C:阿里云SLB + 多实例 |
混合场景(SAP Fiori + 传统GUI) | 方案C用于Fiori,方案A/B用于内部访问 |
5. 参考文献
5.1 SUSE Best Practices文档
SAP NetWeaver Enqueue Replication 1 High Availability Cluster - SAP NetWeaver 7.40 and 7.50 on Alibaba Cloud
SUSE Linux Enterprise Server for SAP applications 15 SP1
https://documentation.suse.com/sbp/sap-15/
SAP S/4 HANA - Enqueue Replication 2 High Availability Cluster With Simple Mount
SUSE Linux Enterprise Server for SAP applications 15 SP1
https://documentation.suse.com/sbp/sap-15/
SAP S/4 HANA - Enqueue Replication 2 High Availability Cluster
SUSE Linux Enterprise Server for SAP applications 15 SP1
https://documentation.suse.com/sbp/sap-15/
SAP HANA System Replication Scale-Up - Performance Optimized Scenario (SAPHanaSR-angi)
SUSE Linux Enterprise Server for SAP applications 15 SP4
https://documentation.suse.com/sbp/sap-15/
SAP HANA System Replication Scale-Up - Cost Optimized Scenario
SUSE Linux Enterprise Server for SAP applications 15 GA
https://documentation.suse.com/sbp/sap-15/
SAP NetWeaver Enqueue Replication 1 High Availability Cluster - SAP NetWeaver 7.40 and 7.50
SUSE Linux Enterprise Server for SAP applications 15 SP1
https://documentation.suse.com/sbp/sap-15/
5.2 SAP Notes
SAP Note 2552731 - SAP Applications on Alibaba Cloud: Supported Products and IaaS VM Types
SAP Note 2552652 - SAP on Alibaba Cloud: Support Prerequisites
SAP Note 2564176 - SAP on Linux with Alibaba Cloud: Enhanced Monitoring
SAP Note 1380654 - SAP support in IaaS environments
SAP Note 2205917 - SAP HANA DB: Recommended OS settings for SLES 12 / SLES for SAP
SAP Note 2684254 - SAP HANA DB: Recommended OS settings for SLES 15 / SLES for SAP
SAP Note 3139184 - Linux: systemd integration for sapstartsrv and SAP Hostagent
SAP Note 3115889 - SAP Web Dispatcher embedded deployment in an ASCS/SCS instance