在 Red Hat Enterprise Linux High Availability Add-On 集群中为 SAP S/4HANA (ASCS 和 ERS)配置高可用性
以下信息介绍了 Red Hat Enterprise Linux (RHEL) 高可用性附加集群中 ABAP SAP Central Services (ASCS) 和 Enqueue Replication Server (ERS) 的配置。 该集群使用 IBM® Power® Virtual Server 作为集群节点。
此示例配置适用于 独立排队服务器(Standalone Enqueue Server)的第二代,也称为 ENSA2。
从 SAP S/4HANA 1809发布开始,ENSA2 默认安装,并可在双节点或多节点集群中进行配置。 本示例使用 ENSA2 双节点 RHEL HA 附加集群的设置。 如果 ASCS服务在双节点集群中发生故障,它将在运行ERS实例的节点上重新启动。 然后,SAP 应用程序的锁条目将从 ERS实例中的锁表副本中恢复。 当管理员激活故障群集节点时 ,ERS实例将移动到另一个节点(反配置),以保护其锁表副本。
建议您将 SAP 数据库实例和其他 SAP 应用服务器实例安装在双节点集群外的虚拟服务器实例上,用于 ASCS 和 ERS。
准备工作
查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。
先决条件
-
此信息描述了在两个群集节点上均可访问的共享存储卷的设置。 某些文件系统创建在可共享的存储卷上,以便它们可以安装在两个群集节点上。 此设置适用于两个实例目录。
/usr/sap/<SID>/ASCS<INSTNO>
ASCS实例。/usr/sap/<SID>/ERS<INSTNO>
ERS实例。
确保为这些文件系统创建的存储卷已连接到两个虚拟服务器实例。 在 SAP 实例安装和RHEL HA附加集群配置期间,每个实例目录必须挂载在相应的节点上。 HA-LVM确保两个实例目录中的每一个都只在一个节点上安装一次。
实例目录有不同的存储设置,例如 NFS 挂载。 本文档不介绍文件存储或创建集群文件系统资源的存储设置步骤。
-
ASCS 和ERS实例的虚拟主机名必须符合 SAP ABAP平台服务器主机名文档中的要求。 确保将 SAP 实例的虚拟IP地址分配给网络适配器,并确保它们可以在网络中通信。
-
SAP 应用程序服务器实例需要一个具有读写权限的通用共享文件系统 sapmnt
/sapmnt/<SID>
,以及其他共享文件系统,例如 saptrans/usr/sap/trans
。 这些文件系统通常由外部 NFS 服务器提供。 NFS 服务器必须具备高可用性,且不得安装在属于集群的虚拟服务器上 ENSA2 集群的一部分。在 Red Hat 高可用性集群中配置主动-被动 NFS 服务器 描述了在RHEL HA附加集群中使用 Red Hat Enterprise Linux 8,通过在 Power Virtual Server 中使用虚拟服务器实例,实现主动-被动 NFS 服务器。 用于主动-被动 NFS 服务器的RHEL HA附加群集必须部署在单个 Power Virtual Server 工作区中。
准备节点以安装ASCS和ERS实例
以下信息介绍了如何准备节点,以便安装 SAP ASCS 和 ERS实例。
准备环境变量
为了简化设置,请在两个集群节点上为用户 root
准备以下环境变量。 这些环境变量与本信息中后续的操作系统命令一起使用。
在两个节点上,设置以下环境变量。
# General settings
export SID=<SID> # SAP System ID (uppercase)
export sid=<sid> # SAP System ID (lowercase)
# ASCS instance
export ASCS_INSTNO=<INSTNO> # ASCS instance number
export ASCS_VH=<virtual hostname> # ASCS virtual hostname
export ASCS_IP=<IP address> # ASCS virtual IP address
export ASCS_VG=<vg name> # ASCS volume group name
export ASCS_LV=<lv name> # ASCS logical volume name
# ERS instance
export ERS_INSTNO=<INSTNO> # ERS instance number
export ERS_VH=<virtual hostname> # ERS virtual hostname
export ERS_IP=<IP address> # ERS virtual IP address
export ERS_VG=<vg name> # ERS volume group name
export ERS_LV=<lv name> # ERS logical volume name
# NFS settings
export NFS_SERVER="NFS server" # Hostname or IP address of the highly available NFS server
export NFS_SHARE="NFS server directory" # Exported file system directory on the NFS server
export NFS_OPTIONS="rw,sec=sys" # Sample NFS client mount options
建议为卷组和逻辑卷使用有意义的名称,以指明其内容。 例如,在名称中包含 SID 和ascs 或 ers。 在卷组或逻辑卷名称中不要使用连字符。
- s01ascsvg 和 s01ascslv
- s01ersvg 和 s01erslv
分配虚拟IP地址
查看 “虚拟IP地址的预留”中的信息。
检查 SAP 实例的虚拟IP地址是否存在。 否则,您需要确定正确的网络适配器,以便分配IP地址。
在两个节点上,查看当前活动的IP地址列表。
ip -o -f inet address show | '/scope global/ {print $2, $4}'
上一个命令的输出示例。
# ip -o -f inet address show | awk '/scope global/ {print $2, $4}'
env2 10.51.0.66/24
env3 10.52.0.41/24
env4 10.111.1.28/24
网络适配器的设备名称显示在第一列。 第二列列出了活动IP地址和为网络掩码预留的位数——两者之间用斜线隔开。
如果 SAP 实例的虚拟IP地址不存在,请确保该地址没有错误地设置在另一个虚拟服务器实例上。
在 NODE1 上,运行以下命令。
ping -c 3 ${ASCS_VH}
样本输出:
# ping -c 2 cl-sap-scs
PING cl-sap-scs (10.111.1.248) 56(84) bytes of data.
From cl-sap-1.tst.ibm.com (10.111.1.28) icmp_seq=1 Destination Host Unreachable
From cl-sap-1.tst.ibm.com (10.111.1.28) icmp_seq=2 Destination Host Unreachable
--- cl-sap-ers ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 2112ms
pipe 3
如果 ping
输出显示 Destination Host Unreachable
,则IP地址可用,您可以将IP别名分配给虚拟服务器实例。 使用与IP地址子网匹配的网络适配器的正确设备名称 env。
示例命令 NODE1:
ip addr add ${ASCS_IP} dev env4
示例命令 NODE2:
ip addr add ${ERS_IP} dev env4
根据您的具体网络配置,网络适配器的设备名称可能有所不同。
SAP 安装需要IP地址,且需要手动设置。 之后,虚拟IP地址由 Red Hat HA集群附加组件控制。
准备卷组、逻辑卷和共享文件系统
共享存储是集群中的一项重要资源 ENSA2 集群中 ASCS 和ERS 必须能够在两个节点上运行,它们的运行环境存储在共享存储卷中。 所有集群节点都需要访问共享存储卷,但只有一个节点拥有对卷的独占读写权限。
准备逻辑卷管理器的高可用性设置
编辑文件 /etc/lvm/lvm.conf
,在卷组中添加系统 ID。
在两个节点上,编辑 lvm.conf
文件。
vi /etc/lvm/lvm.conf
搜索 system_id_source
参数,并将其值更改为 uname
。
etc/lvm/lvm.conf
中 system_id_source
参数的样本设置。
system_id_source = "uname"
识别共享存储卷的全局名称
为属于共享卷组之一的每个存储卷确定一个全局名称(WWN)。
-
登录 IBM Cloud®,查看 Power Virtual Server 的 存储卷。
-
选择工作区
-
在存储卷列表中过滤卷前缀,并识别所有在 ASCS 和 ERS实例范围内的卷的全局名称。 全球名称是一个32位十六进制数字。
确保这些卷的 “可共享” 属性为“开启”。
在 虚拟服务器实例视图中,进入集群的两个虚拟服务器实例。 确认所有属于 ASCS 和 ERS 范围内的卷都附加到两个虚拟服务器实例上。
当您将新的存储卷附加到虚拟服务器实例时,请确保重新扫描 SCSI 总线以检测新的卷。 之后,更新虚拟服务器实例 的多路径配置。
在带有新存储卷附件的节点上,运行以下命令。
rescan-scsi-bus.sh && sleep 10 && multipathd reconfigure
登录两个集群节点,将WWN 添加到用户 root
的环境变量中。
使用 pvs --all
命令确定合适的WWN值。
在 NODE1 上,导出 ASCS_PVID
环境变量。
export ASCS_PVID=3<WWN> # WWN of shared storage volume for ASCS
在 NODE2 上,导出 ERS_PVID
环境变量。
export ERS_PVID=3<WWN> # WWN of shared storage volume for ERS
请确保使用十六进制数字和小写字母设置环境变量。
创建物理体积
在 NODE1 上,运行以下命令。
pvcreate /dev/mapper/${ASCS_PVID}
样本输出:
# pvcreate /dev/mapper/${ASCS_PVID}
Physical volume "/dev/mapper/360050768108103357000000000002ddc" successfully created.
在 NODE2 上,运行以下命令。
pvcreate /dev/mapper/${ERS_PVID}
样本输出:
# pvcreate /dev/mapper/${ERS_PVID}
Physical volume "/dev/mapper/360050768108103357000000000002e31" successfully created.
创建音量组
为ASCS创建卷组。
在 NODE1 上,运行以下命令。
vgcreate ${ASCS_VG} /dev/mapper/${ASCS_PVID}
请确认系统ID 已设置。
vgs -o+systemid
样本输出:
# vgs -o+systemid
VG #PV #LV #SN Attr VSize VFree System ID
s01ascsvg 1 0 0 wz--n- <50.00g <50.00g cl-sap-1
为紧急救援系统创建音量组。
在 NODE2 上,运行以下命令。
vgcreate ${ERS_VG} /dev/mapper/${ERS_PVID}
请确认系统ID已设置。
样本输出:
# vgs -o+systemid
VG #PV #LV #SN Attr VSize VFree System ID
s01ersvg 1 0 0 wz--n- <50.00g <50.00g cl-sap-2
创建逻辑卷和文件系统
为ASCS 创建逻辑卷,并将其格式化为 XFS文件系统。
在 NODE1 上,运行以下命令。
lvcreate -l 100%FREE -n ${ASCS_LV} ${ASCS_VG}
mkfs.xfs /dev/${ASCS_VG}/${ASCS_LV}
为ERS 创建逻辑卷,并将其格式化为 XFS文件系统。
在 NODE2 上,运行以下命令。
lvcreate -l 100%FREE -n ${ERS_LV} ${ERS_VG}
mkfs.xfs /dev/${ERS_VG}/${ERS_LV}
确保在多个集群节点上不激活卷组
由集群管理的卷组在启动时不得自动激活。
对于 RHEL 8.5 及更高版本,在创建卷组时,通过在 vgcreate 命令中指定 --setautoactivation n
标志来禁用自动激活。
在两个节点上,编辑 /etc/lvm/lvm.conf
文件并修改 auto_activation_volume_list
条目,将自动激活限制为特定的卷组。
vi /etc/lvm/lvm.conf
找到 auto_activation_volume_list
参数,将所有卷组添加到该列表中,但为 NFS 群集定义的卷组除外。
请参阅如何在 /etc/lvm/lvm.conf
中设置 auto_activation_volume_list
的示例:
auto_activation_volume_list = [ "rhel_root" ]
重建 initramfs 启动映像以确保启动映像不会激活由集群控制的卷组。
在两个节点上运行以下命令。
dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
重启两个节点。
安装 SAP 的安装文件系统
激活音量组并安装 SAP 实例文件系统。
在 NODE1 (ASCS) 上运行以下命令。
vgchange -a y ${ASCS_VG}
mkdir -p /usr/sap/${SID}/ASCS${ASCS_INSTNO}
mount /dev/${ASCS_VG}/${ASCS_LV} /usr/sap/${SID}/ASCS${ASCS_INSTNO}
在 NODE2 (ERS) 上,运行以下命令。
vgchange -a y ${ERS_VG}
mkdir -p /usr/sap/${SID}/ERS${ERS_INSTNO}
mount /dev/${ERS_VG}/${ERS_LV} /usr/sap/${SID}/ERS${ERS_INSTNO}
安装所需的 NFS 文件系统
在两个节点上,确保挂载了 NFS 文件系统 /sapmnt
和 /usr/sap/trans
。
mount | grep nfs
在另一个节点上创建ASCS和ERS挂载点
为实例文件系统创建挂载点并调整其所有权。
在 NODE1 上,运行以下命令。
mkdir /usr/sap/${SID}/ERS${ERS_INSTNO}
chown ${sid}adm:sapsys /usr/sap/${SID}/ERS${ERS_INSTNO}
在 NODE2 上,运行以下命令。
mkdir /usr/sap/${SID}/ASCS${ASCS_INSTNO}
chown ${sid}adm:sapsys /usr/sap/${SID}/ASCS${ASCS_INSTNO}
安装ASCS和ERS实例
使用 SAP Software Provisioning Manager (SWPM)安装两个实例。
-
在集群节点上安装 SAP 实例。
- 使用与ASCS 虚拟IP地址关联的虚拟主机名
${ASCS_VH}
在 NODE1 上安装 ASCS实例:
<swpm>/sapinst SAPINST_USE_HOSTNAME=${ASCS_VH}
- 使用与ERS 虚拟IP地址关联的虚拟主机名
${ERS_VH}
在 NODE2 上安装 ERS实例:
<swpm>/sapinst SAPINST_USE_HOSTNAME=${ERS_VH}
- 使用与ASCS 虚拟IP地址关联的虚拟主机名
-
将所有其他 SAP 应用程序实例安装在集群之外。
安装和设置 RHEL HA 附加群集
按照 实施 Red Hat Enterprise Linux 高可用性附加组件 集群安装并设置 RHEL HA 附加组件集群。
按照 创建围栏设备中的 描述配置并测试围栏。
为群集集成准备 ASCS 和 ERS 实例
使用以下步骤为群集集成准备 SAP 实例。
禁用自动启动 ASCS 和 ERS 的 SAP 实例代理
您必须在重启后禁用 ASCS 和 ERS 实例的自动启动 sapstartsrv
实例代理。
验证 SAP 实例代理集成类型
SAP 实例代理的最新版本 sapstartsrv
在 Linux 上提供本机 systemd
支持。 欲了解更多信息,请参阅 SAP Notes 列出的 SAP 注释。
在两个节点上,检查 /usr/sap/sapservices
文件的内容。
cat /usr/sap/sapservices
在 systemd
格式中,各行以 systemctl
条目开始。
示例:
systemctl --no-ask-password start SAPS01_01 # sapstartsrv pf=/usr/sap/S01/SYS/profile/S01_ASCS01_cl-sap-scs
如果 ASCS 和 ERS 的条目是 systemd
格式,请继续执行 禁用 ASCS 和 ERS SAP 实例的 systemd 服务 中的步骤。
在 classic
格式中,各行以 LD_LIBRARY_PATH
条目开始。
示例:
LD_LIBRARY_PATH=/usr/sap/S01/ASCS01/exe:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH;/usr/sap/S01/ASCS01/exe/sapstartsrv pf=/usr/sap/S01/SYS/profile/S01_ASCS01_cl-sap-scs -D -u s01adm
如果 ASCS 和 ERS 的条目采用 classic
格式,则应修改 /usr/sap/sapservices
文件,以防止 ASCS 和 ERS 实例在重启后自动启动 sapstartsrv
实例代理。
在两个节点上,删除或注释 SAP 服务文件中 ASCS 和 ERS 的 sapstartsrv
条目。
sed -i -e 's/^LD_LIBRARY_PATH=/#LD_LIBRARY_PATH=/' /usr/sap/sapservices
示例:
#LD_LIBRARY_PATH=/usr/sap/S01/ASCS01/exe:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH;/usr/sap/S01/ASCS01/exe/sapstartsrv pf=/usr/sap/S01/SYS/profile/S01_ASCS01_cl-sap-scs -D -u s01adm
继续 安装永久 SAP 许可证密钥。
禁用 ASCS 和 ERS 实例的 systemd 服务
在两个节点上,禁用 ASCS 的实例代理。
systemctl disable --now SAP${SID}_${ASCS_INSTNO}.service
在两个节点上,禁用 ERS 的实例代理。
systemctl disable --now SAP${SID}_${ERS_INSTNO}.service
禁用 systemd
重启崩溃的 ASCS 或 ERS 实例
Systemd
有自己的机制来重启崩溃的服务。 在高可用性设置中,只有 HA 集群负责管理 SAP ASCS 和 ERS 实例。 在两个群集节点上创建 systemd drop-in files
,以防止 systemd
重新启动崩溃的 SAP 实例。
在两个节点上,创建投放文件的目录。
mkdir /etc/systemd/system/SAP${SID}_${ASCS_INSTNO}.service.d
mkdir /etc/systemd/system/SAP${SID}_${ERS_INSTNO}.service.d
在两个节点上为 ASCS 和 ERS 创建插入文件。
cat >> /etc/systemd/system/SAP${SID}_${ASCS_INSTNO}.service.d/HA.conf << EOT
[Service]
Restart=no
EOT
cat >> /etc/systemd/system/SAP${SID}_${ERS_INSTNO}.service.d/HA.conf << EOT
[Service]
Restart=no
EOT
Restart=no
必须位于 部分,且所有群集节点上都必须有投放文件。[Service]
在两个节点上重新加载 systemd
单元文件。
systemctl daemon-reload
安装永久 SAP 许可证密钥
当 SAP ASCS 实例安装在 Power Virtual Server 实例上时,SAP 许可证机制依赖于分区 UUID。 更多信息,请参阅 SAP note 2879336 - 基于唯一 ID 的硬件密钥。
在两个节点上,以用户 <sid>adm
身份运行以下命令,以确定节点的 HARDWARE KEY
。
sudo -i -u ${sid}adm -- sh -c 'saplikey -get'
样本输出:
$ sudo -i -u ${sid}adm -- sh -c 'saplikey -get'
saplikey: HARDWARE KEY = H1428224519
注意每个节点的 HARDWARE KEY
。
您需要两个硬件密钥来申请两个不同的 SAP 许可证密钥。 有关申请 SAP 许可证密钥的更多信息,请查看以下 SAP 注释:
安装 SAP 资源代理
安装所需的软件包。
resource-agents-sap
包括 SAPInstance 集群资源代理,用于管理 SAP 实例。
除非为 SAP 实例配置了 sap_cluster_connector
,否则 RHEL HA Add-On 群集会将实例的任何状态变化视为问题。 如果使用 sapcontrol
等其他 SAP 工具管理实例,则 sap_cluster_connector
会授予控制 SAP 实例的权限,这些实例在群集内运行。 如果 SAP 实例仅由群集工具管理,则需要执行 sap_cluster_connector
没有必要。
安装资源代理和 SAP Cluster Connector 库的软件包。 有关更多信息,请参阅 如何为 SAP ABAP 应用程序服务器实例启用 SAP HA 接口,该实例由 RHEL HA Add-On 管理。
在两个节点上运行以下命令。
如有需要,使用 subscription-manager
启用 SAP NetWeaver 资源库。
RHEL for SAP Subscriptions and Repositories 文档介绍了如何启用所需的软件源。
subscription-manager repos --enable="rhel-8-for-ppc64le-sap-netweaver-e4s-rpms"
安装必需的软件包。
dnf install -y resource-agents-sap sap-cluster-connector
配置 SAP 群集连接器
将用户 ${sid}adm
添加到 haclient
组。
在两个节点上运行以下命令。
usermod -a -G haclient ${sid}adm
调整 SAP 实例配置文件
修改由群集外 SAP 工具管理的所有 SAP 实例的启动配置文件。 ASCS 和 ERS 实例都可由 RHEL HA 附加集群及其资源代理控制。 调整 SAP 实例配置文件,防止自动重启实例进程。
在 NODE1 上,导航到 SAP 配置文件目录。
cd /sapmnt/${SID}/profile
在 ASCS 和 ERS 的实例配置文件中,将 Restart_Program
改为 Start_Program
。
sed -i -e 's/Restart_Program_\([0-9][0-9]\)/Start_Program_\1/' ${SID}_ASCS${ASCS_INSTNO}_${ASCS_VH}
sed -i -e 's/Restart_Program_\([0-9][0-9]\)/Start_Program_\1/' ${SID}_ERS${ERS_INSTNO}_${ERS_VH}
在 SAP 实例配置文件末尾添加以下两行,为 ASCS 和 ERS 实例配置 sap_cluster_connector
。
service/halib = $(DIR_EXECUTABLE)/saphascriptco.so
service/halib_cluster_connector = /usr/bin/sap_cluster_connector
配置ASCS和ERS集群资源
到目前为止,我们假设:
- RHEL HA附加集群在两个虚拟服务器实例上运行,并对节点的围栏进行了测试。
- SAP 系统正在运行。
- SAP ASCS 安装在集群的节点1上并处于活动状态。
- SAP ERS 安装在集群的节点2上并处于活动状态。
- 为集群集成准备ASCS和ERS实例 的所有步骤均已完成。
配置ASCS资源组
创建一个ASCS虚拟IP地址的资源。
在 NODE1 上,运行以下命令。
pcs resource create ${sid}_vip_ascs${ASCS_INSTNO} IPaddr2 \
ip=${ASCS_IP} \
--group ${sid}_ascs${ASCS_INSTNO}_group
在这个为共享存储卷上的HA-LVM文件系统创建资源的示例中,您为LVM-activate和ASCS的实例文件系统创建资源。
pcs resource create ${sid}_fs_ascs${ASCS_INSTNO}_lvm LVM-activate \
vgname="${ASCS_VG}" \
vg_access_mode=system_id \
--group ${sid}_ascs${ASCS_INSTNO}_group
pcs resource create ${sid}_fs_ascs${ASCS_INSTNO} Filesystem \
device="/dev/mapper/${ASCS_VG}-${ASCS_LV}" \
directory=/usr/sap/${SID}/ASCS${ASCS_INSTNO} \
fstype=xfs \
--group ${sid}_ascs${ASCS_INSTNO}_group
在另一个示例中,ASCS的实例文件系统由HA NFS 服务器提供,因此只需要文件系统资源。 请确保您已根据
您的 NFS 服务器定义了环境变量 ${NFS_VH}
,并在ASCS实例的 SAP 安装过程中在 NFS 根目录下创建了一个目录 ${SID}/ASCS
。
pcs resource create ${sid}_fs_ascs${ASCS_INSTNO} Filesystem \
device="${NFS_VH}:${SID}/ASCS" \
directory=/usr/sap/${SID}/ASCS${ASCS_INSTNO} \
fstype=nfs \
options="${NFS_OPTIONS}" \
force_unmount=safe \
op start interval=0 timeout=60 \
op stop interval=0 timeout=120 \
--group ${sid}_ascs${ASCS_INSTNO}_group
创建一个用于管理 ASCS实例的资源。
pcs resource create ${sid}_ascs${ASCS_INSTNO} SAPInstance \
InstanceName="${SID}_ASCS${ASCS_INSTNO}_${ASCS_VH}" \
START_PROFILE=/sapmnt/${SID}/profile/${SID}_ASCS${ASCS_INSTNO}_${ASCS_VH} \
AUTOMATIC_RECOVER=false \
meta resource-stickiness=5000 \
migration-threshold=1 failure-timeout=60 \
op monitor interval=20 on-fail=restart timeout=60 \
op start interval=0 timeout=600 \
op stop interval=0 timeout=600 \
--group ${sid}_ascs${ASCS_INSTNO}_group
meta resource-stickiness=5000
选项用于平衡故障转移约束与ERS,使资源保持在启动节点上,不会在集群中不受控制地迁移。
为组添加资源粘性,以确保 ASCS 保留在节点上。
pcs resource meta ${sid}_ascs${ASCS_INSTNO}_group \
resource-stickiness=3000
配置ERS资源组
创建 ERS 虚拟IP地址的资源。
在 NODE1 上,运行以下命令。
pcs resource create ${sid}_vip_ers${ERS_INSTNO} IPaddr2 \
ip=${ERS_IP} \
--group ${sid}_ers${ERS_INSTNO}_group
在共享存储卷上为HA-LVM文件系统创建资源的示例中,您为LVM-activate和 ERS的实例文件系统创建资源。
pcs resource create ${sid}_fs_ers${ERS_INSTNO}_lvm LVM-activate \
vgname="${ERS_VG}" \
vg_access_mode=system_id \
--group ${sid}_ers${ERS_INSTNO}_group
pcs resource create ${sid}_fs_ers${ERS_INSTNO} Filesystem \
device="/dev/mapper/${ERS_VG}-${ERS_LV}" \
directory=/usr/sap/${SID}/ERS${ERS_INSTNO} \
fstype=xfs \
--group ${sid}_ers${ERS_INSTNO}_group
在另一个示例中 ,ERS的实例文件系统由HA NFS 服务器提供,因此只需要文件系统资源。 请确保您已根据
您的 NFS 服务器定义了环境变量 ${NFS_VH}
,并在 SAP 安装ERS实例时在 NFS 根目录下创建了 ${SID}/ERS
目录。
pcs resource create ${sid}_fs_ers${ERS_INSTNO} Filesystem \
device="${NFS_VH}:${SID}/ERS" \
directory=/usr/sap/${SID}/ERS${ERS_INSTNO} \
fstype=nfs \
options="${NFS_OPTIONS}" \
force_unmount=safe \
op start interval=0 timeout=60 \
op stop interval=0 timeout=120 \
--group ${sid}_ers${ERS_INSTNO}_group
创建一个资源来管理 ERS实例。
pcs resource create ${sid}_ers${ERS_INSTNO} SAPInstance \
InstanceName="${SID}_ERS${ERS_INSTNO}_${ERS_VH}" \
START_PROFILE=/sapmnt/${SID}/profile/${SID}_ERS${ERS_INSTNO}_${ERS_VH} \
AUTOMATIC_RECOVER=false \
IS_ERS=true \
op monitor interval=20 on-fail=restart timeout=60 \
op start interval=0 timeout=600 \
op stop interval=0 timeout=600 \
--group ${sid}_ers${ERS_INSTNO}_group
配置集群资源限制
出于对资源组 ${sid}_ascs${ASCS_INSTNO}_group
和 ${sid}_ers${ERS_INSTNO}_group
的限制,它们不能在同一节点上同时运行。
-5000
的粘性得分可确保在只有一个可用节点时,它们运行在同一节点上。
pcs constraint colocation add \
${sid}_ers${ERS_INSTNO}_group with ${sid}_ascs${ASCS_INSTNO}_group -- -5000
一个订单约束条件控制资源组 ${sid}_ascs${ASCS_INSTNO}_group
在 ${sid}_ers${ERS_INSTNO}_group
之前开始。
pcs constraint order start \
${sid}_ascs${ASCS_INSTNO}_group then stop ${sid}_ers${ERS_INSTNO}_group \
symmetrical=false \
kind=Optional
以下两个顺序约束确保文件系统 SAPMNT 在资源组 ${sid}_ascs${ASCS_INSTNO}_group
和 ${sid}_ers${ERS_INSTNO}_group
启动之前挂载。
pcs constraint order fs_sapmnt-clone then ${sid}_ascs${ASCS_INSTNO}_group
pcs constraint order fs_sapmnt-clone then ${sid}_ers${ERS_INSTNO}_group
仪表盘设置完成。
测试一个 SAP ENSA2 集群
彻底测试仪表盘配置以确保其正常工作至关重要。 以下信息提供了几个故障切换测试场景的示例,但并非测试场景的完整列表。
例如,每个测试用例的描述都包含以下信息。
- 测试组件
- 测试描述
- 故障转移测试的前提条件和初始状态
- 测试程序
- 预期行为和结果
- 恢复过程
测试1——测试ASCS实例的故障
测试1 - 描述
模拟 NODE1 上运行的 SAP ASCS实例崩溃。
测试1 - 前提条件
- 适用于 SAP ENSA2 的功能型双节点 RHEL HA 附加集群。
- 两个集群节点都处于活动状态。
- 群组已启动,请访问 NODE1 和 NODE2。
- 资源组 ${sid}_ascs${ASCS_INSTNO}_group 正在 NODE1 上活动。
- 资源 ${sid}_vip_ascs$ {ASCS_INSTNO}, ${sid}_fs_ascs${ASCS_INSTNO}_lvm, ${sid}_fs_ascs$ {ASCS_INSTNO} 和 ${sid}_ascs$ {ASCS_INSTNO} 是
Started
在 NODE1。 - 资源组 ${sid}_ers${ERS_INSTNO}_group 正在 NODE2 上活动。
- 资源 ${sid}_vip_ers$ {ERS_INSTNO}, ${sid}_fs_ers${ERS_INSTNO}_lvm, ${sid}_fs_ers$ {ERS_INSTNO} 和 ${sid}_ers$ {ERS_INSTNO} 是
Started
在 NODE2。
- 检查 SAP 实例进程:
- ASCS实例正在 NODE1 上运行。
- ERS实例正在 NODE2 上运行。
pcs status
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 07:59:16 2023
* Last change: Tue Feb 14 05:02:22 2023 by hacluster via crmd on cl-sap-1
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-2
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-2
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-2
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-2
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-2
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试1——测试程序
要关闭 SAP ASCS实例,请以用户 ${sid}adm
的身份向排队服务器发送SIGKILL信号。
在 NODE1 上,确定enque服务器的PID。
pgrep -af "(en|enq).sap"
向已识别的进程发送SIGKILL信号。
样本输出:
# pgrep -af "(en|enq).sap"
30186 en.sapS01_ASCS01 pf=/usr/sap/S01/SYS/profile/S01_ASCS01_cl-sap-scs
# kill -9 30186
测试1——预期行为
- SAP NODE1 上的ASCS 实例崩溃。
- 集群检测到崩溃的ASCS 实例。
- 集群停止 NODE1 (虚拟IP地址、文件系统
/usr/sap/${SID}/ASCS${ASCS_INSTNO}
和LVM资源)上的相关资源,并在 NODE2 上获取这些资源。 - 集群在 NODE2 上启动 ASCS。
- 集群在 NODE2 上停止了ERS实例。
- 集群停止 NODE1 (虚拟IP地址、文件系统
/usr/sap/${SID}/ERS${ERS_INSTNO}
和LVM资源)上的相关资源,并在 NODE1 上获取这些资源。 - 仪表盘启动紧急制动系统,NODE1。
几秒钟后,使用以下命令检查状态。
pcs status
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 08:10:18 2023
* Last change: Tue Feb 14 05:02:22 2023 by hacluster via crmd on cl-sap-1
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-2
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-2
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-2
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-2
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-2
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试2——测试运行ASCS实例的节点故障
使用以下信息来测试运行ASCS实例的节点是否出现故障。
测试2——描述
模拟 ASCS实例运行所在节点的崩溃。
测试2 - 前提条件
- 适用于 SAP ENSA2 的功能型双节点 RHEL HA 附加集群。
- 两个集群节点都处于活动状态。
- 群组已启动,请访问 NODE1 和 NODE2。
- 资源组 ${sid}_ascs${ASCS_INSTNO}_group 正在 NODE2 上活动。
- 资源 ${sid}_vip_ascs$ {ASCS_INSTNO}, ${sid}_fs_ascs${ASCS_INSTNO}_lvm, ${sid}_fs_ascs$ {ASCS_INSTNO} 和 ${sid}_ascs$ {ASCS_INSTNO} 是
Started
在 NODE2。 - 资源组 ${sid}_ers${ERS_INSTNO}_group 正在 NODE1 上活动。
- 资源 ${sid}_vip_ers$ {ERS_INSTNO}, ${sid}_fs_ers${ERS_INSTNO}_lvm, ${sid}_fs_ers$ {ERS_INSTNO} 和 ${sid}_ers$ {ERS_INSTNO} 是
Started
在 NODE1。
- 检查 SAP 实例进程:
- ASCS实例正在 NODE2 上运行。
- ERS实例正在 NODE1 上运行。
测试2——测试程序
发送碰撞系统请求,即可激活碰撞 NODE2。
在 NODE2 上,运行以下命令。
sync; echo c > /proc/sysrq-trigger
测试2——预期行为
- NODE2 重启。
- 集群检测到故障节点并将其状态设置为离线(UNCLEAN)。
- 该集群获取 ASCS资源 (虚拟IP地址、文件系统
/usr/sap/${SID}/ASCS${ASCS_INSTNO}
和LVM项目)的地址为 NODE1。 - 集群在 NODE1 上启动 ASCS。
- 集群在 NODE1 上停止了ERS实例。
- 集群停止 NODE1 (虚拟IP地址、文件系统
/usr/sap/${SID}/ERS${ERS_INSTNO}
和LVM资源)上的相关资源,并释放这些资源。
过一会儿,用以下命令检查状态。
第二个节点处于离线状态,两个资源组都在第一个节点上运行。
pcs status
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 08:34:16 2023
* Last change: Tue Feb 14 08:34:04 2023 by hacluster via crmd on cl-sap-1
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 ]
* OFFLINE: [ cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-1
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 ]
* Stopped: [ cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试2——恢复程序
等待 NODE2 重启,然后重启集群框架。
在 NODE1 上,运行以下命令。
pcs cluster start
- 集群从 NODE2 开始,获取 NODE2 上的 ERS资源 (虚拟IP地址、文件系统
/usr/sap/${SID}/ERS${ERS_INSTNO}
和LVM资源)。 - 集群在 NODE2 上启动 ERS实例。
请稍等,使用以下命令检查状态。 ERS资源组已转移至第二个节点。
pcs status
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 08:41:23 2023
* Last change: Tue Feb 14 08:34:04 2023 by hacluster via crmd on cl-sap-1
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-1
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-2
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-2
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-2
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-2
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试3——测试 ERS实例的故障
请使用以下信息来测试ERS实例的故障。
测试3——描述
模拟紧急响应系统实例的崩溃。
测试3 - 先决条件
- 适用于 SAP ENSA2 的功能型双节点 RHEL HA 附加集群。
- 两个集群节点都处于活动状态。
- 群组始于 NODE1 和 NODE2。
- 资源组 ${sid}_ascs${ASCS_INSTNO}_group 正在 NODE1 上活动。
- 资源 ${sid}_vip_ascs$ {ASCS_INSTNO}, ${sid}_fs_ascs${ASCS_INSTNO}_lvm, ${sid}_fs_ascs$ {ASCS_INSTNO} 和 ${sid}_ascs$ {ASCS_INSTNO} 是
Started
在 NODE1。 - 资源组 ${sid}_ers${ERS_INSTNO}_group 正在 NODE2 上活动。
- 资源 ${sid}_vip_ers$ {ERS_INSTNO}, ${sid}_fs_ers${ERS_INSTNO}_lvm, ${sid}_fs_ers$ {ERS_INSTNO} 和 ${sid}_ers$ {ERS_INSTNO} 是
Started
在 NODE2。
- 检查 SAP 实例进程:
- ASCS实例正在 NODE1 上运行。
- ERS实例正在 NODE2 上运行。
测试3——测试程序
通过发送SIGKILL信号来终止 SAP ERS实例。
在 NODE2 上,确定enque复制服务器的PID。
pgrep -af "(er|enqr).sap"
向已识别的进程发送SIGKILL信号。
样本输出:
# pgrep -af "(er|enqr).sap"
2527198 er.sapS01_ERS02 pf=/usr/sap/S01/ERS02/profile/S01_ERS02_cl-sap-ers NR=01
# kill -9 2527198
测试3——预期行为
- SAP 在 上排队复制服务器立即崩溃。NODE2
- 集群检测到已停止的 ERS 并将资源标记为失败。
- 集群在 NODE2 上重新启动 ERS。
使用以下命令检查状态。
pcs status
${sid}_ers${ERS_INSTNO}
ERS资源在第二个节点上重新启动。 如果过早运行 pcs status
命令,可能会看到 ERS资源状态短暂显示为 FAILED
。
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 08:50:53 2023
* Last change: Tue Feb 14 08:50:50 2023 by hacluster via crmd on cl-sap-2
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-1
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-2
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-2
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-2
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-2
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试3——恢复程序
在 NODE2 上,运行以下命令。
pcs resource refresh
pcs status --full
测试4——手动移动ASCS实例
使用以下信息手动移动ASCS实例。
测试4——描述
出于维护目的,使用 SAP 控制命令将 ASCS 实例移动到另一个节点。
测试4 - 前提条件
- 适用于 SAP ENSA2 的功能型双节点 RHEL HA 附加集群。
sap_cluster_connector
已安装并配置完毕。- 两个集群节点都处于活动状态。
- 群组已启动,请访问 NODE1 和 NODE2。
- 资源组 ${sid}_ascs${ASCS_INSTNO}_group 正在 NODE1 上活动。
- 资源 ${sid}_vip_ascs$ {ASCS_INSTNO}, ${sid}_fs_ascs${ASCS_INSTNO}_lvm, ${sid}_fs_ascs$ {ASCS_INSTNO} 和 ${sid}_ascs$ {ASCS_INSTNO} 是
Started
在 NODE1。 - 资源组 ${sid}_ers${ERS_INSTNO}_group 正在 NODE2 上活动。
- 资源 ${sid}_vip_ers$ {ERS_INSTNO}, ${sid}_fs_ers${ERS_INSTNO}_lvm, ${sid}_fs_ers$ {ERS_INSTNO} 和 ${sid}_ers$ {ERS_INSTNO} 是
Started
在 NODE2。
- 检查 SAP 实例进程:
- ASCS实例正在 NODE1 上运行。
- ERS实例正在 NODE2 上运行。
测试4——测试程序
登录 NODE1,运行 sapcontrol
,将 ASCS 实例移动到另一个节点。
sudo -i -u ${sid}adm -- sh -c "sapcontrol -nr ${ASCS_INSTNO} -function HAFailoverToNode"
测试4——预期行为
sapcontrol
通过 与集群交互。sap-cluster-connector
- 集群为资源的移动设置了位置限制。
使用以下命令检查状态。 请注意 ,ASCS资源组已移至第二个节点。 如果过早运行 pcs status
命令,可能会看到一些资源 stopping
和 starting
。
pcs status
样本输出:
# pcs status
Cluster name: SAP_ASCS
Cluster Summary:
* Stack: corosync
* Current DC: cl-sap-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
* Last updated: Tue Feb 14 09:03:19 2023
* Last change: Tue Feb 14 09:01:40 2023 by s01adm via crm_resource on cl-sap-1
* 2 nodes configured
* 11 resource instances configured
Node List:
* Online: [ cl-sap-1 cl-sap-2 ]
Full List of Resources:
* res_fence_ibm_powervs (stonith:fence_ibm_powervs): Started cl-sap-1
* Resource Group: s01_ascs01_group:
* s01_vip_ascs01 (ocf::heartbeat:IPaddr2): Started cl-sap-2
* s01_fs_ascs01_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-2
* s01_fs_ascs01 (ocf::heartbeat:Filesystem): Started cl-sap-2
* s01_ascs01 (ocf::heartbeat:SAPInstance): Started cl-sap-2
* Resource Group: s01_ers02_group:
* s01_vip_ers02 (ocf::heartbeat:IPaddr2): Started cl-sap-1
* s01_fs_ers02_lvm (ocf::heartbeat:LVM-activate): Started cl-sap-1
* s01_fs_ers02 (ocf::heartbeat:Filesystem): Started cl-sap-1
* s01_ers02 (ocf::heartbeat:SAPInstance): Started cl-sap-1
* Clone Set: fs_sapmnt-clone [fs_sapmnt]:
* Started: [ cl-sap-1 cl-sap-2 ]
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
测试4——恢复程序
请等待,直到 ASCS实例在 NODE2 上激活。 五分钟后,集群会自动删除创建的位置限制。
以下说明展示了如何手动移除限制。
在 NODE2 上,运行以下命令。
pcs constraint
样本输出:
# pcs constraint
Location Constraints:
Resource: s01_ascs01_group
Constraint: cli-ban-s01_ascs01_group-on-cl-sap-1
Rule: boolean-op=and score=-INFINITY
Expression: #uname eq string cl-sap-1
Expression: date lt 2023-02-08 09:33:50 -05:00
Ordering Constraints:
start s01_ascs01_group then stop s01_ers02_group (kind:Optional) (non-symmetrical)
start fs_sapmnt-clone then start s01_ascs01_group (kind:Mandatory)
start fs_sapmnt-clone then start s01_ers02_group (kind:Mandatory)
Colocation Constraints:
s01_ers02_group with s01_ascs01_group (score:-5000)
Ticket Constraints:
pcs resource clear ${sid}_ascs${ASCS_INSTNO}_group
位置限制被取消:
pcs constraint
样本输出:
# pcs constraint
Location Constraints:
Ordering Constraints:
start s01_ascs01_group then stop s01_ers02_group (kind:Optional) (non-symmetrical)
start fs_sapmnt-clone then start s01_ascs01_group (kind:Mandatory)
start fs_sapmnt-clone then start s01_ers02_group (kind:Mandatory)
Colocation Constraints:
s01_ers02_group with s01_ascs01_group (score:-5000)
Ticket Constraints: