IBM Cloud Docs
在多区域环境中的 Red Hat Enterprise Linux High Availability Add-On 集群中为 SAP S/4HANA (ASCS 和 ERS) 配置高可用性

在多区域环境中的 Red Hat Enterprise Linux High Availability Add-On 集群中为 SAP S/4HANA (ASCS 和 ERS) 配置高可用性

以下信息介绍了如何在 Red Hat Enterprise Linux (RHEL) High Availability Add-On 集群中配置 ABAP SAP Central Services (ASCS)Enqueue Replication Server (ERS )。 群集在 IBM® Power® Virtual Server.

本配置示例适用于第二代 独立 Enqueue 服务器,也称为 ENSA2.

自 SAP S/4HANA 1809 起,默认安装 ENSA2,支持双节点和多节点集群配置。 本示例演示了使用 ENSA2 设置双节点 RHEL HA Add-On 群集。 如果 ASCS 服务出现故障,它会自动在托管 ERS 实例的节点上重新启动。 锁项从 ERS 实例的锁表副本中恢复。 当故障节点重新激活时, ERS 实例会重新定位到另一个节点(反定位),以保持冗余并保护锁表副本。

在用于 ASCSERS 实例的双节点群集之外的虚拟服务器实例上安装 SAP 数据库实例和其他 SAP 应用服务器实例。

准备工作

查看 IBM Power Virtual Server 参考资料中为 SAP 应用程序实施高可用性 中列出的一般要求、产品文档、支持文章和 SAP 注释。

先决条件

  • 该信息介绍了使用 NFS 安装实例目录存储的设置。

    • ASCS实例使用挂载点 /usr/sap/<SID>/ASCS<INSTNO>
    • ERS实例使用挂载点 /usr/sap/<SID>/ERS<INSTNO>
    • 这两种情况都使用 /sapmnt/<SID> 挂载点,具有共享的读写权限
    • 可能需要其他共享文件系统,例如 saptrans /usr/sap/trans

    请确保配置了高可用性的 NFS 服务器来为这些共享提供服务。 NFS 服务器不得安装在属于集群的虚拟服务器上 ENSA2 集群的一部分。 本文档不描述设置文件存储或创建群集文件系统的步骤。

确保 ASCSERS 实例的虚拟主机名符合 SAP ABAP Platform 服务器的主机名中概述的要求。

  • ASCSERS 实例的子网和虚拟 IP 地址不能存在于 Power Virtual Server 工作区中。 它们被配置为集群资源。 但是,您必须将 ASCSERS 实例的虚拟 IP 地址和虚拟主机名添加到域名服务 (DNS) 和所有群集节点上的 /etc/hosts 文件中。

准备节点以安装ASCS和ERS实例

以下信息介绍了如何准备节点,以便安装 SAP ASCSERS实例

准备环境变量

为简化设置过程,请在两个群集节点上为 root 用户定义以下环境变量。 这些变量将在后续的操作系统命令中使用。

在两个节点上设置以下环境变量。 某些变量已作标记,只需为资源代理 powervs-move-ip 或资源代理 powervs-subnet 设置。

# General settings
export CLUSTERNAME="SAP_S01"        # Cluster name
export NODE1=<HOSTNAME_1>           # Virtual server instance 1 hostname (in Workspace_1)
export NODE2=<HOSTNAME_2>           # Virtual server instance 2 hostname (in Workspace_2)

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
# resource agent powervs-move-ip only
export ASCS_ROUTE_CRN1=<Route_CRN1> # CRN of the static route in Workspace_1 with destination ASCS_IP (powervs-move-ip only)
export ASCS_ROUTE_CRN2=<Route_CRN2> # CRN of the static route in Workspace_2 with destination ASCS_IP (powervs-move-ip only)
# resource agent powervs-subnet only
export ASCS_NET=<Subnet name>       # Name for the ASCS subnet in IBM Cloud (powervs-subnet only)
export ASCS_CIDR=<CIDR of subnet>   # CIDR of the ASCS subnet containing the service IP address (powervs-subnet only)

