Terraform:RHEL 上的 SAP NetWeaver 的高可用性集群配置指南

本指南向您展示如何为 SAP NetWeaver 自动部署性能优化的 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 集群。

本指南使用 Terraform 来部署两个 Compute Engine 虚拟机 (VM)、一个实现了内部直通式网络负载均衡器的虚拟 IP 地址 (VIP) 和一个基于操作系统的高可用性集群,部署时全都遵循 Google Cloud、SAP 和操作系统供应商的最佳实践。

如需了解如何为 SAP NetWeaver 部署 Compute Engine 虚拟机,请参阅您的操作系统对应的 SAP NetWeaver 部署指南

如需在 SUSE Linux Enterprise Server (SLES) 上为 SAP NetWeaver 配置高可用性集群,请参阅针对 SLES 上的 SAP NetWeaver 的高可用性集群手动配置指南

本指南适用于熟悉 SAP NetWeaver 的 Linux 高可用性配置的 SAP NetWeaver 高级用户。

本指南部署的系统

按照本指南,您将部署两个 SAP NetWeaver 实例并将在 RHEL 上设置高可用性集群。您需要在同一区域内不同可用区中的 Compute Engine 虚拟机上部署每个 SAP NetWeaver 实例。本指南未介绍底层数据库的高可用性安装。

单节点 SAP NetWeaver 系统的高可用性 Linux 集群概览

部署的集群包括以下功能和特性:

  • 两个主机虚拟机,一个用于活跃 ASCS 实例,另一个用于 ENSA2 Enqueue Replicator 或 ENSA1 Enqueue Replication Server (ENSA1) 的活跃实例。ENSA2 和 ENSA1 实例均称为 ERS。
  • Pacemaker 高可用性集群资源管理器。
  • STONITH 防护机制。
  • 自动重启失败的实例,将其用作新的辅助实例。

前提条件

在创建 SAP NetWeaver 高用性集群之前,请确保满足以下前提条件:

除非 Google Cloud 环境另有要求,否则本指南中的信息与 Red Hat 和 SAP 提供的以下相关指南一致:

创建网络

出于安全考虑,建议您创建一个新的网络。您可以通过添加防火墙规则或使用其他访问权限控制方法来控制哪些人有权访问该网络。

如果您的项目具有默认 VPC 网络,请勿使用。 请创建自己的 VPC 网络,以保证只有您明确创建的防火墙规则在起作用。

在部署期间,虚拟机实例通常需要访问互联网来下载 Google Cloud's Agent for SAP。如果您使用的是由 Google Cloud 提供的某一经 SAP 认证的 Linux 映像,那么虚拟机实例还需要访问互联网来注册许可以及访问操作系统供应商代码库。具有 NAT 网关和虚拟机网络标记的配置支持这种访问,即使目标虚拟机没有外部 IP 地址,也是如此。

如需为您的项目创建 VPC 网络,请完成以下步骤:

  1. 创建自定义模式网络。如需了解详情,请参阅创建自定义模式网络

  2. 创建一个子网,并指定区域和 IP 地址范围。如需了解详情,请参阅添加子网

设置 NAT 网关

如果您需要创建一个或多个没有公共 IP 地址的虚拟机,则需要使用网络地址转换 (NAT) 以使虚拟机能够访问互联网。使用 Cloud NAT,这是 Google Cloud 提供的一项软件定义的代管式服务,可让虚拟机将出站数据包发送到互联网,并接收任何对应的已建立入站响应数据包。或者,您可以将单独的虚拟机设置为 NAT 网关。

如需为项目创建 Cloud NAT 实例,请参阅使用 Cloud NAT

为项目配置 Cloud NAT 后,虚拟机实例可以在没有公共 IP 地址的情况下安全地访问互联网。

添加防火墙规则

默认情况下,系统会屏蔽从 Google Cloud 网络外部传入的连接。如需允许传入的连接,请为您的虚拟机设置防火墙规则。 这些防火墙规则仅适用于新传入虚拟机的连接。在与虚拟机建立连接后,防火墙会允许通过此连接的双向流量。

通过创建防火墙规则,您可以允许对指定端口进行访问,也可以允许同一子网中各虚拟机之间互相访问。

如要允许以下访问,请创建防火墙规则:

  • 访问 SAP NetWeaver 使用的默认端口,具体请参阅所有 SAP 产品的 TCP/IP 端口
  • 从您的计算机或公司网络环境连接到 Compute Engine 虚拟机实例。如果您不确定使用哪个 IP 地址,请与您公司的网络管理员联系。
  • 3 层式、横向扩缩或高可用性配置中的虚拟机之间的通信。例如,如果您要部署 3 层式系统,则子网中应至少有 2 个虚拟机:一个用于 SAP NetWeaver,另一个用于数据库服务器。为使两个虚拟机之间得以相互通信,您必须创建防火墙规则以允许来自子网的流量。
  • Cloud Load Balancing 健康检查。

如需为您的项目创建防火墙规则,请参阅创建防火墙规则

为 SAP NetWeaver 创建高可用性 Linux 集群

以下说明使用 Terraform 配置文件为具有两个 Compute Engine 虚拟机的 SAP NetWeaver 创建 RHEL 高可用性集群。Compute Engine 虚拟机在两个目标地区中创建,用于 SAP 中央服务和故障转移复制的自动故障转移配置。

您可以在 Terraform 配置文件中定义 SAP NetWeaver 高可用性集群的配置选项。

  1. 打开 Cloud Shell。

    打开 Cloud Shell

  2. 将 SAP NetWeaver 高可用性集群的 sap_nw_ha.tf 配置文件下载到您的工作目录:

    $ wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_nw_ha/terraform/sap_nw_ha.tf
  3. 在 Cloud Shell 代码编辑器中打开 sap_nw_ha.tf 文件。

    如需打开 Cloud Shell 代码编辑器,请点击 Cloud Shell 终端窗口右上角的铅笔图标。

  4. sap_nw_ha.tf 文件中,更新参数值,方法是将双引号中的内容替换为安装所需的值。下表介绍了这些参数。

    参数名 数据类型 说明
    source 字符串

    指定部署期间要使用的 Terraform 模块的位置和版本。

    sap_nw_ha.tf 配置文件包含 source 参数的两个实例:一个实例是当前活跃对象,另一个实例则作为注释包含在文件内。默认处于活跃状态的 source 参数会指定 latest 作为模块版本。source 参数的第二个实例(默认通过前导 # 字符停用)会指定一个时间戳,用于标识特定模块版本。

    如果您需要所有部署使用同一模块版本,则从指定版本时间戳的 source 参数移除前导 # 字符,并将该字符添加到指定 latestsource 参数。

    project_id 字符串 指定要在其中部署此系统的 Google Cloud 项目的 ID。 例如 my-project-x
    machine_type 字符串 指定要在其上运行 SAP 系统的 Compute Engine 虚拟机 (VM) 的类型。如果您需要自定义虚拟机类型,请指定一个预定义虚拟机类型,其中 vCPU 的数量最接近但仍大于所需的数量。部署完成后,修改 vCPU 数量和内存量

    例如 n1-highmem-32

    network 字符串 指定网络的名称,您需要在其中创建管理 VIP 的负载均衡器。

    如果您使用的是共享 VPC 网络,则必须将宿主项目的 ID 添加为网络名称的父目录部分。例如 HOST_PROJECT_ID/NETWORK_NAME

    subnetwork 字符串 指定您在先前步骤中创建的子网的名称。如果您要部署到共享 VPC,请以 SHARED_VPC_PROJECT_ID/SUBNETWORK 形式指定该值。例如 myproject/network1
    linux_image 字符串 指定要在其中部署 SAP 系统的 Linux 操作系统映像的名称。 例如 rhel-9-2-sap-ha。 如需查看可用操作系统映像的列表,请参阅 Google Cloud 控制台中的映像页面。
    linux_image_project 字符串 指定包含您为 linux_image 参数指定的映像的 Google Cloud 项目。此项目可以是您自己的项目,也可以是某个 Google Cloud 映像项目。 对于 Compute Engine 映像,请指定 rhel-sap-cloud。 如需查找操作系统的映像项目,请参阅操作系统详细信息
    sap_primary_instance 字符串 指定主要 SAP NetWeaver 系统的虚拟机实例的名称。这是您的初始 ASCS 位置。名称可以包含小写字母、数字或连字符,并且不能超过 13 个字符。
    sap_primary_zone 字符串 指定要在其中部署主要 SAP NetWeaver 系统的可用区。主要可用区和辅助可用区必须位于同一区域。 例如:us-east1-b
    sap_secondary_instance 字符串 指定辅助 SAP NetWeaver 系统的虚拟机实例的名称。这是您的初始 ERS 位置。名称可以包含小写字母、数字或连字符,并且不能超过 13 个字符。
    sap_secondary_zone 字符串 指定要在其中部署辅助 SAP NetWeaver 系统的可用区。主要可用区和辅助可用区必须位于同一区域。 例如 us-east1-c
    nfs_path 字符串 指定共享文件系统的 NFS 装载点。例如 10.163.58.114:/ssd_nfs
    sap_sid 字符串 指定 SAP 系统 ID。此 ID 必须由 3 个字母数字字符组成,并以字母开头。所有字母必须大写。 例如 ED1
    hc_firewall_rule_name 字符串 可选。指定健康检查防火墙规则的名称。默认值为 SAP_SID-hc-allow
    hc_network_tag 字符串 可选。指定要与虚拟机实例关联的一个或多个网络标记(以逗号分隔),用于健康检查防火墙规则。默认值为 SAP_SID-hc-allow-tag
    scs_inst_group_name 字符串 可选。指定 ASCS 实例组的名称。默认值为 SAP_SID-scs-ig
    scs_hc_name 字符串 可选。指定 ASCS 健康检查的名称。默认值为 SAP_SID-scs-hc
    scs_hc_port 字符串 可选。为 ASCS 健康检查指定端口。为避免与其他服务发生冲突,请在专用范围 (49152-65535) 中为 ASCS 健康检查指定端口号。默认值为 60000
    scs_vip_address 字符串 可选。指定之前在 subnetwork 上指定的子网中未使用的 IP 地址,以用作 ASCS 实例的虚拟 IP 地址。如果未指定此参数,部署脚本会自动从指定的子网中选择一个未使用的 IP 地址。
    scs_vip_name 字符串 可选。指定 ASCS 虚拟 IP 的名称。默认值为 SAP_SID-scs-vip
    scs_backend_svc_name 字符串 可选。指定 ASCS 后端服务的名称。默认值为 SAP_SID-scs-backend-svc
    scs_forw_rule_name 字符串 可选。指定 ASCS 转发规则的名称。默认值为 SAP_SID-scs-fwd-rule
    ers_inst_group_name 字符串 可选。指定 ERS 实例组的名称。默认值为 SAP_SID-ers-ig
    ers_hc_name 字符串 可选。指定 ERS 健康检查的名称。默认值为 SAP_SID-ers-hc
    ers_hc_port 字符串 可选。为 ERS 健康检查指定端口。为避免与其他服务发生冲突,请在专用范围 (49152-65535) 中为 ERS 健康检查指定端口号。默认值为 60010
    ers_vip_address 字符串 可选。指定之前在 subnetwork 上指定的子网中未使用的 IP 地址,以用作 ERS 实例的虚拟 IP 地址。如果未指定此参数,部署脚本会自动从指定的子网中选择一个未使用的 IP 地址。
    ers_vip_name 字符串 可选。指定 ERS 虚拟 IP 地址的名称。默认值为 SAP_SID-ers-vip
    ers_backend_svc_name 字符串 可选。指定 ERS 后端服务的名称。默认值为 SAP_SID-ers-backend-svc
    ers_forw_rule_name 字符串 可选。指定 ERS 转发规则的名称。默认值为 SAP_SID-ers-fwd-rule
    usr_sap_size 整数 可选。指定 /usr/sap 磁盘的大小(以 GB 为单位)。 最小为 8 GB。默认值为 8
    sap_mnt_size 整数 可选。指定 /sapmnt 磁盘的大小(以 GB 为单位)。 最小为 8 GB。默认值为 8
    swap_size 整数 可选。指定交换卷的大小(以 GB 为单位)。 最小为 8 GB。默认值为 8
    sap_scs_instance_number 字符串 可选。指定 ASCS 实例编号。sap_scs_instance_number 必须为两位数。如果您需要指定个位数,请在该数字前面添加 0。例如 07。默认值为 00
    sap_ers_instance_number 字符串 可选。指定 ERS 实例编号。sap_ers_instance_number 必须为两位数。如果您需要指定个位数,请在该数字前面添加 0。例如 07。默认值为 10
    sap_nw_abap 布尔值 可选。指定您要部署 SAP NetWeaver 的 ABAP 堆栈还是 Java 堆栈。如果要部署 SAP NetWeaver 的 Java 堆栈,请指定 false。默认值为 true
    pacemaker_cluster_name 字符串 可选。指定 Pacemaker 集群的名称。默认值为 SAP_SID-cluster
    public_ip 布尔值 可选。如需为虚拟机实例创建临时公共 IP 地址,请将 public_ip 设置为 true。默认值为 false
    service_account 字符串 可选。指定主机虚拟机以及主机虚拟机上运行的程序将要使用的用户管理的服务账号的电子邮件地址。例如 svc-acct-name@project-id.iam.gserviceaccount.com

    如果您指定此参数而不指定值,或者直接省略此参数,则安装脚本会使用 Compute Engine 默认服务账号。如需了解详情,请参阅 Google Cloud 上的 SAP 程序的身份和访问权限管理

    network_tags 字符串 可选。指定要与虚拟机实例关联的一个或多个网络标记(以英文逗号分隔),用于防火墙或路由。

    ILB 组件的网络标记会自动添加到虚拟机的网络标记中。

    如果为 public_ip = false 并且您没有指定网络标记,请务必提供另一种访问互联网的方法。

    sap_deployment_debug 布尔值 可选。仅当 Cloud Customer Care 要求您为部署启用调试时才指定为 true,这会使部署生成详细的部署日志。默认值为 false
    primary_reservation_name 字符串 可选。如需使用特定的 Compute Engine 虚拟机预留来预配托管高可用性集群的主要 SAP HANA 实例的虚拟机实例,请指定预留的名称。 默认情况下,安装脚本会根据以下条件选择任何可用的 Compute Engine 预留。

    无论是您指定预留名称还是安装脚本自动选择预留,都必须对预留进行如下设置才能使用该预留:

    • specificReservationRequired 选项设置为 true;或在 Google Cloud 控制台中,选中选择特定预留选项。
    • 某些 Compute Engine 机器类型支持的 CPU 平台不在该机器类型的 SAP 认证范围内。如果目标预留要用于以下任何机器类型,则必须按如下所示为该预留指定最低要求 CPU 平台:
      • n1-highmem-32:Intel Broadwell
      • n1-highmem-64:Intel Broadwell
      • n1-highmem-96:Intel Skylake
      • m1-megamem-96:Intel Skylake
    • 对于经过 SAP 认证在 Google Cloud 上使用的所有其他机器类型,最低要求 CPU 平台应符合 SAP 最低 CPU 要求。
    secondary_reservation_name 字符串 可选。如需使用特定的 Compute Engine 虚拟机预留来预配托管高可用性集群的辅助 SAP HANA 实例的虚拟机实例,请指定预留的名称。 默认情况下,安装脚本会根据以下条件选择任何可用的 Compute Engine 预留。

    无论是您指定预留名称还是安装脚本自动选择预留,都必须对预留进行如下设置才能使用该预留:

    • specificReservationRequired 选项设置为 true;或在 Google Cloud 控制台中,选中选择特定预留选项。
    • 某些 Compute Engine 机器类型支持的 CPU 平台不在该机器类型的 SAP 认证范围内。如果目标预留要用于以下任何机器类型,则必须按如下所示为该预留指定最低要求 CPU 平台:
      • n1-highmem-32:Intel Broadwell
      • n1-highmem-64:Intel Broadwell
      • n1-highmem-96:Intel Skylake
      • m1-megamem-96:Intel Skylake
    • 对于经过 SAP 认证在 Google Cloud 上使用的所有其他机器类型,最低要求 CPU 平台应符合 SAP 最低 CPU 要求。

    以下示例展示了一个已完成的配置文件,该文件定义了 SAP NetWeaver 的高可用性集群。该集群使用内部直通式网络负载均衡器来管理 VIP。

    Terraform 会部署配置文件中定义的 Google Cloud 资源,然后启动脚本会进行接管以配置操作系统和 Linux 高可用性集群。

    为清楚起见,示例中省略了配置文件中的注释。

       # ...
         module "sap_nw_ha" {
         source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_nw_ha/sap_nw_ha_module.zip"
       #
       # By default, this source file uses the latest release of the terraform module
       # for SAP on Google Cloud.  To fix your deployments to a specific release
       # of the module, comment out the source argument above and uncomment the source argument below.
       #
       # source = "https://storage.googleapis.com/cloudsapdeploy/terraform/202201240926/terraform/sap_nw_ha/sap_nw_ha_module.zip"
       #
       # ...
       #
       project_id = "example-project-123456"
       machine_type = "n2-highmem-32"
       network = "example-network"
       subnetwork = "example-subnet-us-central1"
       linux_image = "rhel-8-4-sap-ha"
       linux_image_project = "rhel-sap-cloud"
    
       sap_primary_instance = "nw-ha-vm-1"
       sap_primary_zone = "us-central1-a"
    
       sap_secondary_instance = "nw-ha-vm-2"
       sap_secondary_zone = "us-central1-c"
    
       nfs_path = "10.223.55.130:/pr1_nw"
    
       sap_sid = "PR1"
       # ...
    }
  5. 初始化当前工作目录并下载适用于 Google Cloud 的 Terraform 提供程序插件和模块文件:

    terraform init

    terraform init 命令会为其他 Terraform 命令准备该工作目录。

    如需强制刷新工作目录中的提供程序插件和配置文件,请指定 --upgrade 标志。如果省略 --upgrade 标志,并且您未对工作目录进行任何更改,则 Terraform 会使用本地缓存的副本,即使在 source 网址中指定了 latest 也是如此。

    terraform init --upgrade 
  6. (可选)创建 Terraform 执行计划:

    terraform plan

    terraform plan 命令会显示当前配置所需的更改。如果您跳过此步骤,则 terraform apply 命令会自动创建新计划并提示您批准该计划。

  7. 应用执行计划:

    terraform apply

    当系统提示您批准操作时,请输入 yes

    terraform apply 命令会设置 Google Cloud 基础架构,然后将控制权转交给脚本,脚本会根据 terraform 配置文件中定义的参数配置高可用性集群。

    当 Terraform 拥有控制权时,状态消息将写入 Cloud Shell。调用脚本后,状态消息将写入 Logging,并可在 Google Cloud 控制台中查看,如检查 Logging 日志中所述。

    完成时间可能有所不同,但整个流程通常可在 30 分钟内完成。

验证 SAP NetWeaver 高可用性系统的部署

验证 SAP NetWeaver 高可用性集群涉及多个不同的流程,包括:

  • 查看日志
  • 检查虚拟机的配置

查看日志

  1. 在 Google Cloud 控制台中,打开 Cloud Logging 以监控安装进度并检查错误。

    转到 Cloud Logging

  2. 过滤日志:

    日志浏览器

    1. 日志浏览器页面中,转到查询窗格。

    2. 资源下拉菜单中选择全局,然后点击添加

      如果您没有看到全局选项,请在查询编辑器中输入以下查询:

      resource.type="global"
      "Deployment"
      
    3. 点击运行查询

    旧式日志查看器

    • 旧版日志查看器页面中,从基本选择器菜单选择全局作为日志记录资源。
  3. 分析过滤后的日志:

    • 如果显示 "--- Finished",则表示部署已完成处理,您可以继续执行下一步。
    • 如果出现配额错误,请执行以下步骤:

      1. 对于任何不符合 SAP NetWeaver 规划指南中列出的 SAP NetWeaver 要求的配额,请在“IAM 和管理”的配额页面上提高配额。

      2. 打开 Cloud Shell。

        转到 Cloud Shell

      3. 转到工作目录,然后删除部署以清理失败安装产生的虚拟机和永久性磁盘:

        terraform destroy

        当系统提示您批准该操作时,请输入 yes

      4. 重新运行部署。

检查虚拟机的配置

  1. 部署虚拟机实例并且没有出现错误后,使用 SSH 连接到每个虚拟机。您可以在 Compute Engine 的虚拟机实例页面中点击每个虚拟机实例对应的 SSH 按钮,也可以使用自己偏好的 SSH 方法。

  2. 切换到根用户。

    sudo su -
  3. 在命令提示符处,输入 df -h。确保您看到包含 /usr/sap 目录的输出,例如 /usr/sap/trans

    nw-ha-vm-1:~ # df -h
    Filesystem                             Size  Used Avail Use% Mounted on
    ...
    /dev/mapper/vg_usrsap-vol              8.0G  242M  7.8G   3% /usr/sap
    /dev/mapper/vg_sapmnt-vol              8.0G   90M  7.9G   2% /sapmnt
    10.95.255.130:/pr1_nw/sapmntPR1       1007G     0  956G   0% /sapmnt/PR1
    10.95.255.130:/pr1_nw/usrsaptrans     1007G     0  956G   0% /usr/sap/trans
    10.95.255.130:/pr1_nw/usrsapPR1ASCS00 1007G     0  956G   0% /usr/sap/PR1/ASCS00
    ...
      
    autofs 会在部署期间自动配置,以便在首次访问文件目录时装载通用的共享文件目录。ASCSASCS_INSTANCE_NUMBERERSERS_INSTANCE_NUMBER 目录的装载由集群软件管理,该软件也在部署期间设置。

  4. 如需检查新集群的状态,请输入状态命令:pcs status

    您应该会看到类似如下示例的结果,其中两个虚拟机实例已启动,且 nw-ha-vm-1 为活跃的主实例:

    nw-ha-vm-1:~ # pcs status
    Cluster name: pr1-cluster
    Cluster Summary:
    * Stack: corosync
    * Current DC: nw-ha-vm-1 (version 2.0.5-9.el8_4.5-ba59be7122) - partition with quorum
    * Last updated: Mon Aug 29 18:03:22 2022
    * Last change:  Mon Aug 29 17:58:21 2022 by root via cibadmin on nw-ha-vm-1
    * 2 nodes configured
    * 8 resource instances configured
    Node List:
    * Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    Full List of Resources:
    * fence-PR1-nw-ha-vm-1    (stonith:fence_gce):     Started nw-ha-vm-2
    * fence-PR1-nw-ha-vm-2    (stonith:fence_gce):     Started nw-ha-vm-1
    * file-system-PR1-ASCS00    (ocf::heartbeat:Filesystem):     Started nw-ha-vm-1
    * file-system-PR1-ERS10    (ocf::heartbeat:Filesystem):     Started nw-ha-vm-2
    * health-check-PR1-ASCS00    (service:haproxy@PR1ASCS):     Started nw-ha-vm-1
    * health-check-PR1-ERS10    (service:haproxy@PR1ERS):     Started nw-ha-vm-2
    * vip-PR1-ASCS00    (ocf::heartbeat:IPaddr2):     Started nw-ha-vm-1
    * vip-PR1-ERS10    (ocf::heartbeat:IPaddr2):     Started nw-ha-vm-2
    Daemon Status:
    corosync: active/enabled
    pacemaker: active/enabled
    pcsd: active/enabled

  5. 使用 socat 实用程序测试 ASCS 和 ERS 负载均衡器设置:

    1. 在每个虚拟机实例上,临时启动返回其主机名的 socat 进程:

      socat TCP-LISTEN:80,bind=0.0.0.0,fork,reuseaddr,crlf SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; echo $(hostname)" & 
    2. 在每个节点上,使用 curl 并尝试访问以下 IP 地址和主机名。您可以在 /etc/hosts 中找到 IP 地址和主机名。

      • 127.0.0.1
      • localhost
      • ASCS_VIRTUAL_HOST_NAME
      • ASCS_IP_ADDRESS
      • ERS_VIRTUAL_HOST_NAME
      • ERS_IP_ADDRESS
      • SCS VIP 名称,为参数 scs_vip_name 指定
      • SCS VIP 地址,为参数 scs_vip_address 指定
      • ERS VIP 名称,为参数 ers_vip_name 指定
      • ERS VIP 地址,为参数 ers_vip_address 指定

    以下是此类测试的示例输出:

    example-nw1:~ # cat /etc/hosts
    ...
    10.128.1.182 example-nw1.c.myproject.internal example-nw1
    10.128.1.169 example-nw2.c.myproject.internal example-nw2
    10.128.1.46 pr1-scs-vip.c.myproject.internal pr1-scs-vip
    10.128.0.75 pr1-ers-vip.c.myproject.internal pr1-ers-vip
    example-nw1:~ # curl 127.0.0.1
    example-nw1
    example-nw1:~ # curl localhost
    example-nw1
    example-nw1:~ # curl example-nw1
    example-nw1
    example-nw1:~ # curl 10.128.1.182
    example-nw1
    example-nw1:~ # curl example-nw2
    example-nw2
    example-nw1:~ # curl 10.128.1.169
    example-nw2
    example-nw1:~ # curl pr1-scs-vip
    example-nw1
    example-nw1:~ # curl 10.128.1.46
    example-nw1
    example-nw1:~ # curl pr1-ers-vip
    example-nw2
    example-nw1:~ # curl 10.128.0.75
    example-nw2
  6. 如果您使用的是 RHEL for SAP 9.0 或更高版本,请确保将虚拟机实例 chkconfigcompat-openssl11 安装在虚拟机实例上。

    如需详细了解 SAP,请参阅 SAP 说明 3108316 - Red Hat Enterprise Linux 9.x:安装和配置

如果任何验证步骤显示安装失败,请执行以下操作:

  1. 解决错误。

  2. 打开 Cloud Shell。

    前往 Cloud Shell

  3. 进入包含 Terraform 配置文件的目录。

  4. 删除该部署:

    terraform destroy

    当系统提示您批准该操作时,请输入 yes

  5. 重新运行部署。

验证 Google Cloud 的 Agent for SAP 的安装

部署虚拟机并安装您的 SAP 系统后,请验证 Google Cloud's Agent for SAP 是否正常运行。

验证 Google Cloud 的 Agent for SAP 是否正在运行

如需验证代理是否正在运行,请按照以下步骤操作:

  1. 与主机虚拟机实例建立 SSH 连接。

  2. 运行以下命令:

    systemctl status google-cloud-sap-agent

    如果代理正常运行,则输出包含 active (running)。例如:

    google-cloud-sap-agent.service - Google Cloud Agent for SAP
    Loaded: loaded (/usr/lib/systemd/system/google-cloud-sap-agent.service; enabled; vendor preset: disabled)
    Active:  active (running)  since Fri 2022-12-02 07:21:42 UTC; 4 days ago
    Main PID: 1337673 (google-cloud-sa)
    Tasks: 9 (limit: 100427)
    Memory: 22.4 M (max: 1.0G limit: 1.0G)
    CGroup: /system.slice/google-cloud-sap-agent.service
           └─1337673 /usr/bin/google-cloud-sap-agent
    

如果代理未在运行,请重启代理

验证 SAP Host Agent 正在接收指标

如需验证基础架构指标是否由 Google Cloud's Agent for SAP 收集并正确发送到 SAP Host Agent,请按照以下步骤操作:

  1. 在您的 SAP 系统中,输入事务 ST06
  2. 在概览窗格中,检查以下字段的可用性和内容,以确保 SAP 与 Google 监控基础架构的端到端设置正确无误:

    • Cloud ProviderGoogle Cloud Platform
    • Enhanced Monitoring AccessTRUE
    • Enhanced Monitoring DetailsACTIVE

安装 ASCS 和 ERS

以下部分仅介绍特定于在 Google Cloud 上安装 SAP NetWeaver 的要求和建议。

如需了解完整的安装说明,请参阅 SAP NetWeaver 文档

准备安装

要确保集群之间的一致性并简化安装,请在安装 SAP NetWeaver ASCS 和 ERS 组件之前定义用户、组和权限,并将辅助服务器置于待机模式。

  1. 让集群退出维护模式:

    # sudo pcs property set maintenance-mode="false"

  2. 在两个服务器上,以根用户身份输入以下命令,指定适合您的环境的用户 ID 和组 ID:

    # groupadd -g GID_SAPINST sapinst
    # groupadd -g GID_SAPSYS sapsys
    # useradd -u UID_SIDADM SID_LCadm -g sapsys
    # usermod -a -G sapinst SID_LCadm
    # useradd -u UID_SAPADM sapadm -g sapinst
    
    # chown SID_LCadm:sapsys /usr/sap/SID/SYS
    # chown SID_LCadm:sapsys /sapmnt/SID -R
    # chown SID_LCadm:sapsys /usr/sap/trans -R
    # chown SID_LCadm:sapsys /usr/sap/SID/SYS -R
    # chown SID_LCadm:sapsys /usr/sap/SID -R

    替换以下内容:

    • GID_SAPINST:指定 SAP 预配工具的 Linux 组 ID。
    • GID_SAPSYS:指定 SAPSYS 用户的 Linux 组 ID。
    • UID_SIDADM:指定 SAP 系统管理员的 Linux 用户 ID (SID)。
    • SID_LC:指定系统 ID (SID)。对于任何字母,请使用小写字母。
    • UID_SAPADM:指定 SAP Host Agent 的用户 ID。
    • SID:指定系统 ID (SID)。所有字母均大写。

    例如,下面显示了实际的 GID 和 UID 编号方案:

    Group sapinst      1001
    Group sapsys       1002
    Group dbhshm       1003
    
    User  en2adm       2001
    User  sapadm       2002
    User  dbhadm       2003

安装 ASCS 组件

  1. 在辅助服务器上,输入以下命令,将辅助服务器置于备用模式:

    # pcs node standby

    将辅助服务器置于备用模式会将所有集群资源整合到主服务器上,从而简化安装。

  2. 确认辅助服务器处于备用模式:

    # pcs status

    您应该会看到类似于以下示例的输出:

    Cluster name: nwha
       Cluster Summary:
         * Stack: corosync
         * Current DC: nw-ha-vm-1 (version 2.0.5-9.el8_4.3-ba59be7122) - partition with quorum
         * 2 nodes configured
         * 8 resource instances configured
    
       Node List:
         * Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
       Full List of Resources:
         * fence-nw-ha-vm-2  (stonith:fence_gce):     Started nw-ha-vm-1
         * fence-nw-ha-vm-1  (stonith:fence_gce):     Stopped
         * Resource Group: nw8_ascs00_group:
           * nw8_vip_ascs00  (ocf::heartbeat:IPaddr2):    Started nw-ha-vm-1
           * nw8_healthcheck_scs (service:haproxy@nw8scs):    Started nw-ha-vm-1
           * nw8_fs_ascs00   (ocf::heartbeat:Filesystem):     Started nw-ha-vm-1
         * Resource Group: nw8_ers10_group:
           * nw8_vip_ers10   (ocf::heartbeat:IPaddr2):    Started nw-ha-vm-1
           * nw8_healthcheck_ers (service:haproxy@nw8ers):    Started nw-ha-vm-1
           * nw8_fs_ers10    (ocf::heartbeat:Filesystem):     Started nw-ha-vm-1
    
       Daemon Status:
         corosync: active/enabled
    
  3. 在主服务器上,以根用户的身份将目录更改为临时安装目录(例如 /tmp),以运行 SAP Software Provisioning Manager (SWPM) 来安装 ASCS 实例。

    • 要访问 SWPM 的网页界面,您需要 root 用户的密码。如果您的 IT 政策不允许 SAP 管理员访问根密码,可以使用 SAPINST_REMOTE_ACCESS_USER

    • 启动 SWPM 时,请使用 SAPINST_USE_HOSTNAME 参数指定您在 /etc/hosts 文件中为 ASCS VIP 地址定义的虚拟主机名。

      例如:

      cd /tmp; /mnt/nfs/install/SWPM/sapinst SAPINST_USE_HOSTNAME=vh-aha-scs
    • 在最终的 SWPM 确认页面上,确保虚拟主机名正确无误。

  4. 配置完成后,将辅助虚拟机退出备用模式:

    # pcs node unstandby

安装 ERS 组件

  1. 在主服务器上,以根用户或 SID_LCadm 身份停止 ASCS 服务。

    # su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function Stop"
    # su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function StopService"
  2. 在主服务器上,输入以下命令,将主服务器置于备用模式:

    # pcs node standby

    将主服务器置于备用模式会将所有集群资源整合到辅助服务器上,从而简化安装。

  3. 确认主服务器处于备用模式:

    # pcs status

  4. 在辅助服务器上,以根用户的身份将目录更改为临时安装目录(例如 /tmp),以运行 SAP Software Provisioning Manager (SWPM) 来安装 ERS 实例。

    • 使用您在安装 ASCS 组件时使用的相同用户和密码访问 SWPM。

    • 启动 SWPM 时,请使用 SAPINST_USE_HOSTNAME 参数指定您为 /etc/hosts 文件中为 ERS VIP 地址定义的虚拟主机名。

      例如:

      cd /tmp; /mnt/nfs/install/SWPM/sapinst SAPINST_USE_HOSTNAME=vh-aha-ers
    • 在最终的 SWPM 确认页面上,确保虚拟主机名正确无误。

  5. 将主虚拟机退出备用状态,使两个虚拟机都处于活动状态:

    # pcs node unstandby

配置 SAP 服务

您需要确认服务已正确配置,检查 ASCS 和 ERS 配置文件中的设置,并将 SID_LCadm 用户添加到 haclient 用户组。

确认 SAP 服务条目

  1. 在两个服务器上,确认您的 /usr/sap/sapservices 文件包含 ASCS 和 ERS 服务的条目。为此,您可以使用 systemVsystemd 集成。

    您可以使用带有 pf=PROFILE_OF_THE_SAP_INSTANCE-reg 选项的 sapstartsrv 命令来添加任何缺失的条目。

    如需详细了解这些集成,请参阅以下 SAP 说明:

    systemV

    以下示例展示了使用 systemV 集成时 /usr/sap/sapservices 文件中的 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_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \
    -D -u SID_LCadm
    /usr/sap/hostctrl/exe/sapstartsrv \
    pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \
    -D -u SID_LCadm

    systemd

    1. 验证您的 /usr/sap/sapservices 文件包含 ASCS 和 ERS 服务的条目。以下示例展示了使用 systemd 集成时 /usr/sap/sapservices 文件中的这些条目:

      systemctl --no-ask-password start SAPSID_ASCS_INSTANCE_NUMBER # sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_SID_LCascs
      systemctl --no-ask-password start SAPSID_ERS_INSTANCE_NUMBER # sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ERSERS_INSTANCE_NUMBER_SID_LCers
    2. 在 ASCS 和 ERS 实例上停用 systemd 集成:

      # systemctl disable SAPSID_ASCS_INSTANCE_NUMBER.service
      # systemctl stop SAPSID_ASCS_INSTANCE_NUMBER.service
      # systemctl disable SAPSID_ERS_INSTANCE_NUMBER.service
      # systemctl stop SAPSID_ERS_INSTANCE_NUMBER.service
      
    3. 验证 systemd 集成已停用:

      # systemctl list-unit-files | grep sap

      类似于以下示例的输出表示 systemd 集成已停用。请注意,某些服务(例如 saphostagentsaptune)已启用,某些服务已停用。

      SAPSID_ASCS_INSTANCE_NUMBER.service disabled
      SAPSID_ERS_INSTANCE_NUMBER.service disabled
      saphostagent.service enabled
      sapinit.service generated
      saprouter.service disabled
      saptune.service enabled

停止 SAP 服务

  1. 在辅助服务器上,停止 ERS 服务:

    # su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function Stop"
    # su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function StopService"
  2. 在每个服务器上,验证所有服务都已停止:

    # su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function GetSystemInstanceList"
    # su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function GetSystemInstanceList"

    您应该会看到类似于以下示例的输出:

    GetSystemInstanceList
    FAIL: NIECONN_REFUSED (Connection refused), NiRawConnect failed in plugin_fopen()

停用 SAP 中的自动服务重启功能

由于集群软件在故障切换期间管理 SAP 服务的重启,因此为了避免冲突,请停用 SAP 软件自动重启服务的功能。

  1. 在两个节点上,修改 /usr/sap/sapservices 文件,以在 SAP 软件中停用自动重启功能,方法是在 sapstartsrv 命令的开头为 ASCS 和 ERS 组件添加注释字符 #

    例如:

    #!/bin/sh
    
     #LD_LIBRARY_PATH=/usr/sap/SID/ASCSASCS_INSTANCE_NUMBER/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; /usr/sap/SID/ASCSASCS_INSTANCE_NUMBER/exe/sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME -D -u SID_LCadm
     #LD_LIBRARY_PATH=/usr/sap/SID/ERSERS_INSTANCE_NUMBER/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; /usr/sap/SID/ERSERS_INSTANCE_NUMBER/exe/sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME -D -u SID_LCadm
     

修改 ASCS 和 ERS 配置文件

  1. 在任一服务器上,使用以下任一命令切换到配置文件目录:

    # cd /usr/sap/SID/SYS/profile
    # cd /sapmnt/SID/profile
  2. 如有必要,您可以通过列出配置文件目录中的文件来找到 ASCS 配置文件的文件名,也可以使用以下格式:

    SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME
    SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME
  3. 如果您使用的是 ENSA1,请通过在 ASCS 配置文件中进行以下设置来启用 keepalive 函数:

    enque/encni/set_so_keepalive = true

    如需了解详情,请参阅 SAP 说明 1410736 - TCP/IP:设置 keepalive 间隔

  4. 如有必要,请修改 ASCS 和 ERS 配置文件,以更改 Enqueue Server 和 Enqueue Replication Server 的启动行为。

    ENSA1

    在 ASCS 配置文件的“Start SAP enqueue server”部分,如果您看到 Restart_Program_NN,请将“Restart”更改为“Start”,如以下示例所示。

    Start_Program_01 = local $(_EN) pf=$(_PF)

    在 ERS 配置文件的“Start enqueue replication server”部分,如果您看到 Restart_Program_NN,请将“Restart”更改为“Start”,如以下示例所示。

    Start_Program_00 = local $(_ER) pf=$(_PFL) NR=$(SCSID)

    ENSA2

    在 ASCS 配置文件的“Start SAP enqueue server”部分,如果您看到 Restart_Program_NN,请将“Restart”更改为“Start”,如以下示例所示。

    Start_Program_01 = local $(_ENQ) pf=$(_PF)

    在 ERS 配置文件的“Start enqueue replicator”部分,如果您看到 Restart_Program_NN,请将“Restart”更改为“Start”,如以下示例所示。

    Start_Program_00 = local $(_ENQR) pf=$(_PF) ...

为 ASCS 和 ERS 配置集群资源

  1. 在任一服务器上,以根用户身份将集群置于维护模式:

    # pcs property set maintenance-mode="true"
  2. 确认集群处于维护模式:

    # pcs status
  3. 为 ASCS 和 ERS 服务创建集群资源:

    ENSA1

    • 为 ASCS 实例创建集群资源。InstanceName 的值是您安装 ASCS 时 SWPM 生成的实例配置文件的名称。

      # pcs resource create ASCS_INSTANCE_RESOURCE SAPInstance \
          InstanceName=SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \
          START_PROFILE=/sapmnt/SID/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \
          AUTOMATIC_RECOVER=false meta resource-stickiness=5000 migration-threshold=1 \
          failure-timeout=60  --group ASCS_RESOURCE_GROUP \
          op monitor interval=20 on-fail=restart timeout=60 \
          op start interval=0 timeout=600 \
          op stop interval=0 timeout=600
      
      # pcs resource meta ASCS_RESOURCE_GROUP resource-stickiness=3000
      
    • 为 ERS 实例创建集群资源。InstanceName 的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。参数 IS_ERS=true 告知 Pacemaker 在 ERS 处于活动状态的节点上将 runsersSID 标志设置为 1

      # pcs resource create ERS_INSTANCE_RESOURCE SAPInstance \
          InstanceName=SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \
          START_PROFILE=/sapmnt/SID/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \
          AUTOMATIC_RECOVER=false IS_ERS=true --group ERS_RESOURCE_GROUP \
          op monitor interval=20 on-fail=restart timeout=60 \
          op start interval=0 timeout=600 \
          op stop interval=0 timeout=600
      

    ENSA2

    • 为 ASCS 实例创建集群资源。InstanceName 的值是您安装 ASCS 时 SWPM 生成的实例配置文件的名称。

      # pcs resource create ASCS_INSTANCE_RESOURCE SAPInstance \
          InstanceName=SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \
          START_PROFILE=/sapmnt/SID/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \
          AUTOMATIC_RECOVER=false meta resource-stickiness=5000 \
          --group ASCS_RESOURCE_GROUP \
          op monitor interval=20 on-fail=restart timeout=60 \
          op start interval=0 timeout=600 \
          op stop interval=0 timeout=600
      
      # pcs resource meta ASCS_RESOURCE_GROUP resource-stickiness=3000
      
    • 为 ERS 实例创建集群资源。InstanceName 的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。

      # pcs resource create ERS_INSTANCE_RESOURCE SAPInstance \
          InstanceName=SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \
          START_PROFILE=/sapmnt/SID/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \
          AUTOMATIC_RECOVER=false IS_ERS=true --group ERS_RESOURCE_GROUP \
          op monitor interval=20 on-fail=restart timeout=60 \
          op start interval=0 timeout=600 \
          op stop interval=0 timeout=600
      

配置位置和排序限制条件

您可以创建限制条件来定义哪些服务需要先启动,以及哪些服务需要在同一主机上一起运行。例如,IP 地址必须与主 SAP Central Services 实例位于同一主机上。

  1. 定义启动顺序限制条件:

ENSA1

  1. 创建一个主机托管限制条件,以防止 ASCS 资源与 ERS 资源在同一个服务器上运行:

    # pcs constraint colocation add ERS_RESOURCE_GROUP with \
        ASCS_RESOURCE_GROUP -5000
    
  2. 配置 ASCS,当标志 runsersSID 等于 1 时,ASCS 故障切换到运行 ERS 的服务器:

    # pcs constraint location ASCS_INSTANCE \
        rule score=2000 runs_ers_SID eq 1
  3. 将 ASCS 配置为在故障切换后 ERS 移至其他服务器之前启动:

    # pcs constraint order start ASCS_RESOURCE_GROUP then \
        stop ERS_RESOURCE_GROUP symmetrical=false kind=Optional
    

ENSA2

  1. 创建一个主机托管限制条件,以防止 ASCS 资源与 ERS 资源在同一个服务器上运行:

    # pcs constraint colocation add ERS_RESOURCE_GROUP  with \
        ASCS_RESOURCE_GROUP -5000
    
  2. 将 ASCS 配置为在故障切换后 ERS 移至其他服务器之前启动:

    # pcs constraint order start ASCS_RESOURCE_GROUP then \
        stop ERS_RESOURCE_GROUP symmetrical=false kind=Optional
    
  1. 检查限制条件:

    # pcs constraint

    您将看到如下所示的输出:

    Location Constraints:
      Resource: ascs-aha-instance
        Constraint: location-ascs-instance
          Rule: score=2000
            Expression: runs_ers_HKN eq 1
      Resource: fence-nw-ha-vm-1
        Disabled on: nw-ha-vm-1 (score:-INFINITY)
      Resource: fence-nw-ha-vm-2
        Disabled on: nw-ha-vm-2 (score:-INFINITY)
    Ordering Constraints:
      start ascs-group then stop ers-group (kind:Optional) (non-symmetrical)
    Colocation Constraints:
      ascs-group with ers-group (score:-5000)
    Ticket Constraints:
  2. 在任一服务器上,以根用户身份停用集群维护模式:

    # pcs property set maintenance-mode="false"

为 SAP 配置 Red Hat 集群连接器

在集群中的每个主机上,配置 SAP 启动服务 sapstartsrv 以通过高可用性接口与 Pacemaker 集群软件通信。

  1. 将 SAP 管理员用户添加到 haclient 群组:

    usermod -a -G haclient SID_LCadm
  2. 修改 SAP 实例配置文件,将以下几行代码添加到每个配置文件的末尾。您可以在 /sapmnt/SID/profiles 目录中找到配置文件。

    service/halib = $(DIR_CT_RUN)/saphascriptco.so
    service/halib_cluster_connector = /usr/bin/sap_cluster_connector
  3. 如果 ASCS 和 ERS 实例资源当前正在集群中运行,请停用它们:

    pcs resource disable ERS_INSTANCE_RESOURCE
    pcs resource disable ASCS_INSTANCE_RESOURCE
  4. 停止 ASCS 主机上的服务:

    sapcontrol -nr ASCS_INSTANCE_NUMBER -function StopService
  5. 停止 ERS 主机上的服务:

    sapcontrol -nr ERS_INSTANCE_NUMBER -function StopService
  6. 启用资源:

    pcs resource enable ERS_INSTANCE_RESOURCE
    pcs resource enable ASCS_INSTANCE_RESOURCE
  7. 在集群中的每台主机上重复执行上述步骤。

如需了解来自 Red Hat 的详情,请参阅如何为 RHEL 7 和 8 上的 SAPInstance 资源配置 SAP halib

在集群外部的主机上安装数据库和应用服务器

在高可用性配置中,我们建议您在与集群中的 ASCS 主机和 ERS 主机不同的主机上安装数据库和应用服务器。

通过为每台服务器使用单独的主机,您可以降低复杂性以及对多台服务器造成影响的故障风险,还可以根据每种服务器类型调整每个 Compute Engine 的大小。

这样,您就可以选择合适的认证机器大小、避免故障并降低复杂性。

本指南不介绍如何安装数据库和应用服务器。

如需了解如何安装数据库服务器,请参阅以下内容:

验证和测试集群

本部分介绍如何运行以下测试:

  • 检查配置错误
  • 确认 ASCS 和 ERS 资源在故障切换期间正确切换服务器
  • 确认锁定被保留
  • 模拟 Compute Engine 维护事件,以确保实时迁移不会触发故障切换

检查集群配置

  1. 在任一服务器上,以根用户身份查看您的资源在哪些节点上运行:

    # pcs status

    在以下示例中,ASCS 资源在 nw-ha-vm-2 服务器上运行,ERS 资源在 nw-ha-vm-1 服务器上运行。

    Stack: corosync
      Current DC: nw-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Wed Apr 13 05:21:21 2022
      Last change: Wed Apr 13 05:21:18 2022 by hacluster via crmd on nw-ha-vm-2
    
      2 nodes configured
      10 resource instances configured
    
      Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
      Full list of resources:
    
      fence-nw-ha-vm-1     (stonith:fence_gce):    Started nw-ha-vm-2
      fence-nw-ha-vm-2     (stonith:fence_gce):    Started nw-ha-vm-1
       Resource Group: ascs-group
           ascs-file-system   (ocf::heartbeat:Filesystem):    Started nw-ha-vm-2
           ascs-vip   (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-2
           ascs-healthcheck   (service:haproxy@AHAascs):      Started nw-ha-vm-2
           ascs-aha-instance      (ocf::heartbeat:SAPInstance):   Started nw-ha-vm-2
       Resource Group: ers-group
           ers-file-system    (ocf::heartbeat:Filesystem):    Started nw-ha-vm-1
           ers-vip    (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-1
           ers-healthcheck    (service:haproxy@AHAers):       Started nw-ha-vm-1
           ers-aha-instance       (ocf::heartbeat:SAPInstance):   Started nw-ha-vm-1
    
      Migration Summary:
      * Node nw-ha-vm-1:
      * Node nw-ha-vm-2:
  2. 切换到 SID_LCadm 用户:

    # su - SID_LCadm
  3. 检查集群配置。对于 INSTANCE_NUMBER,请指定您输入以下命令的服务器上处于活跃状态的 ASCS 或 ERS 实例的编号:

    > sapcontrol -nr INSTANCE_NUMBER -function HAGetFailoverConfig

    HAActive 应为 TRUE,如以下示例所示:

    HAGetFailoverConfig
    
    14.04.2022 17:25:45
    HAGetFailoverConfig
    OK
    HAActive: TRUE
    HAProductVersion: Pacemaker
    HASAPInterfaceVersion: sap_cluster_connector
    HADocumentation: https://github.com/ClusterLabs/sap_cluster_connector
    HAActiveNode:
    HANodes:

  4. SID_LCadm 身份,检查配置中的错误:

    > sapcontrol -nr INSTANCE_NUMBER -function HACheckConfig

    您应该会看到类似于以下示例的输出:

    14.04.2022 21:43:39
    HACheckConfig
    OK
    state, category, description, comment
    SUCCESS, SAP CONFIGURATION, Redundant ABAP instance configuration, 0 ABAP instances detected
    SUCCESS, SAP CONFIGURATION, Enqueue separation, All Enqueue server separated from application server
    SUCCESS, SAP CONFIGURATION, MessageServer separation, All MessageServer separated from application server
    SUCCESS, SAP STATE, SCS instance running, SCS instance status ok
    SUCCESS, SAP CONFIGURATION, SAPInstance RA sufficient version (vip-ascs_NWT_00), SAPInstance includes is-ers patch
    SUCCESS, SAP CONFIGURATION, Enqueue replication (vip-ascs_NWT_00), Enqueue replication enabled
    SUCCESS, SAP STATE, Enqueue replication state (vip-ascs_NWT_00), Enqueue replication active
    SUCCESS, SAP CONFIGURATION, SAPInstance RA sufficient version (vip-ers_NWT_10), SAPInstance includes is-ers patch

  5. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份模拟故障切换:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function HAFailoverToNode ""
  6. 如果您以根用户身份使用 crm_mon 跟踪故障切换,应该会看到 ASCS 迁移到另一个服务器,ERS 在该服务器上停止,然后 ERS 迁移到 ASCS 之前运行的服务器。

模拟故障切换

通过在主要主机上模拟故障来测试集群。在发布系统以供使用之前,请使用测试系统或在生产系统上运行测试。

您可以通过多种方式模拟故障,包括:

  • shutdown -r(活跃节点上)
  • ip link set eth0 down
  • echo c > /proc/sysrq-trigger

这里的说明使用 ip link set eth0 down 来将网络接口设为离线,因为它将同时验证故障切换和防护。

  1. 备份您的系统。

  2. 在具有活跃 SCS 实例的主机上,以根用户身份让网络接口离线:

    $ ip link set eth0 down
  3. 使用 SSH 重新连接到任一主机并切换到根用户。

  4. 输入 pcs status 以确认主要主机在辅助主机以前所在的虚拟机上当前处于活跃状态。集群中已启用自动重启,因此已停止的主机将重启并担任辅助主机的角色,如以下示例所示。

     Stack: corosync
      Current DC: nw-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Wed Apr 13 05:21:21 2022
      Last change: Wed Apr 13 05:21:18 2022 by hacluster via crmd on nw-ha-vm-2
    
      2 nodes configured
      10 resource instances configured
    
      Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
      Full list of resources:
    
      fence-nw-ha-vm-1     (stonith:fence_gce):    Started nw-ha-vm-2
      fence-nw-ha-vm-2     (stonith:fence_gce):    Started nw-ha-vm-1
       Resource Group: ascs-group
           ascs-file-system   (ocf::heartbeat:Filesystem):    Started nw-ha-vm-1
           ascs-vip   (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-1
           ascs-healthcheck   (service:haproxy@AHAascs):      Started nw-ha-vm-1
           ascs-aha-instance      (ocf::heartbeat:SAPInstance):   Started nw-ha-vm-1
       Resource Group: ers-group
           ers-file-system    (ocf::heartbeat:Filesystem):    Started nw-ha-vm-2
           ers-vip    (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-2
           ers-healthcheck    (service:haproxy@AHAers):       Started nw-ha-vm-2
           ers-aha-instance       (ocf::heartbeat:SAPInstance):   Started nw-ha-vm-2
    
      Migration Summary:
      * Node nw-ha-vm-1:
      * Node nw-ha-vm-2:

确认锁定条目被保留

如需确认锁定条目在故障切换中被保留,首先选择您的 Enqueue Server 版本对应的标签页,然后按照步骤生成锁定条目、模拟故障切换并确认锁定条目在 ASCS 激活后保留。

ENSA1

  1. 在 ERS 处于活动状态的服务器上,以 SID_LCadm 身份使用 enqt 程序生成锁定条目:

    > enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 11 NUMBER_OF_LOCKS
  2. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份验证锁定条目已注册:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now

    如果您创建了 10 个锁定,应该会看到类似于以下示例的输出:

    locks_now: 10
  3. 在 ERS 处于活动状态的服务器上,以 SID_LCadm 身份启动 enqt 程序的监控函数 OpCode=20

    > enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 20 1 1 9999

    例如:

    > enqt pf=/sapmnt/AHA/profile/AHA_ERS10_vh-ers-aha 20 1 1 9999
  4. 重新启动 ASCS 处于活跃状态的服务器。

    在监控服务器上,当 Pacemaker 停止 ERS 以将其移动到其他服务器时,您应该会看到类似如下所示的输出。

    Number of selected entries: 10
    Number of selected entries: 10
    Number of selected entries: 10
    Number of selected entries: 10
    Number of selected entries: 10
  5. enqt 监控程序停止时,输入 Ctrl + c 退出监控程序。

  6. (可选)在任一服务器上以根用户身份监控集群故障切换:

    # crm_mon
  7. SID_LCadm 身份,在确认锁定被保留后,释放锁定:

    > enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 12 NUMBER_OF_LOCKS
  8. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份验证锁定条目已移除:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now

ENSA2

  1. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份使用 enq_adm 程序生成锁定条目:

    > enq_admin --set_locks=NUMBER_OF_LOCKS:X:DIAG::TAB:%u pf=/PATH_TO_PROFILE/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME
  2. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份验证锁定条目已注册:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now

    如果您创建了 10 个锁定,应该会看到类似于以下示例的输出:

    locks_now: 10
  3. 在 ERS 处于活跃状态时,确认锁定条目已复制:

    > sapcontrol -nr ERS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now

    返回的锁定数应与 ASCS 实例上的锁定数相同。

  4. 重新启动 ASCS 处于活跃状态的服务器。

  5. (可选)在任一服务器上以根用户身份监控集群故障切换:

    # crm_mon
  6. 在重启 ASCS 的服务器上,以 SID_LCadm 身份验证锁定条目被保留:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now
  7. 确认锁定被保留后,在 ERS 处于活动状态的服务器上,以 SID_LCadm 身份释放锁定:

    > enq_admin --release_locks=NUMBER_OF_LOCKS:X:DIAG::TAB:%u pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME
  8. 在 ASCS 处于活跃状态的服务器上,以 SID_LCadm 身份验证锁定条目已移除:

    > sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now

    您应该会看到类似于以下示例的输出:

    locks_now: 0

模拟 Compute Engine 维护事件

模拟 Compute Engine 维护事件,以确保实时迁移不会触发故障切换。

在这些说明中使用的超时和间隔值考虑了实时迁移的时长。如果您在集群配置中使用较短的值,则实时迁移可能触发故障切换的风险会比较大。

如需测试集群对实时迁移的容忍度,请执行以下操作:

  1. 在主节点上,使用以下 gcloud CLI 命令触发模拟维护事件:

    $ gcloud compute instances simulate-maintenance-event PRIMARY_VM_NAME
  2. 确认主节点没有发生变化:

    $ pcs status

评估 SAP NetWeaver 工作负载

如需对 Google Cloud 上运行的 SAP NetWeaver 高可用性工作负载自动执行持续验证检查,您可以使用 Workload Manager

借助 Workload Manager,您可以根据 SAP、Google Cloud 和操作系统供应商的最佳实践自动扫描和评估 SAP NetWeaver 高可用性工作负载。这有助于提高工作负载的质量、性能和可靠性。

如需了解 Workload Manager 支持用于评估 Google Cloud 上运行的 SAP NetWeaver 高可用性工作负载的最佳实践,请参阅适用于 SAP 的 Workload Manager 最佳实践。如需了解如何使用 Workload Manager 创建和运行评估,请参阅创建和运行评估

问题排查

如需排查 SAP NetWeaver 的高可用性配置问题,请参阅排查 SAP 高可用性配置问题

收集 SAP NetWeaver 高可用性集群的诊断信息

如果您在解决 SAP NetWeaver 高可用性集群问题时需要帮助,请收集必要的诊断信息并与 Cloud Customer Care 联系。

如需收集诊断信息,请参阅 RHEL 上的高可用性集群诊断信息

支持

如有 Google Cloud 基础架构或服务方面的问题,请与 Customer Care 联系。您可以在 Google Cloud 控制台中的“支持概览”页面上找到联系信息。如果 Customer Care 确定问题在于您的 SAP 系统,会将您引荐给 SAP 支持。

对于与 SAP 产品有关的问题,请通过 SAP 支持记录您的支持请求。 SAP 会评估支持服务工单,如果该问题似乎是 Google Cloud 基础架构问题,则 SAP 会将工单转移到其系统中的相应 Google Cloud 组成团队:BC-OP-LNX-GOOGLEBC-OP-NT-GOOGLE

支持要求

您必须满足最低支持方案要求,才能获得对 SAP 系统及其使用的 Google Cloud 基础架构和服务的支持。

如需详细了解 Google Cloud 上的 SAP 的最低支持要求,请参阅:

执行部署后任务

在使用 SAP NetWeaver 系统之前,建议您备份新的 SAP NetWeaver 高可用性系统。

如需了解详情,请参阅 SAP NetWeaver 操作指南

后续步骤

如需详细了解高可用性、SAP NetWeaver 和 Google Cloud,请参阅以下资源: