ASCS/ERS 实例安装与集群接管准备
本文档承接《集群初始化》完成后的集群环境,先初始化 ASCS/ERS 虚拟主机名,再完成 SAP 实例安装与集群接管准备。
后续路径:完成本文档后进入《ASCS/ERS 集群资源配置》。新系统使用 ENSA2 Simple Mount(推荐);SAP NetWeaver 7.40/7.50 等老系统使用 ENSA1 Classic Mount(备选)。
1. 虚拟主机名初始化
SAP 应用层高可用架构下,要将 ASCS 与 ERS 实例分别安装在对应的虚拟主机名下。但在 Pacemaker 集群控制的 aliyun-vpc-move-ip 资源正常运行之前,ECS 的虚拟 IP 地址是不生效的,对应的虚拟主机名也无法正确解析。因此在 ASCS 与 ERS 实例安装之前,建议先在已经初始化的集群中,配置好 aliyun-vpc-move-ip 资源。
以 ENSA2 Simple Mount 架构在阿里云上的资源配置(SID=EN2,ASCS实例号=00,ERS实例号=10)为例,对应的 aliyun-vpc-move-ip 集群脚本如下:
# 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
# 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
可将脚本保存为文件后按《ASCS/ERS 集群资源配置》第 1.2 节的维护模式 + crm configure load update 方式应用;直接粘贴进 crm configure 交互环境亦可。以上两个 VIP 资源也会出现在《ASCS/ERS 集群资源配置》第 1 / 2 章的完整集群脚本中,重复加载为幂等更新。
完成上述配置后,确保 aliyun-vpc-move-ip 资源正常运行,虚拟 IP 地址能够被 Ping 通,虚拟主机名能够被正确解析和访问,之后即可进行 ASCS 与 ERS 实例的安装动作。
实例安装时,需要为 SWPM 提供对应的启动参数,确保实例安装在虚拟主机名上。
./sapinst SAPINST_USE_HOSTNAME=<虚拟主机名>
实例成功安装后,继续集群资源的配置。
2. SAP 实例安装与集群接管准备
分别在节点一(本例为 sapapp1)通过 SAP SWPM 安装 ASCS 实例,在节点二(本例为 sapapp2)安装 ERS 实例。
安装时,参考本文第 1 章,需要将 ASCS 和 ERS 实例安装在虚拟主机名上,因此在执行 SWPM 时需要提供虚拟主机名参数。
关于使用 SWPM 执行 ASCS 与 ERS 实例的安装步骤,请参考 SAP 官方安装 Guide。
安装完成后,需要进行一系列后处理操作,将实例的控制权从默认的 systemd 自启动机制移交给 Pacemaker 集群。
2.1 停止 ASCS 和 ERS
安装完成后,SAP 实例处于运行状态。在配置集群接管之前,需要先停止:
# 在 ASCS 节点
su - <sid>adm
sapcontrol -nr 00 -function Stop
sapcontrol -nr 00 -function StopService
# 在 ERS 节点
su - <sid>adm
sapcontrol -nr 10 -function Stop
sapcontrol -nr 10 -function StopService
StopService 会停止 sapstartsrv 框架进程;Stop 会停止 SAP 工作进程。两步都执行能确保完全停止。
2.2 交叉注册 ASCS 和 ERS
关键步骤,遗漏会导致集群 failover 失败。sapinst 安装时仅在当前节点注册对应实例(ASCS 只在 ASCS 节点注册,ERS 只在 ERS 节点注册)。集群 failover 后 ASCS/ERS 可能运行在任一节点上,因此必须在两个节点上都注册两个实例。
# 在 ASCS 节点注册 ERS:
LD_LIBRARY_PATH=/usr/sap/hostctrl/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
/usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/<SID>/SYS/profile/<SID>_ERS<xx>_<ers-virtual-hostname> -reg
# 在 ERS 节点注册 ASCS:
LD_LIBRARY_PATH=/usr/sap/hostctrl/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH
/usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/<SID>/SYS/profile/<SID>_ASCS<xx>_<ascs-virtual-hostname> -reg
注册完成后,两个节点的 systemd 输出应一致:
systemctl list-unit-files | grep SAP
# 预期输出(两个节点相同):
# SAP<SID>_00.service disabled disabled
# SAP<SID>_10.service disabled disabled
2.3 禁用 systemd 服务
集群接管的关键要求。SUSE 官方文档明确指出:"This is mandatory for giving control over the instance to the HA cluster." 参见 ocf_suse_SAPStartSrv(7) 和 SAPStartSrv_basic_Cluster(7)。
systemctl disable SAP<SID>_00.service
systemctl stop SAP<SID>_00.service
systemctl disable SAP<SID>_10.service
systemctl stop SAP<SID>_10.service
验证禁用状态:
systemctl list-unit-files | grep SAP
# SAP<SID>_00.service disabled disabled
# SAP<SID>_10.service disabled disabled
systemctl list-unit-files | grep sap
# saphostagent.service enabled enabled
# saptune.service enabled enabled
systemctl disable后,OS 启动时不再自动拉起 ASCS/ERS 实例,由SAPStartSrv资源代理通过集群控制。saphostagent.service和saptune.service应保持enabled,不受影响。/usr/sap/sapservices文件依然存在(兼容性),内容为 `systemctl --no-ask-password start SAP<SID>_<instance>` 格式的一行一条记录。
说明
启用 sapping / sappong 服务(Simple Mount 架构必需)
除禁用实例自启动外,还必须启用 sapping 和 sappong 两个辅助服务。这两个服务的作用是在开机时临时隐藏/usr/sap/sapservices文件,防止 sapinit 在开机时批量拉起所有 SAP 实例的 sapstartsrv:
服务 | 作用 | 时机 |
| 隐藏 |
|
| 恢复 |
|
为什么必需:Simple Mount 架构下,所有集群节点共享同一实例工作目录。开机时 sapinit 会读取 sapservices 文件,为每个实例都启动 sapstartsrv——这会导致实例的 sapstartsrv 在两个节点上同时运行,可能损坏正在运行实例的工作目录内容(跨节点副作用)。隐藏 sapservices 文件后,sapstartsrv 的启动完全交给 SAPStartSrv 资源代理按实例控制。
# SUSE:安装包名 sapstartsrv-resource-agents
zypper install sapstartsrv-resource-agents
# 两个节点上都启用
systemctl enable sapping.service sappong.service
# 验证
systemctl list-unit-files sapping.service sappong.service
# sapping.service enabled disabled
# sappong.service enabled disabled
注意:这两个服务仅供开机时序使用,运行期间不要手动执行 sapinit 或这两个服务,否则会触发同样的跨节点干扰。
配置 systemd 实例单元 Restart=no(systemd 集成环境必需)
SAP Kernel 788 及以上版本的 sapstartsrv -reg 注册实例时,生成的 systemd unit 文件(/etc/systemd/system/SAP<SID>_<nr>.service)默认带有 Restart=on-failure。这意味着 sapstartsrv 进程崩溃时,systemd 会绕过集群自动重启它——集群将失去对实例状态的真实控制。
适用条件:仅当实例采用 systemd 集成(SAP Kernel 788+)时需要。可通过 systemctl cat SAP<SID>_<nr>.service 查看 unit 中是否有 Restart= 行来确认。如果实例走 SystemV 风格(旧内核),此配置不需要。
通过 systemd drop-in 文件覆盖 Restart 参数,确保只有集群(SAPStartSrv RA)能控制 sapstartsrv 的生命周期:
# 为 ASCS 和 ERS 实例各创建 drop-in 目录和配置文件
# 重复执行,替换 <instance> 为 ASCS 和 ERS 的实例号
mkdir -p /etc/systemd/system/SAP<SID>_<instance>.service.d
cat << EOF > /etc/systemd/system/SAP<SID>_<instance>.service.d/HA.conf
[Service]
Restart=no
EOF
# 重载 systemd 使配置生效
systemctl daemon-reload
为什么用 drop-in 而不是直接改 unit 文件:SAP 内核升级或重新执行 sapstartsrv -reg 会重写 unit 文件,drop-in 目录(.service.d/)下的配置可以持久生效,不会被覆盖。
验证 drop-in 是否生效:
# 查看 drop-in 已被加载
systemd-delta | grep SAP
# [EXTENDED] /etc/systemd/system/SAPS4H_20.service /etc/systemd/system/SAPS4H_20.service.d/HA.conf
# 确认最终 Restart 值为 no
systemctl show SAP<SID>_<instance>.service | grep ^Restart=
# Restart=no
注意:此配置必须在所有集群节点上为每个集群管理的实例(ASCS、ERS)分别执行,且结果应一致。
2.4 修改 SAP Profile(Restart_Program → Start_Program)
SAP 实例 profile 中默认使用 Restart_Program 指令,使 sapstartsrv 在进程崩溃时自动重启 enqueue server / enqueue replication server。在 HA 集群中,进程重启必须由集群控制,否则会产生控制权冲突。
修改 ASCS 实例 profile(位于 /sapmnt/<SID>/profile/<SID>_ASCS<xx>_<virtual-host>):
# Enqueue Server(通常为 Program_01)
# 将 Restart_Program_01 改为 Start_Program_01
sed -i 's/Restart_Program_01/Start_Program_01/' /sapmnt/<SID>/profile/<SID>_ASCS<xx>_<virtual-host>
修改 ERS 实例 profile(位于 /sapmnt/<SID>/profile/<SID>_ERS<xx>_<virtual-host>):
# Enqueue Replicator(通常为 Program_00)
# 将 Restart_Program_00 改为 Start_Program_00
sed -i 's/Restart_Program_00/Start_Program_00/' /sapmnt/<SID>/profile/<SID>_ERS<xx>_<virtual-host>
2.5 集成 sap-suse-cluster-connector
安装集群连接器,使 SAP 实例能够通过 HA 脚本接口与 Pacemaker 集群交互:
zypper install sap-suse-cluster-connector
usermod -a -G haclient <sid>adm
在 ASCS 和 ERS 的 instance profile 中添加 HA 集成参数:
service/halib = $(DIR_EXECUTABLE)/saphascriptco.so
service/halib_cluster_connector = /usr/bin/sap_suse_cluster_connector
2.6 重新启动 ASCS 和 ERS
完成以上所有配置后,手动启动实例验证一切正常:
# 在 ERS 节点
su - <sid>adm
sapcontrol -nr 10 -function StartService <SID>
sapcontrol -nr 10 -function Start
# 在 ASCS 节点
su - <sid>adm
sapcontrol -nr 00 -function StartService <SID>
sapcontrol -nr 00 -function Start
验证实例状态正常后,再次停止实例(参考本文 2.1 节),后续交由集群接管。
完成本阶段的 SAP 实例安装与集群接管准备后,进入《ASCS/ERS 集群资源配置》:新系统按 ENSA2 Simple Mount(推荐)加载集群脚本,NetWeaver 7.40/7.50 老系统按 ENSA1 Classic Mount(备选)加载。