# 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
# resource agent powervs-move-ip only
export ERS_ROUTE_CRN1=<Route_CRN1>  # CRN of the static route in Workspace_1 with destination ERS_IP (powervs-move-ip only)
export ERS_ROUTE_CRN2=<Route_CRN2>  # CRN of the static route in Workspace_2 with destination ERS_IP (powervs-move-ip only)
# resource agent powervs-subnet only
export ERS_NET=<Subnet name>        # Name for the ERS subnet in IBM Cloud (powervs-subnet only)
export ERS_CIDR=<CIDR of subnet>    # CIDR of the ERS subnet containing the service IP address (powervs-subnet only)

# Other multizone region settings
export CLOUD_REGION=<CLOUD_REGION>       # Multizone region name
export APIKEY="APIKEY or path to file"   # API key of the ServiceID for the resource agent
export API_TYPE="private or public"      # Use private or public API endpoints
# resource agent powervs-move-ip only
export MON_API="false or true"           # Use cloud api in monitor command (powervs-move-ip only)
# resource agent powervs-subnet only
export IBMCLOUD_CRN_1=<IBMCLOUD_CRN_1>   # Workspace 1 CRN (powervs-subnet only)
export IBMCLOUD_CRN_2=<IBMCLOUD_CRN_2>   # Workspace 2 CRN (powervs-subnet only)
export POWERVSI_1=<POWERVSI_1>           # Virtual server 1 instance id (powervs-subnet only)
export POWERVSI_2=<POWERVSI_2>           # Virtual server 2 instance id (powervs-subnet only)
export JUMBO="true or false"             # Enable Jumbo frames (powervs-subnet only)

# 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

以下导出命令举例说明了在使用资源代理 powervs-move-ip 时,如何设置多区区域实施所需的额外环境变量。

# General settings
export CLUSTERNAME="SAP_S01"         # Cluster name
export NODE1="cl-s01-1"              # Virtual service instance 1 hostname
export NODE2="cl-s01-2"              # Virtual server instance 2 hostname

export SID="S01"                     # SAP System ID (uppercase)
export sid="s01"                     # SAP System ID (lowercase)

# ASCS instance
export ASCS_INSTNO="21"              # ASCS instance number
export ASCS_VH="s01ascs"             # ASCS virtual hostname
export ASCS_IP="10.40.21.102"        # ASCS virtual IP address
export ASCS_ROUTE_CRN1="crn:v1:bluemix:public:power-iaas:eu-de-2:a/a1b2c3d4e5f60123456789a1b2c3d4e5:a1b2c3d4-0123-4567-89ab-a1b2c3d4e5f6:route:a1b2c3d4-1234-5678-9abc-a1b2c3"
export ASCS_ROUTE_CRN2="crn:v1:bluemix:public:power-iaas:eu-de-1:a/a1b2c3d4e5f60123456789a1b2c3d4e5:e5f6a1b2-cdef-0123-4567-a1b2c3d4e5f6:route:1a2b3c4d-cba9-8765-4321-c3b2a1"

# ERS instance
export ERS_INSTNO="22"               # ERS instance number
export ERS_VH="s01ers"               # ERS virtual hostname
export ERS_IP="10.40.22.102"         # ERS virtual IP address
export ERS_ROUTE_CRN1="crn:v1:bluemix:public:power-iaas:eu-de-2:a/a1b2c3d4e5f60123456789a1b2c3d4e5:a1b2c3d4-0123-4567-89ab-a1b2c3d4e5f6:route:cba98765-5678-1234-9abc-a1b2c3"
export ERS_ROUTE_CRN2="crn:v1:bluemix:public:power-iaas:eu-de-1:a/a1b2c3d4e5f60123456789a1b2c3d4e5:e5f6a1b2-cdef-0123-4567-a1b2c3d4e5f6:route:9abca1b2-4321-8765-4321-b2a1c3"

# Other multizone region settings
export CLOUD_REGION="eu-de"
export APIKEY="@/root/.apikey.json"
export API_TYPE="private"
export MON_API="false"

# NFS settings
export NFS_SERVER="cl-nfs"           # Hostname or IP address of the highly available NFS server
export NFS_SHARE="/sapS01"           # Exported file system directory on the NFS server
export NFS_OPTIONS="rw,sec=sys"      # Sample NFS client mount options

为实例文件系统创建挂载点

在两个群集节点上运行以下命令,为 SAP 实例文件系统创建所需的挂载点。

mkdir -p /usr/sap/${SID}/{ASCS${ASCS_INSTNO},ERS${ERS_INSTNO}} /sapmnt/${SID}

安装和设置 RHEL HA 附加群集

请按照 在多区区域环境中在 IBM Power Virtual Server 上实施 RHEL HA Add-On 群集中的 说明安装和配置 RHEL HA Add-On 群集。 安装完成后,按照 创建围栏设备 中的说明配置和测试群集围栏。

在 SAP 安装前准备集群资源

确保 RHEL HA Add-On 群集在两个虚拟服务器实例上都处于活动状态,并验证节点围栏是否按预期运行。

配置一般群集属性

为防止群集重新定位健康资源(例如,当先前发生故障的节点重新启动时),请设置以下默认元属性。

  • resource-stickiness=1:确保资源保留在当前节点上。
  • migration-threshold=3:限制移动资源前的失败次数。

在 NODE1 上,运行以下命令。

pcs resource defaults update resource-stickiness=1
pcs resource defaults update migration-threshold=3

为sapmnt配置集群资源

在 NODE1 上,运行以下命令创建一个克隆的文件系统集群资源,该资源将从所有集群节点上的 NFS 服务器挂载 SAPMNT

pcs resource create fs_sapmnt Filesystem \
    device="${NFS_SERVER}:${NFS_SHARE}/sapmnt" \
    directory="/sapmnt/${SID}" \
    fstype='nfs' \
    options="${NFS_OPTIONS}" \
    clone interleave=true

准备在 NODE1

在 NODE1 上,运行以下命令创建一个文件系统集群资源,用于挂载 ASCS实例目录。

pcs resource create ${sid}_fs_ascs${ASCS_INSTNO} Filesystem \
    device="${NFS_SERVER}:${NFS_SHARE}/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

确定 多区域环境中 SAP HANA 高可用性解决方案中虚拟 IP 集群资源的资源管理器 - 网络注意 事项部分。

确保完成了“为虚拟 IP 地址资源准备多区 RHEL HA Add-On 群集”部分中的所有步骤。

使用 pcs resource describe powervs-move-ip 命令获取有关 powervs-move-ip 资源代理参数的信息。 使用 pcs resource describe powervs-subnet 命令获取有关 powervs-subnet 资源代理参数的信息。

如果使用 powervs-move-ip 资源代理,请在 NODE1 上运行以下命令,为 ASCS 虚拟 IP 地址创建群集资源。

pcs resource create ${sid}_vip_ascs${ASCS_INSTNO} powervs-move-ip \
    api_key=${APIKEY} \
    api_type=${API_TYPE} \
    ip=${ASCS_IP} \
    route_host_map="${NODE1}:${ASCS_ROUTE_CRN1};${NODE2}:${ASCS_ROUTE_CRN2}" \
    region=${CLOUD_REGION} \
    monitor_api=${MON_API}
    op start timeout=60 \
    op stop timeout=60 \
    op monitor interval=60 timeout=60 \
    --group ${sid}_ascs${ASCS_INSTNO}_group

否则,请在 NODE1 上运行以下命令,为 ASCS 虚拟 IP 地址创建 powervs-subnet 群集资源。

pcs resource create ${sid}_vip_ascs${ASCS_INSTNO} powervs-subnet \
    api_key=${APIKEY} \
    api_type=${API_TYPE} \
    cidr=${ASCS_CIDR} \
    ip=${ASCS_IP} \
    crn_host_map="${NODE1}:${IBMCLOUD_CRN_1};${NODE2}:${IBMCLOUD_CRN_2}" \
    vsi_host_map="${NODE1}:${POWERVSI_1};${NODE2}:${POWERVSI_2}" \
    jumbo=${JUMBO} \
    region=${CLOUD_REGION} \
    subnet_name=${ASCS_NET} \
    route_table=5${ASCS_INSTNO} \
    op start timeout=720 \
    op stop timeout=300 \
    op monitor interval=60 timeout=30 \
    --group ${sid}_ascs${ASCS_INSTNO}_group

准备在 NODE2

在 NODE1 上,运行以下命令创建文件系统集群资源,以挂载 ERS实例目录。

pcs resource create ${sid}_fs_ers${ERS_INSTNO} Filesystem \
    device="${NFS_SERVER}:${NFS_SHARE}/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

如果使用 powervs-move-ip 资源代理,请在 NODE1 上运行以下命令,为 ERS 虚拟 IP 地址创建群集资源。

pcs resource create ${sid}_vip_ers${ERS_INSTNO} powervs-move-ip \
    api_key=${APIKEY} \
    api_type=${API_TYPE} \
    ip=${ERS_IP} \
    route_host_map="${NODE1}:${ERS_ROUTE_CRN1};${NODE2}:${ERS_ROUTE_CRN2}" \
    region=${CLOUD_REGION} \
    monitor_api=${MON_API}
    op start timeout=60 \
    op stop timeout=60 \
    op monitor interval=60 timeout=60 \
    --group ${sid}_ers${ERS_INSTNO}_group

否则,在 NODE1 上运行以下命令,为 ERS 虚拟 IP 地址创建 powervs-subnet 群集资源。

pcs resource create ${sid}_vip_ers${ERS_INSTNO} powervs-subnet \
    api_key=${APIKEY} \
    api_type=${API_TYPE} \
    cidr=${ERS_CIDR} \
    ip=${ERS_IP} \
    crn_host_map="${NODE1}:${IBMCLOUD_CRN_1};${NODE2}:${IBMCLOUD_CRN_2}" \
    vsi_host_map="${NODE1}:${POWERVSI_1};${NODE2}:${POWERVSI_2}" \
    jumbo=${JUMBO} \
    region=${CLOUD_REGION} \
    subnet_name=${ERS_NET} \
    route_table=5${ERS_INSTNO} \
    op start timeout=720 \
    op stop timeout=300 \
    op monitor interval=60 timeout=30 \
    --group ${sid}_ers${ERS_INSTNO}_group

在运行 pcs resource config 命令之前,确保群集中的两个虚拟服务器实例都有状态 Active 和健康状态 OK

验证集群配置

在 NODE1 上,运行以下命令验证当前群集配置,确保所有资源都已正确定义并处于活动状态。

pcs status --full

样本输出:

# pcs status --full
Cluster name: SAP_S01
Status of pacemakerd: 'Pacemaker is running' (last updated 2024-11-20 14:04:05 +01:00)
Cluster Summary:
  * Stack: corosync
  * Current DC: cl-s01-2 (2) (version 2.1.5-9.el9_2.4-a3f44794f94) - partition with quorum
  * Last updated: Wed Nov 20 14:04:06 2024
  * Last change:  Wed Nov 20 13:51:19 2024 by hacluster via crmd on cl-s01-2
  * 2 nodes configured
  * 8 resource instances configured

Node List:
  * Node cl-s01-1 (1): online, feature set 3.16.2
  * Node cl-s01-2 (2): online, feature set 3.16.2

Full List of Resources:
  * fence_node1	(stonith:fence_ibm_powervs):	 Started cl-s01-2
  * fence_node2	(stonith:fence_ibm_powervs):	 Started cl-s01-2
  * Clone Set: fs_sapmnt-clone [fs_sapmnt]:
    * fs_sapmnt	(ocf:heartbeat:Filesystem):	 Started cl-s01-1
    * fs_sapmnt	(ocf:heartbeat:Filesystem):	 Started cl-s01-2
  * Resource Group: s01_ascs21_group:
    * s01_fs_ascs21	(ocf:heartbeat:Filesystem):	 Started cl-s01-1
    * s01_vip_ascs21	(ocf:heartbeat:powervs-subnet):	 Started cl-s01-1
  * Resource Group: s01_ers22_group:
    * s01_fs_ers22	(ocf:heartbeat:Filesystem):	 Started cl-s01-1
    * s01_vip_ers22	(ocf:heartbeat:powervs-subnet):	 Started cl-s01-1

Migration Summary:

Tickets:

PCSD Status:
  cl-s01-1: Online
  cl-s01-2: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

确保 ${sid}_ascs${ASCS_INSTNO}_group 群集资源组在 NODE1 上运行,${sid}_ers${ERS_INSTNO}_group 群集资源组在 NODE2 上运行。 如果需要,使用 pcs resource move <resource_group_name> 命令将资源组重新定位到适当的节点。

更改ASCS和ERS挂载点的所有权

sidadm 用户必须拥有 ASCSERS 实例文件系统的挂载点。 在开始安装实例之前,创建所需的用户和组,并设置挂载点所有权。

在两个节点上按照以下步骤配置正确的所有权。

  1. 启动 SAP Software Provisioning Manager (SWPM) 创建操作系统用户和组。

    <swpm>/sapinst
    

    在 SWPM 网络界面中,转到系统重命名 > 准备工作 > 操作系统用户和组。 记录用户和组 IDss,并验证它们在两个节点上是否相同。

  2. 更改挂载点所有权。

    chown -R ${sid}adm:sapsys /sapmnt/${SID} /usr/sap/${SID}
    

安装ASCS和ERS实例

使用SWPM安装两个实例。

  • 在集群节点上安装 ASCSERS 实例。

    • 在 NODE1 上,使用与 ASCS 虚拟 IP 地址关联的虚拟主机名 ${ASCS_VH} 安装 ASCS 实例。
    <swpm>/sapinst SAPINST_USE_HOSTNAME=${ASCS_VH}
    
    • 在 NODE2 上,使用与 ERS 虚拟 IP 地址关联的虚拟主机名 ${ERS_VH} 安装 ERS 实例。
    <swpm>/sapinst SAPINST_USE_HOSTNAME=${ERS_VH}
    
  • 在群集环境之外安装所有其他 SAP 应用程序实例。

准备ASCS和ERS实例,用于集群集成

使用以下步骤为集群集成准备 SAP 实例。

禁用自动启动 ASCS 和 ERS 的 SAP 实例代理

禁止在系统重启后自动启动 ASCSERS 实例的 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 实例 中的步骤。 在 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 文件,以防止在系统重启后自动启动 ASCSERS 实例的 sapstartsrv 实例代理。

在两个节点上,删除或注释 SAP 服务文件中 ASCSERSsapstartsrv 条目。

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 实例

在两个节点上注册 SAP 实例。

  1. root 用户身份登录两个节点。

  2. 设置 LD_LIBRARY_PATH 环境变量,使其包含 ASCS 实例可执行目录,并注册 ASCS 实例。

    export LD_LIBRARY_PATH=/usr/sap/${SID}/ASCS${ASCS_INSTNO}/exe && \
    /usr/sap/${SID}/ASCS${ASCS_INSTNO}/exe/sapstartsrv \
       pf=/usr/sap/${SID}/SYS/profile/${SID}_ASCS${ASCS_INSTNO}_${ASCS_VH} -reg
    
  3. 使用 ERS 配置文件对 ERS 实例重复注册步骤。

    export LD_LIBRARY_PATH=/usr/sap/${SID}/ERS${ERS_INSTNO}/exe && \
    /usr/sap/${SID}/ERS${ERS_INSTNO}/exe/sapstartsrv \
       pf=/usr/sap/${SID}/SYS/profile/${SID}_ERS${ERS_INSTNO}_${ERS_VH} -reg
    

禁用 ASCS 和 ERS 实例的 systemd 服务

在两个节点上,禁用 ASCS 实例代理的 systemd 服务。

systemctl disable --now SAP${SID}_${ASCS_INSTNO}.service

然后,禁用 ERS 实例代理的 systemd 服务。

systemctl disable --now SAP${SID}_${ERS_INSTNO}.service

禁用 systemd 重启崩溃的 ASCS 或 ERS 实例

Systemd 包括重新启动崩溃服务的内置机制。 在高可用性设置中,只有 HA 群集应管理 SAP ASCSERS 实例。 为防止 systemd 自动重启这些实例,请在两个群集节点上创建插入式配置文件。

在两个节点上,创建投放文件的目录。

mkdir /etc/systemd/system/SAP${SID}_${ASCS_INSTNO}.service.d
mkdir /etc/systemd/system/SAP${SID}_${ERS_INSTNO}.service.d

在两个节点上为 ASCSERS 创建插入文件。

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 的硬件密钥

在两个节点上,以 sidadm 用户身份运行以下命令,以获取硬件密钥。

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 Notes:

