亚马逊AWS官方博客
第三部分 SAP on AWS HA Single AZ
当在AWS平台上进行SAP架构设计时,高可用往往伴随着DR统一考虑,我将SAP on AWS在云端部署的常见架构汇总成以下的四个专题。
- 引论 SAP on AWS 架构部署
- 第一部分 SAP on AWS EC2 Auto Recovery
- 第二部分 SAP on AWS Pilot Light
- 第三部分 SAP on AWS HA Single AZ
- 第四部分 SAP on AWS HA Multiple AZ
本文我将介绍 SAP on AWS在云端部署的常见架构第三种方式
SAP on AWS HA Single AZ
单可用区HA,主要用于一些客户对于跨可用区延迟有较高要求的场景,为了弥补数据跨可用区的冗余,根据客户预算不同以及RTO/RPO的需求可在另外可用区通过Pilot Light(详见专题二) 或 S3备份恢复方式实现数据跨可用区的冗余。
为了更好说明此架构特点,现以部署在SUSE 操作系统上的S/4 HANA分布式部署环境为例分别说明在单可用区高可用部署架构中各应用组件如何实现服务级别的保护。
SAP系统逻辑架构图
在上述SAP在高可用架构中ASCS 和 HANA DB 均采用SUSE HAE 高可用软件实现服务级别的高可用保护,SAP AAS 通过多节点实现冗余。
此架构优势如下:
- 由于节点都在同一个可用区,节点之间延迟最低,可提供最高标准的同步复制。[1]数据库RPO接近0,通过HANA HSR 的SYNC模式实现同一可用区HANA节点的数据同步。
- 基于服务状态监控,由HA软件检测服务运行状态,当状态异常时由HA软件实现服务资源的自动切换。
- 网络架构和跨可用区相对比较简单,ASCS、HANA DB 的浮动IP的访问可通过Secondary IP实现。
- 为了达到更广泛的容灾场景(如跨区域容灾),可根据业务的RPO/RTO需求在其他可用区采用Pilot Light架构或通过S3备份恢复方式实现数据容灾。
此架构同样也存在以下劣势:
- 成本相对较高,整个架构对于ASCS以及HANA数据库需要同比例热备资源且需要购买HA软件的订阅服务。
- 系统架构相对复杂,架构本身引入HA软件对SAP核心资源进行状态监控和调度。
- 原生不支持跨可用区冗余,对于跨可用数据容灾需要额外的计算资源,根据RTO/RPO的要求采用Pilot Light 或冷备的方式。
为了优化整体高可用架构,建议在架构设计过程中采用以下优化内容:
- 采用”spread”类型的置换组:将SAP ASCS和ERS以及SAP AAS应用服务器节点部署在不同的主机硬件上避免由于单一硬件问题而导致系统整体不可用,最终提高系统架构冗余。[2]
- 采用AWS VPC 内部DNS:如数据库应用实例无主动发起数据连接到其他应用,建议数据库应用实例所在节点采用AWS VPC 内部DNS解析避免由于客户自建DNS失效而产生不必要的误切。[3]
- 优化资源标签:设置唯一的高可用节点标签,减少系统状态检测返回结果。
- 避免事件干扰:如ASCS 和 HANA DB 使用第三方高可用解决方案需关闭EC2自身的Auto Recovery 功能,避免事件冲突。
下面以一套S/4系统为例说明同一可用区HA架构在AWS上的核心功能实现。
置放群组设置实现:
- 使用命令或者Console关闭ASCS节点
- 创建“spread”模式置换组
aws ec2 create-placement-group –group-name SAP-HD1-ASCS-Group –strategy spread
- 将已关闭的SAP ASCS节点加入到已创建的置换组中
aws ec2 modify-instance-placement –instance-id xxxxxxxxxx –group-name SAP-HD1-ASCS-Group
- 启动已关闭的ASCS节点
- 置换组模式检查
aws ec2 describe-instances –instance-id xxxxxx |findstr “SAP-HD1-ASCS-Group”
单可用区高可用实现
SAP ASCS 服务负责终端访问,HANA负责后端数据存储。对于SAP高可用架构而言更多考虑终端访问服务访问的冗余既ASCS如何通过Secondary IP实现资源切换。AWS默认功能包 aws-vpc-move-ip (Move IP within a VPC of the AWS EC2)主要通过Overlay IP 和 路由表实现浮动IP功能,但由于OverlayIP 无法在VPC外访问所以在单可用区架构中如果想使用此AWS默认功能包需要对它进行调整[4]。可对组件包中操作脚本调整如下:
(aws ec2 describe-instances –instance-ids $EC2_INSTANCE_ID | jq -r ‘.Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId’)
或使用AWS原生awsvip组件包[5] 和IPaddr2组合实现(推荐)。 awsvip: 用于AWS Secondary IP的处理。 对于AWS Amazon Linux 当awsvip触发CLI命令时可通过ec2-net-utils 包在实例运行期间配置附加的其他网络接口,在 DHCP 租约续订期间更新辅助 IPv4 地址,并更新相关的路由规则。[6] 截止目前SAP S/4 HANA 支持的OS 不包含Amazon Linux,所以对于OS 层面的IP地址更新我们需要额外的组件包IPaddr2实现。(感谢Johnny斐文提供素材)
单可用区ASCS/ERS资源组状态信息
更多信息请参考
[1] SAP网络延迟说明:SAP Notes 500235 – Network Diagnosis with NIPING
[2] AWS置放组说明:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html
[3] AWS VPC说明:https://amazonaws-china.com/cn/premiumsupport/knowledge-center/vpc-enable-private-hosted-zone
[4] SUSE HAE on AWS for SAP: SAP Notes 2309342 – SUSE Linux Enterprise High Availability Extension on AWS for SAP HANA
[5] AWS VIP Agent说明: https://github.com/ClusterLabs/resource-agents/blob/master/heartbeat/awsvip
[6] AWS EC2如何使用多个IPV4:https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/MultipleIP.html