阿里云上的SAP高可用架构

更新时间:
复制为 MD 格式

1. SAP高可用架构基本概念简介

1.1 高可用性的定义与目标

高可用性(High Availability, HA)是指通过冗余的技术架构设计,消除单点故障(Single Point of Failure, SPOF),使SAP系统在组件发生故障时能够自动切换到备用组件,从而将业务中断时间降到最低。

SAP系统的高可用架构通常围绕以下核心目标展开:

  • 消除单点故障:在应用层、数据库层、网络层和存储层分别设计冗余机制

  • 自动故障检测与切换:通过集群软件(如Pacemaker)实现故障的自动感知和资源的自动迁移

  • 数据零丢失:通过同步复制(Synchronous Replication)确保故障切换时不丢失已提交事务

  • 最小化切换时间:通过预加载、内存保持等技术缩短故障切换所需时间

1.2 SAP系统的分层架构

一个典型的SAP系统采用分布式三层架构:

image

每一层都有对应的高可用方案:

层级

关键组件

高可用方案

表示层

SAP Web Dispatcher

HA集群 / 负载均衡

应用层 - 中央服务

ASCS (ABAP Central Services)

Enqueue Replication + Pacemaker集群

应用层 - 应用服务器

PAS / AAS

多实例横向扩展(无需集群)

数据库层

SAP HANA

System Replication + Pacemaker集群

1.3 核心高可用技术组件

1.3.1 Pacemaker集群

PacemakerLinux环境下的开源高可用集群资源管理器,是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 ServerSAP系统中管理锁表的关键组件。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高可用架构,推荐采用独立集群的设计模式:

image

关键设计原则:

  • 应用层中央服务(ASCS/ERS)组成独立的两节点Pacemaker集群

  • SAP HANA数据库组成独立的两节点Pacemaker集群

  • PAS/AAS应用服务器不需要集群化,通过多实例部署实现冗余

  • 共享文件系统使用阿里云NAS服务


2. SAP应用服务器的高可用架构规划

SAP应用服务器层的高可用核心在于ASCS(ABAP Central Services)和ERS(Enqueue Replication Server)的集群化。ASCS包含Message ServerEnqueue Server,是SAP系统中最关键的单点故障组件。

2.1 ECS选型

2.1.1 ASCS/ERS节点

ASCSERS节点的资源需求相对较低,主要消耗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两个节点应选择相同的实例规格,因为任一节点都可能同时运行ASCSERS实例。

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应用层涉及的存储需求分为以下几类:

存储用途

推荐方案

文件系统

说明

/sapmnt/<SID>

阿里云NAS(通用型)

NFS v4

所有节点共享,存放SAP全局配置和profile

/usr/sap/<SID>/SYS

阿里云NAS(通用型)

NFS v4

SAP系统目录,所有节点共享

/usr/sap/<SID>/ASCS<xx>

阿里云NAS(通用型)

NFS v4

ASCS实例目录,Simple Mount方案下通过NFS共享

/usr/sap/<SID>/ERS<xx>

阿里云NAS(通用型)

NFS v4

ERS实例目录,Simple Mount方案下通过NFS共享

/usr/sap (本地)

云盘(ESSD)

XFS

本地目录,包含sapservicessaphostagent

阿里云NAS配置要点:

  • 选择通用型NAS

  • ASCSERS各创建独立的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.com

  • VPC端点: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 传统架构(适用于已有集群)

传统架构为ASCSERS各使用独立的NAS文件系统,通过PacemakerFilesystem资源代理控制挂载/卸载:

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

  • 禁用ASCSERSsystemd自启动服务

  • 安装阿里云专用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服务也将作为集群资源被集群独立管理,控制ASCSERS对应的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资源代理控制ASCSERS的文件系统挂载/卸载

  • 不使用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 sapstartsrvPacemaker集群之间的通信接口(API v3),使SAP管理员通过sapcontrolSAP 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操作模式,允许在二次节点上进行只读查询。

image

3.1.2 Cost Optimized方案

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

image

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)存储标准。

挂载点

用途

存储类型

容量建议

性能要求

/hana/data/<SID>

数据卷

ESSD PL1及以上

1.5x RAM

IOPS、高吞吐

/hana/log/<SID>

日志卷

ESSD PL1及以上

0.5x RAM (最小512GB)

极低延迟、高IOPS

/hana/shared/<SID>

共享卷

ESSD PL0 或 NAS

1x RAM (最小256GB)

中等

/usr/sap

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>013<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资源代理包的选择

SUSESAP HANA System Replication集群提供了两代资源代理包,分别适用于不同场景。在配置集群前,需要明确当前系统安装的是哪个版本,并根据需要选择。

3.6.1 两代资源代理包对比

维度

SAPHanaSR(经典版)

SAPHanaSR-angi(新版)

定位

经典版本,长期稳定

新一代(a next generation interface),是未来方向

提供的核心RA

ocf:suse:SAPHana

ocf:suse:SAPHanaController

拓扑采集RA

ocf:suse:SAPHanaTopology

ocf:suse:SAPHanaTopology(增强版)

额外RA

SAPHanaFilesystem(用于scale-out NFS监控)

HA/DR Provider Hook

SAPHanaSR.py

susHanaSR.pysusTkOver.pysusChkSrv.py

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(新版)

主资源

ocf:suse:SAPHana

ocf:suse:SAPHanaController

Hook脚本路径

/usr/share/SAPHanaSR/

/usr/share/SAPHanaSR-angi/

Hook provider

SAPHanaSR

susHanaSR

额外hook

susTkOversusChkSrv

sudo配置

crm_attribute

crm_attribute + SAPHanaSR-hookHelper

本文档后续章节中的集群配置示例基于新版 SAPHanaSR-angiocf: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脚本,需在HANAglobal.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 DispatcherSAP系统的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管理。

image

优点:

  • 无需额外基础设施

  • ASCS共享集群管理,运维简单

  • Web DispatcherASCS自动切换

缺点:

  • Web Dispatcher的负载可能影响ASCS性能

  • 切换期间Web服务中断

  • 不适合高并发Web访问场景

4.3 方案B:独立Pacemaker集群

Web Dispatcher构建独立的两节点Pacemaker集群,采用active/passive模式。

image

集群资源配置:

# 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的负载均衡和高可用。这是云原生环境下的推荐方案。

image

部署架构:

  1. SLB配置:

    • 创建SLB实例(内网或公网,根据访问需求选择)

    • 配置HTTP/HTTPS监听,端口通常为443(HTTPS)或8443

    • 配置后端服务器组,加入多台Web Dispatcher实例

    • 配置健康检查:HTTP方式,检查路径/sap/public/ping,期望返回码200

  2. Web Dispatcher实例:

    • 部署2-3个独立的Web Dispatcher实例

    • 每个实例独立运行,无需集群软件

    • 使用相同的配置(icm/server_port、后端目标等)

  3. 会话保持:

    • 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文档

  1. 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/

  2. 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/

  3. 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/

  4. 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/

  5. 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/

  6. 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