安装 SAP 资源代理

安装所需的软件包。 resource-agents-sap 软件包提供 SAPInstance 集群资源代理,用于管理 SAP 实例。

如果 sap_cluster_connector 没有为 SAP 实例配置,RHEL HA Add-On 群集会将任何状态变化视为潜在问题。 当外部 SAP 工具(如 sapcontrol )用于管理实例时,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 群集连接器

sidadm 用户添加到两个节点上的 haclient 组。

usermod -a -G haclient ${sid}adm

调整 SAP 实例配置文件

修改由集群外的 SAP 工具管理的 SAP 实例的启动配置文件。 RHEL HA Add-On 群集及其资源代理可以控制 ASCSERS 实例。 要防止自动重启实例进程,请相应调整 SAP 实例配置文件。

在 NODE1 上,更改到 SAP 配置文件目录。

cd /sapmnt/${SID}/profile

Start_Program 替换 ASCSERS 实例配置文件中的所有 Restart_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}

ASCSERS 实例配置文件末尾添加以下行,以启用 sap_cluster_connector 整合:

service/halib = $(DIR_EXECUTABLE)/saphascriptco.so
service/halib_cluster_connector = /usr/bin/sap_cluster_connector

配置ASCS和ERS集群资源

到目前为止,我们假设:

  • 在两个虚拟服务器实例上运行 RHEL HA 附加集群,并测试节点围栏。
  • 已配置克隆的文件系统集群资源,用于挂载 sapmnt共享
  • 两个文件系统集群资源被配置为挂载 ASCSERS 实例文件系统。
  • ASCSERS 实例的虚拟 IP 地址配置两个 powervs-subnet 集群资源。
  • ASCS实例已安装并激活,地址为 NODE1。
  • ERS实例已安装并激活,地址为 NODE2。
  • 为群集集成准备 ASCS 和 ERS 实例 中描述的所有步骤均已完成。

配置ASCS集群资源组

在 NODE1 上,运行以下命令创建管理 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集群资源组

在 NODE2 上,运行以下命令创建管理 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

配置集群约束

在 NODE1 上,运行以下命令配置群集约束。

如果至少有两个节点可用,则主机托管约束可确保资源组 ${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

结论

多区环境中的 ENSA2 多区环境中的群集实施工作现已完成。

现在,运行与 测试 SAP ENSA2 集群中 所述测试类似的测试来验证集群。

下面显示的是 pcs status 命令在多区区域部署中已完成的群集的输出示例。ENSA2 集群的输出示例。

Cluster name: SAP_S01
Status of pacemakerd: 'Pacemaker is running' (last updated 2024-11-22 09:42:15 +01:00)
Cluster Summary:
  * Stack: corosync
  * Current DC: cl-s01-1 (version 2.1.5-9.el9_2.4-a3f44794f94) - partition with quorum
  * Last updated: Fri Nov 22 09:42:15 2024
  * Last change:  Fri Nov 22 09:06:18 2024 by root via cibadmin on cl-s01-1
  * 2 nodes configured
  * 10 resource instances configured

Node List:
  * Online: [ cl-s01-1 cl-s01-2 ]

Full List of Resources:
  * fence_node1	(stonith:fence_ibm_powervs):	 Started cl-s01-1
  * fence_node2	(stonith:fence_ibm_powervs):	 Started cl-s01-2
  * Clone Set: fs_sapmnt-clone [fs_sapmnt]:
    * Started: [ cl-s01-1 cl-s01-2 ]
  * Resource Group: s01_ascs21_group:
    * s01_fs_ascs21	(ocf:heartbeat:Filesystem):	 Started cl-s01-1
    * s01_vip_ascs21	(ocf:heartbeat:powervs-subnet):	 Started cl-s01-1
    * s01_ascs21	(ocf:heartbeat:SAPInstance):	 Started cl-s01-1
  * Resource Group: s01_ers22_group:
    * s01_fs_ers22	(ocf:heartbeat:Filesystem):	 Started cl-s01-2
    * s01_vip_ers22	(ocf:heartbeat:powervs-subnet):	 Started cl-s01-2
    * s01_ers22	(ocf:heartbeat:SAPInstance):	 Started cl-s01-2

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled