SLES 上的 SAP NetWeaver 的高可用性集群配置指南

本指南介绍如何为 SAP NetWeaver 系统部署和配置针对性能优化的 SUSE Linux Enterprise Server (SLES) 高可用性 (HA) 集群。

本指南包含以下步骤:

  • 配置内部 TCP/UDP 负载平衡以在发生故障时重新路由流量
  • 在 SLES 上配置 Pacemaker 集群,以在故障转移期间管理 SAP 系统和其他资源

本指南还包括配置 SAP NetWeaver 系统以实现高可用性的步骤,但请参阅 SAP 文档来了解权威说明。

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

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

本指南部署的系统

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

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

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

  • 两个主机虚拟机,一个具有活动的 SAP 中央服务,另一个具有活动的独立 Enqueue Server
  • Pacemaker 高可用性集群资源管理器。
  • STONITH 防护机制。
  • 自动重启失败的实例,将其用作新的辅助实例。

在本指南中,您将使用 Google Cloud 提供的 Cloud Deployment Manager 模板来部署 Compute Engine 虚拟机,以确保虚拟机满足 SAP 可支持性要求并符合当前的最佳做法。

前提条件

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

  • 您或您的组织已有一个 Google Cloud 帐号,并且您已为 SAP NetWeaver 部署创建了一个项目。如需了解如何创建 Google Cloud 帐号和项目,请参阅适用于 Linux 的 SAP NetWeaver 部署指南中的创建项目
  • 如果您使用的是 VPC 内部 DNS,则项目元数据中 VmDnsSetting 变量的值必须为 GlobalOnlyZonalPreferred,才能支持跨区域解析节点名称。VmDnsSetting 的默认设置为 ZonalOnly。如需了解详情,请参阅以下主题:

  • 如果在项目元数据中启用了 OS Login,则需要暂时停用 OS Login,直到部署完成。出于部署目的,此过程会在实例元数据中配置 SSH 密钥。启用 OS Login 后,基于元数据的 SSH 密钥配置会停用,并且此部署将失败。部署完成后,您可以再次启用 OS Login。

    有关详情,请参阅:

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

创建网络

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

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

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

如需设置网络,请执行以下操作:

  1. 转到 Cloud Shell。

    转到 Cloud Shell

  2. 如需在自定义子网模式下创建新网络,请运行以下命令:

    gcloud compute networks create NETWORK_NAME --subnet-mode custom

    NETWORK_NAME 替换为新网络的名称。该网络名称只能包含小写字符、数字和短划线字符 (-)。

    指定 --subnet-mode custom 可避免使用默认的自动模式,该模式会自动在每个 Compute Engine 区域创建一个子网。如需了解详情,请参阅子网创建模式

  3. 创建一个子网,并指定地区和 IP 地址范围:

    gcloud compute networks subnets create SUBNETWORK_NAME \
            --network NETWORK_NAME --region REGION --range RANGE

    请替换以下内容:

    • SUBNETWORK_NAME:新子网的名称。
    • NETWORK_NAME:您在上一步中创建的网络的名称。
    • REGION:该子网所在的区域。
    • RANGE以 CIDR 格式指定的 IP 地址范围,例如 10.1.0.0/24。如果您计划添加多个子网,请为网络中的每个子网分配互不重叠的 CIDR IP 地址范围。请注意,每个子网及其内部 IP 地址范围均映射到一个地区。
  4. (可选)重复上述步骤并添加其他子网。

设置 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 运行状况检查。如需了解详情,请参阅为运行状况检查创建防火墙规则

如需创建防火墙规则,请执行以下操作:

  1. 在 Cloud Console 中,转到防火墙规则页面。

    打开“防火墙规则”页面

  2. 点击页面顶部的创建防火墙规则

    • 网络字段中,选择您的虚拟机所在的网络。
    • 目标字段中,选择网络中的所有实例
    • 来源过滤条件字段中,选择下列选项之一:
      • IP 地址范围:用于允许从特定 IP 地址传入的流量。 请在来源 IP 地址范围字段中指定相应 IP 地址范围。
      • 子网:用于允许从特定子网传入的流量。请在下面的子网字段中指定相应子网名称。此选项可用于允许 3 层式或横向扩缩式配置中的各虚拟机之间互相访问。
    • 协议和端口部分,选择指定的协议和端口并指定 tcp:[PORT_NUMBER];
  3. 点击创建以创建防火墙规则。

为 SAP NetWeaver 部署虚拟机

在开始配置高可用性集群之前,您需要定义和部署将充当高可用性集群中的主节点和辅助节点的虚拟机实例。

要定义和部署虚拟机,请使用您在自动部署在 Linux 上运行 SAP NetWeaver 的虚拟机中为 SAP NetWeaver 系统部署虚拟机时使用的相同 Cloud Deployment Manager 模板。

但是,为了部署两个虚拟机而不是一个虚拟机,您需要通过复制和粘贴第一个虚拟机的定义来将第二个虚拟机的定义添加到配置文件中。创建第二个定义后,您需要更改第二个定义中的资源和实例名称。为了防止发生区域故障,请在同一地区中指定另一个区域。两个定义中的所有其他属性值均相同。

成功部署虚拟机后,您将安装 SAP NetWeaver 并定义和配置高可用性集群。

以下说明使用的是 Cloud Shell,但一般也适用于 Cloud SDK。

  1. 打开 Cloud Shell。

    转到 Cloud Shell

  2. 将 YAML 配置文件模板 template.yaml 下载到您的工作目录:

    wget https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/template.yaml

  3. (可选)重命名 template.yaml 文件以标识其定义的配置。例如 nw-ha-sles15sp1.yaml

  4. 点击 Cloud Shell 终端窗口右上角的铅笔 () 图标启动编辑器,在 Cloud Shell 代码编辑器中打开 YAML 配置文件。

  5. 在 YAML 配置文件模板中,定义第一个虚拟机实例。在下表中,您需要在下一步中定义第二个虚拟机实例。

    通过将英文括号及其内容替换为安装使用的值来指定属性值。下表介绍了这些属性。如需查看已完成的配置文件的示例,请参阅完整 YAML 配置文件的示例

    属性 数据类型 说明
    名称 字符串 用于标识以下一组属性定义的部署资源的任意名称。
    类型 字符串

    指定要在部署期间使用的 Deployment Manager 模板的位置、类型和版本。

    YAML 文件包含两个 type 规范,其中一个被注释掉。默认处于活跃状态的 type 规范将模板版本指定为 latest。注释掉的 type 规范使用时间戳指定特定模板版本。

    如果您需要所有部署都使用相同的模板版本,请使用包含时间戳的 type 规范。

    instanceName 字符串 您要定义的虚拟机实例的名称。请在主虚拟机定义和辅助虚拟机定义中指定不同的名称。请考虑使用将实例标识为属于同一高可用性集群的名称。

    实例名称不得超过 13 个字符,并且只能包含小写字母、数字或连字符。请确保在您的项目范围内不重名。

    instanceType 字符串 您需要的 Compute Engine 虚拟机类型。为主虚拟机和辅助虚拟机指定相同的实例类型。

    如果您需要自定义虚拟机类型,请先指定小型预定义虚拟机类型,并在部署完成后根据需要自定义虚拟机

    zone 字符串 在其中部署您正在定义的虚拟机实例的 Google Cloud 地区。请在同一区域中为主虚拟机定义和辅助虚拟机定义指定不同的地区。地区必须在您为子网选择的区域内。
    subnetwork 字符串 您在先前步骤中创建的子网的名称。如果您要部署到共享 VPC,请以 [SHAREDVPC_PROJECT]/[SUBNETWORK] 的格式指定此值。例如 myproject/network1
    linuxImage 字符串 与 SAP NetWeaver 结合使用的 Linux 操作系统映像或映像系列的名称。如需指定映像系列,请将前缀 family/ 添加到系列名称中,例如:family/sles-15-sp1-sap。如需查看可用映像系列的列表,请参阅 Cloud Console 中的映像页面。
    linuxImageProject 字符串 您要使用的映像所属的 Google Cloud 项目。此项目可以是您自己的项目,也可以是 Google Cloud 映像项目 suse-sap-cloud。如需查看 Google Cloud 映像项目的列表,请参阅 Compute Engine 文档中的映像页面。
    usrsapSize 整数 /usr/sap 磁盘的大小。最小为 8 GB。
    sapmntSize 整数 /sapmnt 磁盘的大小。最小为 8 GB。
    swapSize 整数 交换卷的大小。最小为 1 GB。
    networkTag 字符串

    可选。一个或多个英文逗号分隔的网络标记,表示用于防火墙或路由的虚拟机实例。

    对于高可用性配置,请指定允许集群节点之间通信的防火墙规则的网络标记,以及允许 Cloud Load Balancing 运行状况检查访问集群节点的防火墙规则的网络标记。

    如果指定“publicIP: No”且不指定网络标记,请务必提供另一种访问互联网的方法。

    serviceAccount 字符串

    可选。指定用于已部署虚拟机的自定义服务帐号。该服务帐号必须包含在部署 SAP 虚拟机期间需要的权限。

    如果未指定 serviceAccount,则使用默认 Compute Engine 服务帐号。

    指定完整的服务帐号地址。例如 sap-ha-example@example-project-123456.iam.gserviceaccount.com

    publicIP 布尔值 可选。决定是否为虚拟机实例添加一个公共 IP 地址。默认为 Yes
    sap_deployment_debug 布尔值 可选。如果此值设置为 Yes,则部署将生成详细的部署日志。除非 Google 支持工程师要求您启用调试,否则请勿开启此设置。
  6. 在 YAML 配置文件中,通过复制第一个虚拟机的定义并在第一个定义后粘贴副本,创建第二个虚拟机的定义。如需查看示例,请参阅完整 YAML 配置文件的示例

  7. 在第二个虚拟机的定义中,为以下属性指定与第一个定义中的指定值不同的值:

    • name
    • instanceName
    • zone
  8. 创建虚拟机实例:

    gcloud deployment-manager deployments create [DEPLOYMENT_NAME] --config [TEMPLATE_NAME].yaml

    其中:

    • [DEPLOYMENT_NAME] 表示您的部署的名称。
    • [TEMPLATE_NAME] 表示 YAML 配置文件的名称。

    上述命令会调用 Deployment Manager,以根据 YAML 配置文件中的规范部署虚拟机。

    部署处理包含两个阶段。在第一阶段,Deployment Manager 会将其状态写入控制台。 在第二阶段,部署脚本会将其状态写入 Cloud Logging。

完整的 YAML 配置文件示例

以下示例展示了一个已完成的 YAML 配置文件,该文件使用最新版本的 Deployment Manager 模板部署两个虚拟机实例,用于 SAP NetWeaver 的高可用性配置。该示例省略了首次下载模板时包含的注释。

该文件包含要部署的两个资源(sap_nw_node_1sap_nw_node_2)的定义。每个资源定义都包含一个虚拟机的定义。

sap_nw_node_2 资源定义是通过以下方式创建的:复制并粘贴第一个定义,然后修改 nameinstanceNamezone 属性的值。两个资源定义中的所有其他属性值都相同。

networkTagserviceAccount 属性来自配置文件模板的“高级选项”部分。

resources:
- name: sap_nw_node_1
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/sap_nw.py
  properties:
    instanceName: nw-ha-vm-1
    instanceType: n2-standard-4
    zone: us-central1-b
    subnetwork: example-sub-network-sap
    linuxImage: family/sles-15-sp2-sap
    linuxImageProject: suse-sap-cloud
    usrsapSize: 15
    sapmntSize: 15
    swapSize: 24
    networkTag: cluster-ntwk-tag,allow-health-check
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
- name: sap_nw_node_2
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/sap_nw.py
  properties:
    instanceName: nw-ha-vm-2
    instanceType: n2-standard-4
    zone: us-central1-c
    subnetwork: example-sub-network-sap
    linuxImage: family/sles-15-sp2-sap
    linuxImageProject: suse-sap-cloud
    usrsapSize: 15
    sapmntSize: 15
    swapSize: 24
    networkTag: cluster-ntwk-tag,allow-health-check
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com

创建允许访问主机虚拟机的防火墙规则

请创建允许从以下来源访问每个主机虚拟机的防火墙规则(如果您尚未执行此操作):

  • 您的本地工作站、堡垒主机或跳转服务器(用于配置用途)
  • 高可用性集群中的其他主机虚拟机(用于集群节点之间的访问)
  • Cloud Load Balancing 使用的运行状况检查,如下文的为运行状况检查创建防火墙规则步骤中所述。

创建 VPC 防火墙规则时,请指定您在 template.yaml 配置文件中定义的网络标记,以将您的主机虚拟机指定为规则的目标。

若要验证部署,请定义规则以允许在端口 22 上从堡垒主机或本地工作站进行 SSH 连接。

对于集群节点之间的访问,请添加防火墙规则,用于允许在任何端口上从同一子网中的其他虚拟机建立所有类型的连接。

在继续下一部分之前,请确保已创建用于验证部署的防火墙规则以及用于集群内通信的防火墙规则。如需了解相关说明,请参阅添加防火墙规则

验证虚拟机的部署

在安装 SAP NetWeaver 或开始配置高可用性集群之前,请通过检查日志和操作系统存储映射来验证虚拟机已正确部署。

检查日志

以下步骤使用 Cloud Logging,这可能会产生费用。如需了解详情,请参阅 Cloud Logging 价格

  1. 打开 Cloud Logging,检查是否存在错误并监控安装进度。

    转到 Logging

  2. 资源标签页上,选择全局作为日志资源。如果某个虚拟机显示为 INSTANCE DEPLOYMENT COMPLETE,则表示 Deployment Manager 已完成对该虚拟机的处理。

    Logging 显示

检查虚拟机的配置

  1. 虚拟机实例部署完成之后,使用 ssh 连接到虚拟机。

    1. 创建防火墙规则以允许通过端口 22 进行 SSH 连接(如果您尚未创建的话)。
    2. 转到虚拟机实例页面。

      转到“虚拟机实例”页面

    3. 点击每个虚拟机实例条目上的 SSH 按钮来连接到每个虚拟机实例,您也可以使用自己偏好的 SSH 方法。

      Compute Engine“虚拟机实例”页面上的 SSH 按钮。

  2. 显示文件系统:

    ~> df -h

    确保您看到类似如下所示的输出:

    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                    32G  8.0K   32G   1% /dev
    tmpfs                       48G     0   48G   0% /dev/shm
    tmpfs                       32G  402M   32G   2% /run
    tmpfs                       32G     0   32G   0% /sys/fs/cgroup
    /dev/sda3                   30G  3.4G   27G  12% /
    /dev/sda2                   20M  3.7M   17M  19% /boot/efi
    /dev/mapper/vg_usrsap-vol   15G   48M   15G   1% /usr/sap
    /dev/mapper/vg_sapmnt-vol   15G   48M   15G   1% /sapmnt
    tmpfs                      6.3G     0  6.3G   0% /run/user/1002
    tmpfs                      6.3G     0  6.3G   0% /run/user/0
  3. 确认已创建交换空间:

    ~> cat /proc/meminfo | grep Swap

    您会看到类似如下示例的结果:

    SwapCached:            0 kB
    SwapTotal:      25161724 kB
    SwapFree:       25161724 kB

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

  1. 更正该错误。
  2. 部署页面上,删除该部署以从失败的安装中清除虚拟机和永久性磁盘。
  3. 重新运行部署。

更新 Cloud SDK

在部署期间,Deployment Manager 模板会在虚拟机上安装 Cloud SDK。请更新 Cloud SDK,以确保其包含所有最新更新。

  1. 通过 SSH 连接到主虚拟机。

  2. 更新 Cloud SDK:

    ~>  sudo gcloud components update
  3. 请按照提示操作。

  4. 在辅助虚拟机上重复上述步骤。

启用虚拟机之间的负载平衡器后端通信

确认虚拟机已成功部署后,启用将充当高可用性集群中的节点的虚拟机之间的后端通信。

  1. 在高可用性集群中的每个虚拟机上,启用本地路由。

    1. 通过 SSH 连接到计划集群中的每个虚拟机。
    2. 切换到根用户。
    3. 在每个机器上,通过发出以下命令,在主要接口上启用本地路由。如果您不使用 eth0 接口,请在命令中指定 eth0 以外的接口。

      echo net.ipv4.conf.eth0.accept_local=1 >> /etc/sysctl.conf
      sysctl -p

      上述命令会将设置写入配置文件。

  2. 在每个虚拟机上,创建一个启动脚本以启用后端到后端的通信:

    Cloud Console

    1. 转到 Cloud Console 中的“虚拟机实例”页面。

      转到“虚拟机实例”页面

    2. 点击主虚拟机的名称。

    3. 虚拟机实例详情页面上,点击修改按钮。

    4. 自定义元数据部分,点击添加项

    5. 密钥字段中,指定 startup-script

    6. 字段中,粘贴以下 bash 脚本:

      #! /bin/bash
      # VM startup script
      
      nic0_mac="$(curl -H "Metadata-Flavor:Google" \
      --connect-timeout 5 --retry 5 --retry-max-time 60 \
      http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/mac)"
      
      nic0_ip="$(curl -H "Metadata-Flavor:Google" \
      --connect-timeout 5 --retry 5 --retry-max-time 60 \
      http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip)"
      
      for nic in $(ls /sys/class/net); do
      nic_addr=$(cat /sys/class/net/"${nic}"/address)
      if [ "$nic_addr" == "$nic0_mac" ]; then
        nic0_name="$nic"
        break
      fi
      done
      
      [[ -n $nic0_name ]] && [[ -n $nic0_ip ]] \
      && logger -i "gce-startup-script: INFO adding IP configuration for ILB client" \
      || logger -i "gce-startup-script: ERROR could not determine IP or interface name"
      
      if [ -n "$nic0_name" ]; then
      ip rule del from all lookup local
      ip rule add pref 0 from all iif "${nic0_name}" lookup local
      ip route add local "${nic0_ip}" dev "${nic0_name}" proto kernel \
        scope host src "${nic0_ip}" table main
      ip route add local 127.0.0.0/8 dev lo proto kernel \
        scope host src 127.0.0.1 table main
      ip route add local 127.0.0.1 dev lo proto kernel \
        scope host src 127.0.0.1 table main
      ip route add broadcast 127.0.0.0 dev lo proto kernel \
        scope link src 127.0.0.1 table main
      ip route add broadcast 127.255.255.255 dev lo proto kernel \
        scope link src 127.0.0.1 table main
      fi
    7. 点击页面底部的保存

    8. 重新启动服务器以使启动脚本生效。

      完成后,自定义元数据应类似于以下示例:

      屏幕截图显示 Cloud Console 中虚拟机详细信息页面上的自定义元数据部分中的“startup-script”和其他条目

    9. 对辅助服务器重复上述步骤。

    gcloud

    1. 在 Cloud Shell 中或安装了 Cloud SDK 的任意位置,使用以下 gcloud 命令和包含的启动脚本,将启动脚本添加到每个虚拟机的实例元数据中。在输入命令之前,将变量替换为虚拟机的名称和可用区。

      gcloud compute instances add-metadata primary-vm-name \
      --zone=primary-vm-zone --metadata=startup-script='#! /bin/bash
      # VM startup script
      
      nic0_mac="$(curl -H "Metadata-Flavor:Google" \
      --connect-timeout 5 --retry 5 --retry-max-time 60 \
      http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/mac)"
      
      nic0_ip="$(curl -H "Metadata-Flavor:Google" \
      --connect-timeout 5 --retry 5 --retry-max-time 60 \
      http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip)"
      
      for nic in $(ls /sys/class/net); do
      nic_addr=$(cat /sys/class/net/"${nic}"/address)
      if [ "$nic_addr" == "$nic0_mac" ]; then
        nic0_name="$nic"
        break
      fi
      done
      
      [[ -n $nic0_name ]] && [[ -n $nic0_ip ]] \
      && logger -i "gce-startup-script: INFO adding IP configuration for ILB client" \
      || logger -i "gce-startup-script: ERROR could not determine IP or interface name"
      
      if [ -n "$nic0_name" ]; then
      ip rule add pref 0 from all iif "${nic0_name}" lookup local
      ip rule del from all lookup local
      ip route add local "${nic0_ip}" dev "${nic0_name}" proto kernel \
        scope host src "${nic0_ip}" table main
      ip route add local 127.0.0.0/8 dev lo proto kernel \
        scope host src 127.0.0.1 table main
      ip route add local 127.0.0.1 dev lo proto kernel \
        scope host src 127.0.0.1 table main
      ip route add broadcast 127.0.0.0 dev lo proto kernel \
        scope link src 127.0.0.1 table main
      ip route add broadcast 127.255.255.255 dev lo proto kernel \
        scope link src 127.0.0.1 table main
      fi'
    2. 重新启动服务器以使启动脚本生效。

    3. 如需确认启动脚本存储在实例元数据中,请发出以下命令:

      gcloud compute instances describe primary-vm-name \
      --zone=primary-vm-zone

      启动脚本会显示在输出中的 metadata 下,如以下截断的示例所示:

      metadata:
      fingerprint: Tbuij9k-knk=
      items:
      - key: post_deployment_script
      value: ''
      - key: sap_deployment_debug
      value: 'False'
      - key: status
      value: completed
      - key: startup-script
      value: |-
        #! /bin/bash
        # VM startup script
        ...
        [example truncated]
    4. 对于辅助虚拟机,将变量值替换为辅助虚拟机实例的值,然后重复上述步骤。

如需详细了解如何为 Compute Engine 虚拟机创建启动脚本,请参阅运行启动脚本

在主虚拟机和辅助虚拟机上配置 SSH 密钥

为了允许在高可用性集群中的主机之间复制文件,本部分中的步骤在这两个主机之间创建根 SSH 连接。

Google Cloud 提供的 Deployment Manager 模板会为您生成密钥,但您也可以根据需要将其替换为您生成的密钥。

您的组织可能有内部网络通信管理规范。必要时,在部署完成后,您可以从虚拟机中移除元数据,并从 authorized_keys 目录中移除密钥。

如果设置直接 SSH 连接不符合您组织的规范,您可以使用其他方法传输文件,例如:

  • 使用 Cloud Shell 上传文件下载文件菜单选项通过本地工作站传输较小的文件。请参阅使用 Cloud Shell 管理文件
  • 使用 Google Cloud Storage 存储分区交换文件。请参阅 Cloud Storage 文档中的“处理对象”。
  • 使用 Filestore 或 NetApp Cloud Volumes 服务等文件存储解决方案来创建共享文件夹。请参阅文件共享解决方案

如需在主实例和辅助实例之间启用 SSH 连接,请按照以下步骤操作。 这些步骤假定您使用 SAP 的 Deployment Manager 模板生成的 SSH 密钥。

  1. 在主要主机虚拟机上:

    1. 通过 SSH 连接到虚拟机。

    2. 切换到根用户:

      $ sudo su -
    3. 确认 SSH 密钥存在:

      # ls -l /root/.ssh/

      您应该会看到 id_rsa 密钥文件,如以下示例所示:

      -rw-r--r-- 1 root root  569 May  4 23:07 authorized_keys
      -rw------- 1 root root 2459 May  4 23:07 id_rsa
      -rw-r--r-- 1 root root  569 May  4 23:07 id_rsa.pub
    4. 使用辅助虚拟机的 SSH 密钥相关信息更新主虚拟机的元数据。

      # gcloud compute instances add-metadata secondary-vm-name \
      --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" --zone secondary-vm-zone
    5. 通过打开主系统到辅助系统之间的 SSH 连接,确认 SSH 密钥已正确设置。

      # ssh secondary-vm-name
  2. 在辅助主机虚拟机上:

    1. 通过 SSH 连接到虚拟机。

    2. 切换到根用户:

      $ sudo su -
    3. 确认 SSH 密钥存在:

      # ls -l /root/.ssh/

      您应该会看到 id_rsa 密钥文件,如以下示例所示:

      -rw-r--r-- 1 root root  569 May  4 23:07 authorized_keys
      -rw------- 1 root root 2459 May  4 23:07 id_rsa
      -rw-r--r-- 1 root root  569 May  4 23:07 id_rsa.pub
    4. 使用主虚拟机的 SSH 密钥相关信息更新辅助虚拟机的元数据。

      # gcloud compute instances add-metadata primary-vm-name \
      --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" --zone primary-zone
      # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    5. 通过打开辅助系统到主系统之间的 SSH 连接,确认 SSH 密钥已正确设置。

      # ssh primary-vm-name

设置共享文件存储并配置共享目录

您需要设置一个 NFS 文件共享解决方案,以提供高可用性集群的两个节点均可访问的高可用共享文件存储。然后,在这两个映射到共享文件存储的节点上创建目录。集群软件可确保正确的目录仅装载在正确的实例上。

本指南不介绍如何设置文件共享解决方案。如需了解如何设置文件共享系统,请参阅所选解决方案的供应商提供的说明。

如需了解 Google Cloud 上提供的文件共享解决方案,请参阅 Google Cloud 上高可用性 SAP 系统的共享存储选项

要配置共享目录,请执行以下操作:

  1. 如果您尚未设置高可用性 NFS 共享文件存储解决方案,请立即设置。

  2. 在两个服务器上装载 NFS 共享存储空间以进行初始配置。

    ~> sudo mkdir /mnt/nfs
    ~> sudo mount -t nfs nfs-path /mnt/nfs
  3. 在任一服务器中,为 sapmnt、中央传输目录、系统目录和实例专用目录创建目录。如果您使用的是 Java 堆栈,请在使用以下命令以及任何其他命令之前,将“ASCS”替换为“SCS”:

    ~> sudo mkdir /mnt/nfs/sapmntSID
    ~> sudo mkdir /mnt/nfs/usrsap{trans,SIDSYS,SIDASCSscs-instance-number,SIDERSers-instance-number}
  4. 在两个服务器上,创建必要的装载点:

    ~> sudo mkdir -p /sapmnt/SID
    ~> sudo mkdir -p /usr/sap/trans
    ~> sudo mkdir -p /usr/sap/SID/SYS
    ~> sudo mkdir -p /usr/sap/SID/ASCSscs-instance-number
    ~> sudo mkdir -p /usr/sap/SID/ERSers-instance-number
  5. 配置 autofs,以便在首次访问文件目录时装载通用的共享文件目录。ASCSscs-instance-numberERSers-instance-number 目录的装载由集群软件管理,您将在后续步骤中配置该软件。

    根据需要为文件共享解决方案调整命令中的 NFS 选项。

    在两个服务器上配置 autofs

    ~> echo "/- /etc/auto.sap" | sudo tee -a /etc/auto.master
    ~> NFS_OPTS="-rw,relatime,vers=3,hard,proto=tcp,timeo=600,retrans=2,mountvers=3,mountport=2050,mountproto=tcp"
    ~> echo "/sapmnt/SID ${NFS_OPTS} nfs-path/sapmntSID" | sudo tee -a /etc/auto.sap
    ~> echo "/usr/sap/trans ${NFS_OPTS} nfs-path/usrsaptrans" | sudo tee -a /etc/auto.sap
    ~> echo "/usr/sap/SID/SYS ${NFS_OPTS} nfs-path/usrsapSIDSYS" | sudo tee -a /etc/auto.sap

    如需详细了解 autofs,请参阅 autofs - 工作原理

  6. 在两个服务器上启动 autofs 服务:

    ~> sudo systemctl enable autofs
    ~> sudo systemctl restart autofs
    ~> sudo automount -v
  7. 触发 autofs,以通过使用 cd 命令访问每个目录来装载共享目录。例如:

    ~> cd /sapmnt/SID
    ~> cd /usr/sap/trans
    ~> cd /usr/sap/SID/SYS
    
  8. 访问所有目录后,发出 df -Th 命令以确认目录已装载。

    ~> df -Th | grep file_share_name

    您应该会看到类似如下所示的装载点和目录:

    10.49.153.26:/nfs_share_nw_ha              nfs      1007G   76M  956G   1% /mnt/nfs
    10.49.153.26:/nfs_share_nw_ha/usrsapAHASYS nfs      1007G   76M  956G   1% /usr/sap/AHA/SYS
    10.49.153.26:/nfs_share_nw_ha/usrsaptrans  nfs      1007G   76M  956G   1% /usr/sap/trans
    10.49.153.26:/nfs_share_nw_ha/sapmntAHA    nfs      1007G   76M  956G   1% /sapmnt/AHA

配置 Cloud Load Balancing 故障转移支持

具有故障转移支持的内部 TCP/UDP 负载平衡服务会将 SCS 和 ERS 流量路由到 SAP NetWeaver 集群中各自的活动实例。内部 TCP/UDP 负载平衡使用虚拟 IP (VIP) 地址、后端服务、实例组和运行状况检查来相应地路由流量。

为虚拟 IP 地址预留 IP 地址

对于 SAP NetWeaver 高可用性集群,您将创建两个 VIP 地址(有时称为“浮动” IP 地址)。一个 VIP 用于活动的 SAP 中央服务 (SCS) 实例,另一个用于 Enqueue Replication Server (ERS) 实例。负载平衡器会将发送到每个 VIP 地址的流量路由到当前正在托管 VIP 的 SCS 或 ERS 组件的活动实例的虚拟机。

  1. 打开 Cloud Shell:

    转到 Cloud Shell

  2. 为 SCS 的虚拟 IP 和 ERS 的 VIP 预留 IP 地址。对于 SCS,该 IP 地址是应用用于访问 SAP NetWeaver 的 IP 地址。对于 ERS,该 IP 地址是用于排队服务器复制的 IP 地址。如果您省略 --addresses 标志,系统会为您选择指定子网中的 IP 地址:

    ~ gcloud compute addresses create scs-vip-name \
      --region cluster-region --subnet cluster-subnet \
      --addresses scs-vip-address
    
    ~ gcloud compute addresses create ers-vip-name \
      --region cluster-region --subnet cluster-subnet \
      --addresses ers-vip-address

    如需详细了解如何预留静态 IP 地址,请参阅预留静态内部 IP 地址

  3. 确认 IP 地址预留:

    ~ gcloud compute addresses describe vip-name \
      --region cluster-region

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

    address: 10.1.0.85
    addressType: INTERNAL
    creationTimestamp: '2021-05-12T13:30:29.991-07:00'
    description: ''
    id: '1740813556077659146'
    kind: compute#address
    name: scs-aha-vip-name
    networkTier: PREMIUM
    purpose: GCE_ENDPOINT
    region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/addresses/scs-aha-vip-name
    status: RESERVED
    subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-sub-network-sap

/etc/hosts 中为 VIP 地址定义主机名

为每个 VIP 地址定义主机名,然后将虚拟机和 VIP 的 IP 地址和主机名添加到每个虚拟机上的 /etc/hosts 文件。

虚拟机外部不知道 VIP 主机名,除非您也将其添加到 DNS 服务。将这些条目添加到本地 /etc/hosts 文件可保护集群免受 DNS 服务中断的影响。

/etc/hosts 文件的更新应与以下示例类似:

#
# IP-Address  Full-Qualified-Hostname  Short-Hostname
#
127.0.0.1       localhost
10.1.0.89       nw-ha-vm-1
10.1.0.88       nw-ha-vm-2
10.1.0.90       vh-scs-aha
10.1.0.91       vh-ers-aha

创建 Cloud Load Balancing 运行状况检查

创建运行状况检查:一个用于活动的 SCS 实例,另一个用于活动的 ERS。

  1. 在 Cloud Shell 中,创建运行状况检查。为避免与其他服务发生冲突,请在专用范围 (49152-65535) 中为 SCS 和 ERS 实例指定端口号。以下命令中的检查间隔和超时值略大于默认值,其目的是为了在 Compute Engine 实时迁移事件期间提高故障转移容忍度。您可以根据需要调整这些值:

    1. ~ gcloud compute health-checks create tcp scs-health-check-name \
      --port=scs-healthcheck-port-num --proxy-header=NONE --check-interval=10 --timeout=10 \
      --unhealthy-threshold=2 --healthy-threshold=2
    2. ~ gcloud compute health-checks create tcp ers-health-check-name \
      --port=ers-healthcheck-port-num --proxy-header=NONE --check-interval=10 --timeout=10 \
      --unhealthy-threshold=2 --healthy-threshold=2
  2. 确认每个运行状况检查均已创建:

    ~ gcloud compute health-checks describe health-check-name

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

    checkIntervalSec: 10
    creationTimestamp: '2021-05-12T15:12:21.892-07:00'
    healthyThreshold: 2
    id: '1981070199800065066'
    kind: compute#healthCheck
    name: scs-aha-health-check-name
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/scs-aha-health-check-name
    tcpHealthCheck:
      port: 60000
      portSpecification: USE_FIXED_PORT
      proxyHeader: NONE
    timeoutSec: 10
    type: TCP
    unhealthyThreshold: 2

为运行状况检查创建防火墙规则

请为专用范围内的端口定义防火墙规则,以允许从 Cloud Load Balancing 运行状况检查使用的 IP 地址范围(35.191.0.0/16130.211.0.0/22)访问您的主机虚拟机(如果您尚未这样做)。如需详细了解负载平衡器的防火墙规则,请参阅为运行状况检查创建防火墙规则

  1. 如果您还没有为主机虚拟机添加网络标记,请先添加。此网络标记由防火墙规则用于运行状况检查。

  2. 创建使用网络标记的防火墙规则以允许运行状况检查:

    ~ gcloud compute firewall-rules create  rule-name \
      --network=network-name \
      --action=ALLOW \
      --direction=INGRESS \
      --source-ranges=35.191.0.0/16,130.211.0.0/22 \
      --target-tags=network-tags \
      --rules=tcp:scs-healthcheck-port-num,tcp:ers-healthcheck-port-num

    例如:

    gcloud compute firewall-rules create  nw-ha-cluster-health-checks \
    --network=example-network \
    --action=ALLOW \
    --direction=INGRESS \
    --source-ranges=35.191.0.0/16,130.211.0.0/22 \
    --target-tags=allow-health-check \
    --rules=tcp:60000,tcp:60010

创建 Compute Engine 实例组

您需要在包含集群节点虚拟机的每个可用区中创建一个实例组,并将该可用区中的虚拟机添加到实例组中。

  1. 在 Cloud Shell 中,创建主实例组并向其添加主虚拟机:

    1. ~ gcloud compute instance-groups unmanaged create primary-ig-name \
      --zone=primary-vm-zone
    2. ~ gcloud compute instance-groups unmanaged add-instances primary-ig-name \
      --zone=primary-vm-zone \
      --instances=primary-vm-name
  2. 在 Cloud Shell 中,创建辅助实例组并向其添加辅助虚拟机:

    1. ~ gcloud compute instance-groups unmanaged create secondary-ig-name \
      --zone=secondary-vm-zone
    2. ~ gcloud compute instance-groups unmanaged add-instances secondary-ig-name \
      --zone=secondary-vm-zone \
      --instances=secondary-vm-name
  3. 确认已创建实例组:

    ~ gcloud compute instance-groups unmanaged list

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

    NAME                              ZONE           NETWORK              NETWORK_PROJECT        MANAGED  INSTANCES
    sap-aha-primary-instance-group    us-central1-b  example-network-sap  example-project-123456  No       1
    sap-aha-secondary-instance-group  us-central1-c  example-network-sap  example-project-123456  No       1
    

配置后端服务

创建两个后端服务,一个用于 SCS,另一个用于 ERS。将两个实例组添加到每个后端服务,并将相反的实例组指定为每个后端服务中的故障转移实例组。最后,创建从 VIP 地址到后端服务的转发规则。

  1. 在 Cloud Shell 中,为 SCS 创建后端服务和故障转移组:

    1. 为 SCS 创建后端服务:

      ~ gcloud compute backend-services create scs-backend-service-name \
         --load-balancing-scheme internal \
         --health-checks scs-health-check-name \
         --no-connection-drain-on-failover \
         --drop-traffic-if-unhealthy \
         --failover-ratio 1.0 \
         --region cluster-region \
         --global-health-checks
    2. 将主实例组添加到 SCS 后端服务:

      ~ gcloud compute backend-services add-backend scs-backend-service-name \
        --instance-group primary-ig-name \
        --instance-group-zone primary-vm-zone \
        --region cluster-region
    3. 将辅助实例组添加为 SCS 后端服务的故障转移实例组:

      ~ gcloud compute backend-services add-backend scs-backend-service-name \
        --instance-group secondary-ig-name \
        --instance-group-zone secondary-vm-zone \
        --failover \
        --region cluster-region
  2. 在 Cloud Shell 中,为 ERS 创建后端服务和故障转移组:

    1. 为 ERS 创建后端服务:

      ~ gcloud compute backend-services create ers-backend-service-name \
      --load-balancing-scheme internal \
      --health-checks ers-health-check-name \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 1.0 \
      --region cluster-region \
      --global-health-checks
    2. 将辅助实例组添加到 ERS 后端服务:

      ~ gcloud compute backend-services add-backend ers-backend-service-name \
        --instance-group secondary-ig-name \
        --instance-group-zone secondary-vm-zone \
        --region cluster-region
    3. 将主实例组添加为 ERS 后端服务的故障转移实例组:

      ~ gcloud compute backend-services add-backend ers-backend-service-name \
        --instance-group primary-ig-name \
        --instance-group-zone primary-vm-zone \
        --failover \
        --region cluster-region
  3. (可选)确认后端服务按预期包含实例组:

    ~ gcloud compute backend-services describe backend-service-name \
     --region=cluster-region

    对于 SCS 后端服务,您应该会看到类似下示例的输出。对于 ERS,failover: true 会显示在主实例组上:

    backends:
    - balancingMode: CONNECTION
      group: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group
    - balancingMode: CONNECTION
      failover: true
      group: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group
    connectionDraining:
      drainingTimeoutSec: 0
    creationTimestamp: '2021-05-25T08:30:58.424-07:00'
    description: ''
    failoverPolicy:
      disableConnectionDrainOnFailover: true
      dropTrafficIfUnhealthy: true
      failoverRatio: 1.0
    fingerprint: n44gVc1VVQE=
    healthChecks:
    - https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/scs-aha-health-check-name
    id: '4940777952116778717'
    kind: compute#backendService
    loadBalancingScheme: INTERNAL
    name: scs-aha-backend-service-name
    protocol: TCP
    region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/backendServices/scs-aha-backend-service-name
    sessionAffinity: NONE
    timeoutSec: 30
  4. 在 Cloud Shell 中,为 SCS 和 ERS 后端服务创建转发规则:

    1. 创建从 SCS VIP 到 SCS 后端服务的转发规则:

      ~ gcloud compute forwarding-rules create scs-forwarding-rule-name \
      --load-balancing-scheme internal \
      --address scs-vip-address \
      --subnet cluster-subnet \
      --region cluster-region \
      --backend-service scs-backend-service-name \
      --ports ALL
    2. 创建从 ERS VIP 到 ERS 后端服务的转发规则:

      ~ gcloud compute forwarding-rules create ers-forwarding-rule-name \
      --load-balancing-scheme internal \
      --address ers-vip-address \
      --subnet cluster-subnet \
      --region cluster-region \
      --backend-service ers-backend-service-name \
      --ports ALL

测试负载平衡器配置

即使您的后端实例组在稍后完成相应配置之前不会被注册为运行状况良好,您仍然可以通过设置侦听器响应运行状况检查来测试负载平衡器配置。设置侦听器后,如果负载平衡器配置正确,则后端实例组的状态会变为运行状况良好。

以下部分介绍了可用于测试配置的各种不同方法。

使用 socat 实用程序测试负载平衡器

您可以使用 socat 实用程序来临时监听运行状况检查端口。无论如何,您都需要安装 socat 实用程序,因为稍后在配置集群资源时会用到它。

  1. 在两个主机虚拟机上,以根用户的身份安装 socat 实用程序:

    # zypper install -y socat

  2. 在主虚拟机上,启动 socat 进程以监听 SCS 运行状况检查端口 60 秒:

    # timeout 60s socat - TCP-LISTEN:scs-healthcheck-port-num,fork

  3. 在 Cloud Shell 中,等待几秒钟,让运行状况检查检测到监听器,然后检查 SCS 后端实例组的运行状况:

    ~ gcloud compute backend-services get-health scs-backend-service-name \
      --region cluster-region
  4. 对 ERS 重复上述步骤,将 SCS 变量值替换为 ERS 值。

    对于 SCS,您应该会看到类似于如下示例的输出:

    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group
    status:
      healthStatus:
      - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule
        forwardingRuleIp: 10.1.0.90
        healthState: HEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instances/nw-ha-vm-1
        ipAddress: 10.1.0.89
        port: 80
      kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group
    status:
      healthStatus:
      - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule
        forwardingRuleIp: 10.1.0.90
        healthState: UNHEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/nw-ha-vm-2
        ipAddress: 10.1.0.88
        port: 80
      kind: compute#backendServiceGroupHealth

使用端口 22 测试负载平衡器

如果主机虚拟机上的端口 22 对于 SSH 连接是打开的,则您可以将运行状况检查程序临时修改为使用端口 22,该端口上具有可以响应运行状况检查程序的侦听器。

若要临时使用端口 22,请按以下步骤操作:

  1. 点击控制台中的运行状况检查:

    转到“运行状况检查”页面

  2. 点击修改

  3. 端口字段中,将端口号更改为 22。

  4. 点击保存,然后等待一两分钟。

  5. 在 Cloud Shell 中,等待几秒钟,让运行状况检查检测到监听器,然后检查后端实例组的运行状况:

    ~ gcloud compute backend-services get-health backend-service-name \
      --region cluster-region

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

    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group
    status:
      healthStatus:
      - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule
        forwardingRuleIp: 10.1.0.85
        healthState: HEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instances/nw-ha-vm-1
        ipAddress: 10.1.0.79
        port: 80
      kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group
    status:
      healthStatus:
      - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule
        forwardingRuleIp: 10.1.0.85
        healthState: HEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/nw-ha-vm-2
        ipAddress: 10.1.0.78
        port: 80
      kind: compute#backendServiceGroupHealth
  6. 完成后,将运行状况检查端口号更改回原始端口号。

设置 Pacemaker

以下过程将在 SAP NetWeaver 的 Compute Engine 虚拟机上配置 Pacemaker 集群的 SUSE 实现。

如需详细了解如何在 SLES 上配置高可用性集群,请参阅适用于您 SLES 版本的 SUSE Linux Enterprise 高可用性扩展程序文档。

安装所需的集群软件包

  1. 在主要主机和辅助主机上,以根用户身份下载以下必需的集群软件包:

    • ha_sles 模型:

      # zypper install -t pattern ha_sles
    • sap-suse-cluster-connector 软件包:

      # zypper install -y sap-suse-cluster-connector
    • socat 实用程序(如果尚未安装):

      # zypper install -y socat

  2. 确认已加载最新的高可用性代理:

    # zypper se -t patch SUSE-SLE-HA

在主虚拟机上初始化、配置并启动集群

您可以使用 ha-cluster-init SUSE 脚本初始化集群。然后,您需要修改 Corosync 配置文件并将其与辅助节点同步。启动集群后,您可以使用 crm 命令设置其他集群属性和默认值。

初始化集群

要初始化集群,请执行以下操作:

  1. 在主要主机上,以根用户身份使用 SUSE ha-cluster-init 脚本初始化集群。以下命令为该集群命名并创建配置文件 corosync.conf:对其进行配置,并在集群节点之间设置同步。

    # ha-cluster-init --name cluster-name --yes --interface eth0 csync2
    # ha-cluster-init --name cluster-name --yes --interface eth0 corosync

更新 Corosync 配置文件

  1. 打开 corosync.conf 文件进行修改:

    # vi /etc/corosync/corosync.conf
  2. corosync.conf 文件的 totem 部分中,将以下摘录的示例中的参数设置为显示的值。某些参数可能已经设置为正确的值:

    totem {
            ...
            token: 20000
            token_retransmits_before_loss_const: 10
            join: 60
            consensus: 24000
            max_messages: 20
            ...
    }
  3. 启动集群:

    # ha-cluster-init --name cluster-name cluster

设置其他集群属性

  1. 设置常规集群属性:

    # crm configure property no-quorum-policy="stop"
    # crm configure property startup-fencing="true"
    # crm configure property stonith-timeout="300s"
    # crm configure property stonith-enabled="true"
    # crm configure rsc_defaults resource-stickiness="1"
    # crm configure rsc_defaults migration-threshold="3"
    # crm configure op_defaults timeout="600"

    定义各个集群资源时,您为 resource-stickinessmigration-threshold 设置的值会替换您在此处设置的默认值。

    如需查看资源默认值以及任何已定义资源的值,请输入 crm config show

  2. 在主要主机上启动 Pacemaker:

    # systemctl enable pacemaker
    # systemctl start pacemaker

将辅助虚拟机加入集群

在主虚拟机上打开的终端中,通过 SSH 在辅助虚拟机上加入和启动集群。

  1. 在主虚拟机中,通过 SSH 在辅助虚拟机上运行以下 ha-cluster-join 脚本选项。如果您已按照这些说明配置高可用性集群,则可以忽略有关监控定时器设备的警告。

    1. 运行 --interface eth0 csync2 选项:

      # ssh secondary-vm-name 'ha-cluster-join --cluster-node primary-vm-name --yes --interface eth0 csync2'
    2. 运行 ssh_merge 选项:

      # ssh secondary-vm-name 'ha-cluster-join --cluster-node primary-vm-name --yes ssh_merge'
    3. 运行 cluster 选项:

      # ssh secondary-vm-name 'ha-cluster-join --cluster-node primary-vm-name --yes cluster'
  2. 在辅助主机上启动 Pacemaker:

    1. 启用 Pacemaker:

      # ssh secondary-vm-name systemctl enable pacemaker
    2. 启动 Pacemaker:

      # ssh secondary-vm-name systemctl start pacemaker
  3. 在任一主机上,以根用户身份确认该集群同时显示了两个节点:

    # crm_mon -s

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

    CLUSTER OK: 2 nodes online, 0 resource instances configured

为基础架构配置集群资源

您可以定义 Pacemaker 在高可用性集群中管理的资源。您需要为以下集群组件定义资源:

  • 防护设备,用于防止脑裂情况
  • 共享文件系统中的 SCS 和 ERS 目录
  • 运行状况检查
  • VIP
  • SCS 和 ERS 组件

您为 SCS 和 ERS 组件定义资源的时间将晚于其余资源,因为您需要先安装 SAP NetWeaver。

启用维护模式

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

    # crm configure property maintenance-mode="true"
  2. 确认维护模式:

    # crm status

    输出应表明资源管理已停用,如以下示例所示:

    Cluster Summary:
    * Stack: corosync
    * Current DC: nw-ha-vm-1 (version 2.0.4+20200616.2deceaa3a-3.3.1-2.0.4+20200616.2deceaa3a) - partition with quorum
    * Last updated: Fri May 14 15:26:08 2021
    * Last change:  Thu May 13 19:02:33 2021 by root via cibadmin on nw-ha-vm-1
    * 2 nodes configured
    * 0 resource instances configured
    
                *** Resource management is DISABLED ***
    The cluster will not attempt to start, stop or recover services
    
    Node List:
    * Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
    Full List of Resources:
    * No resources

设置防护功能

您可以通过使用每个主机虚拟机的 fence_gce 代理定义集群资源来设置防护功能。

为了确保执行防护操作后的事件序列正确无误,您还可以配置操作系统,以在防护虚拟机后延迟 Corosync 的重启。此外,您还需要调整 Pacemaker 的重启超时,以将该延迟考虑在内。

创建防护设备资源

对于集群中的每个虚拟机,您需要为能够重启该虚拟机的防护设备创建一个集群资源。虚拟机的防护设备必须在其他虚拟机上运行,因此您需将集群资源的位置配置为在除其重启的虚拟机之外的任何其他虚拟机上运行。

  1. 在主要主机上,以根用户身份为主虚拟机的防护设备创建一个集群资源:

    # crm configure primitive fencing-rsc-name-primary-vm stonith:fence_gce \
      op monitor interval="300s" timeout="120s" on-fail="restart" \
      op start interval="0" timeout="60s" on-fail="restart" \
      params port="primary-vm-name" zone="primary-vm-zone" \
      project="cluster-project-id"
  2. 为主虚拟机配置防护设备的位置,使其仅在辅助虚拟机上处于活跃状态:

    # crm configure location fencing-location-name-primary-vm \
      fencing-rsc-name-primary-vm -inf: "primary-vm-name"
  3. 在主要主机上,以根用户身份为辅助虚拟机的防护设备创建一个集群资源:

    # crm configure primitive fencing-rsc-name-secondary-vm stonith:fence_gce \
      op monitor interval="300s" timeout="120s" on-fail="restart" \
      op start interval="0" timeout="60s" on-fail="restart" \
      params port="secondary-vm-name" zone="secondary-vm-zone" \
      project="cluster-project-id"
  4. 为辅助虚拟机配置防护设备的位置,使其仅在主虚拟机上处于活跃状态:

    # crm configure location fencing-location-name-secondary-vm \
      fencing-rsc-name-secondary-vm -inf: "secondary-vm-name"

设置 Corosync 重启延迟

  1. 在两个主机上,以根用户身份创建一个 systemd 普适性文件,该文件用于延迟 Corosync 的启动,以确保在重启经过防护的虚拟机后具有正确的事件序列:

    systemctl edit corosync.service
  2. 将以下代码行添加到文件中:

    [Service]
    ExecStartPre=/bin/sleep 60
  3. 保存文件并退出编辑器。

  4. 重新加载 systemd 管理器配置。

    systemctl daemon-reload
  5. 确认已创建普适性文件:

    service corosync status

    您应能看到普适性文件所对应的行,如以下示例所示:

    ● corosync.service - Corosync Cluster Engine
       Loaded: loaded (/usr/lib/systemd/system/corosync.service; disabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/corosync.service.d
               └─override.conf
       Active: active (running) since Tue 2021-07-20 23:45:52 UTC; 2 days ago

增大 Pacemaker 的重启超时值

  1. 在每个主机上,以根用户身份增大 Pacemaker 的重启超时值,以将启动延迟考虑在内。

    crm_resource --resource STONITH-host-name --set-parameter=pcmk_reboot_timeout --parameter-value=300

    pcmk_reboot_timeout 值应大于以下各项之和:

    • Corosync token 超时
    • Corosync consensus 超时
    • 重启操作完成所需的时长,包括任何延迟特性。

    在 Google Cloud 上,对于大多数集群来说,300 秒就足够了。

  2. 确认新的 pcmk_reboot_timeout 值:

    crm_resource --resource STONITH-host-name --get-parameter=pcmk_reboot_timeout

创建文件系统资源

您已经创建共享文件系统目录,因此可以开始定义集群资源。

  1. 为实例专用目录配置文件系统资源。

    # crm configure primitive scs-file-system-rsc-name Filesystem \
    device="nfs-path/usrsapSIDASCSscs-instance-number" \
    directory="/usr/sap/SID/ASCSscs-instance-number" fstype="nfs" \
    op start timeout=60s interval=0 \
    op stop timeout=60s interval=0 \
    op monitor interval=20s timeout=40s
    # crm configure primitive ers-file-system-rsc-name Filesystem \
    device="nfs-path/usrsapSIDERSers-instance-number" \
    directory="/usr/sap/SID/ERSers-instance-number" fstype="nfs" \
    op start timeout=60s interval=0 \
    op stop timeout=60s interval=0 \
    op monitor interval=20s timeout=40s

创建运行状况检查资源

  1. 为 SCS 和 ERS 运行状况检查配置集群资源:
# crm configure primitive scs-health-check-rsc-name anything \
  params binfile="/usr/bin/socat" \
  cmdline_options="-U TCP-LISTEN:scs-healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null" \
  op monitor timeout=20s interval=10 \
  op_params depth=0
# crm configure primitive ers-health-check-rsc-name anything \
  params binfile="/usr/bin/socat" \
  cmdline_options="-U TCP-LISTEN:ers-healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null" \
  op monitor timeout=20s interval=10 \
  op_params depth=0

创建 VIP 资源

定义 VIP 地址的集群资源。

  1. 如果您需要查询数字 VIP 地址,可以使用:

    • gcloud compute addresses describe scs-vip-name
      --region=cluster-region --format="value(address)"
    • gcloud compute addresses describe ers-vip-name
      --region=cluster-region --format="value(address)"
  2. 为 SCS 和 ERS VIP 创建集群资源。

    # crm configure primitive scs-vip-rsc-name IPaddr2 \
     params ip=scs-vip-address cidr_netmask=32 nic="eth0" \
     op monitor interval=10s timeout=20s
    # crm configure primitive ers-vip-rsc-name IPaddr2 \
     params ip=ers-vip-address cidr_netmask=32 nic="eth0" \
     op monitor interval=10s timeout=20s

查看已定义的资源

  1. 如需查看到目前为止定义的所有资源,请输入以下命令:

    # crm status

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

    Stack: corosync
    Current DC: nw-ha-vm-1 (version 1.1.24+20201209.8f22be2ae-3.12.1-1.1.24+20201209.8f22be2ae) - partition with quorum
    Last updated: Wed May 26 19:10:10 2021
    Last change: Tue May 25 23:48:35 2021 by root via cibadmin on nw-ha-vm-1
    
    2 nodes configured
    8 resource instances configured
    
                  *** Resource management is DISABLED ***
      The cluster will not attempt to start, stop or recover services
    
    Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
    Full list of resources:
    
     fencing-rsc-nw-aha-vm-1        (stonith:fence_gce):    Stopped (unmanaged)
     fencing-rsc-nw-aha-vm-2        (stonith:fence_gce):    Stopped (unmanaged)
     filesystem-rsc-nw-aha-scs      (ocf::heartbeat:Filesystem):    Stopped (unmanaged)
     filesystem-rsc-nw-aha-ers      (ocf::heartbeat:Filesystem):    Stopped (unmanaged)
     health-check-rsc-nw-ha-scs     (ocf::heartbeat:anything):      Stopped (unmanaged)
     health-check-rsc-nw-ha-ers     (ocf::heartbeat:anything):      Stopped (unmanaged)
     vip-rsc-nw-aha-scs     (ocf::heartbeat:IPaddr2):       Stopped (unmanaged)
     vip-rsc-nw-aha-ers     (ocf::heartbeat:IPaddr2):       Stopped (unmanaged)

安装 SCS 和 ERS

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

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

准备安装

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

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

    # crm configure property maintenance-mode="false"
  2. 在两个服务器上,以根用户身份输入以下命令,指定适合您的环境的用户 ID 和组 ID:

    # groupadd -g gid-sapinst sapinst
    # groupadd -g gid-sapsys sapsys
    # useradd -u uid-sidadm sid-loweradm -g sapsys
    # usermod -a -G sapinst sid-loweradm
    # useradd -u uid-sapadm sapadm -g sapinst
    
    # chown sid-loweradm:sapsys /usr/sap/SID/SYS
    # chown sid-loweradm:sapsys /sapmnt/SID -R
    # chown sid-loweradm:sapsys /usr/sap/trans -R
    # chown sid-loweradm:sapsys /usr/sap/SID/SYS -R
    # chown sid-loweradm:sapsys /usr/sap/SID -R

安装 SCS 组件

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

    # crm_standby -v on -N ${HOSTNAME};

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

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

    # crm status

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

    Stack: corosync
    Current DC: nw-ha-vm-1 (version 1.1.24+20201209.8f22be2ae-3.12.1-1.1.24+20201209.8f22be2ae) - partition with quorum
    Last updated: Thu May 27 17:45:16 2021
    Last change: Thu May 27 17:45:09 2021 by root via crm_attribute on nw-ha-vm-2
    
    2 nodes configured
    8 resource instances configured
    
    Node nw-ha-vm-2: standby
    Online: [ nw-ha-vm-1 ]
    
    Full list of resources:
    
     fencing-rsc-nw-aha-vm-1        (stonith:fence_gce):    Stopped
     fencing-rsc-nw-aha-vm-2        (stonith:fence_gce):    Started nw-ha-vm-1
     filesystem-rsc-nw-aha-scs      (ocf::heartbeat:Filesystem):    Started nw-ha-vm-1
     filesystem-rsc-nw-aha-ers      (ocf::heartbeat:Filesystem):    Started nw-ha-vm-1
     health-check-rsc-nw-ha-scs     (ocf::heartbeat:anything):      Started nw-ha-vm-1
     health-check-rsc-nw-ha-ers     (ocf::heartbeat:anything):      Started nw-ha-vm-1
     vip-rsc-nw-aha-scs     (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-1
     vip-rsc-nw-aha-ers     (ocf::heartbeat:IPaddr2):       Started nw-ha-vm-1
  3. 在主服务器上,以根用户的身份将目录更改为临时安装目录(例如 /tmp),以运行 SAP Software Provisioning Manager (SWPM) 来安装 SCS 实例。

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

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

      例如:

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

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

    # crm_standby -v off -N ${HOSTNAME}; # On SECONDARY

安装 ERS 组件

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

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

    # crm_standby -v on -N ${HOSTNAME};

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

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

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

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

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

      例如:

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

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

    # crm_standby -v off -N ${HOSTNAME};

配置 SAP 服务

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

确认 SAP 服务条目

  1. 在两个服务器上,确认 /usr/sap/sapservices 包含 SCS 和 ERS 服务的条目。您可以使用 sapstartsrv command 以及 pf=profile-of-the-sap-instance-reg 选项来添加任何缺失的条目。例如:

    # 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 \
     -reg
    /usr/sap/hostctrl/exe/sapstartsrv \
     pf=/usr/sap/SID/SYS/profile/SID_ASCSscs-instance-number_scs-virtual-host-name \
     -reg

停止 SAP 服务

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

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

    # su - sid-loweradm -c "sapcontrol -nr scs-instance-number -function GetSystemInstanceList"
    # su - sid-loweradm -c "sapcontrol -nr ers-instance-number -function GetSystemInstanceList"

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

    18.05.2021 17:39:18
    GetSystemInstanceList
    FAIL: NIECONN_REFUSED (Connection refused), NiRawConnect failed in plugin_fopen()

修改 SCS 和 ERS 配置文件

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

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

    SID_ASCSscs-instance-number_scs-virtual-host-name
    SID_ERSers-instance-number_ers-virtual-host-name
  3. 将以下行添加到 ASCS 和 ERS 实例配置文件中,以启用软件包 sap-suse-cluster-connector

    #-----------------------------------------------------------------------
    # SUSE HA library
    #-----------------------------------------------------------------------
    service/halib = $(DIR_CT_RUN)/saphascriptco.so
    service/halib_cluster_connector = /usr/bin/sap_suse_cluster_connector
  4. 如果您使用的是 ENSA1,请通过在 ASCS 配置文件中进行以下设置来启用 keepalive 函数:

    enque/encni/set_so_keepalive = true

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

  5. 如有必要,请修改 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) ...

sidadm 用户添加到 haclient 用户组

当您安装 sap-suse-cluster-connector 时,安装会创建一个 haclient 用户组。如需允许 sidadm 用户使用集群,请将集群添加到 haclient 用户组。

  1. 在两个服务器上,将 sidadm 用户添加到 haclient 用户组:

    # usermod -aG haclient sid-loweradm

为 SCS 和 ERS 配置集群资源

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

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

    # crm status

    如果集群处于维护模式,则状态包括以下行:

                  *** Resource management is DISABLED ***
    The cluster will not attempt to start, stop or recover services
  3. 为 SCS 和 ERS 服务创建集群资源:

    ENSA1

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

      # crm configure primitive scs-instance-rsc-name SAPInstance \
        operations \$id=scs-instance-rsc-operations-name \
        op monitor interval=11 timeout=60 on-fail=restart \
        params InstanceName=SID_ASCSscs-instance-number_scs-virtual-host-name \
           START_PROFILE="/path-to-profile/SID_ASCSscs-instance-number_scs-virtual-host-name" \
           AUTOMATIC_RECOVER=false \
        meta resource-stickiness=5000 failure-timeout=60 \
           migration-threshold=1 priority=10
    • 为 ERS 实例创建集群资源。InstanceName 的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。参数 IS_ERS=true 告知 Pacemaker 在 ERS 处于活动状态的节点上将 runsersSID 标志设置为 1

      # crm configure primitive ers-instance-rsc-name SAPInstance \
        operations \$id=ers-instance-rsc-operations-name \
        op monitor interval=11 timeout=60 on-fail=restart \
        params InstanceName=SID_ERSers-instance-number_ers-virtual-host-name  \
           START_PROFILE="/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name" \
           AUTOMATIC_RECOVER=false IS_ERS=true \
        meta priority=1000

    ENSA2

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

      # crm configure primitive scs-instance-rsc-name SAPInstance \
        operations \$id=scs-instance-rsc-operations-name \
        op monitor interval=11 timeout=60 on-fail=restart \
        params InstanceName=SID_ASCSscs-instance-number_scs-virtual-host-name \
           START_PROFILE="/path-to-profile/SID_ASCSscs-instance-number_scs-virtual-host-name" \
           AUTOMATIC_RECOVER=false \
        meta resource-stickiness=5000 failure-timeout=60
    • 为 ERS 实例创建集群资源。InstanceName 的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。

      # crm configure primitive ers-instance-rsc-name SAPInstance \
        operations \$id=ers-instance-rsc-operations-name \
        op monitor interval=11 timeout=60 on-fail=restart \
        params InstanceName=SID_ERSers-instance-number_ers-virtual-host-name  \
           START_PROFILE="/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name" \
           AUTOMATIC_RECOVER=false IS_ERS=true

配置资源组和位置限制条件

  1. 将 SCS 和 ERS 资源分组。您可以通过输入命令 crm resource status,显示之前定义的所有资源的名称:

    # crm configure group scs-rsc-group-name scs-file-system-rsc-name \
      scs-health-check-rsc-name scs-vip-rsc-name \
      scs-instance-rsc-name \
      meta resource-stickiness=3000
    # crm configure group ers-rsc-group-name ers-file-system-rsc-name \
      ers-health-check-rsc-name ers-vip-rsc-name \
      ers-instance-rsc-name
  2. 创建主机托管限制条件:

    ENSA1

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

      # crm configure colocation prevent-scs-ers-coloc -5000: ers-rsc-group-name scs-rsc-group-name
    2. 设置 SCS,当标志 runsersSID 等于 1 时,SCS 故障转移到运行 ERS 的服务器:

      # crm configure location loc-scs-SID-failover-to-ers scs-instance-rsc-name \
      rule 2000: runs_ers_SID eq 1
    3. 将 SCS 配置为在故障转移后 ERS 移至其他服务器之前启动:

      # crm configure order ord-sap-SID-first-start-ascs \
       Optional: scs-instance-rsc-name:start \
       ers-instance-rsc-name:stop symmetrical=false

    ENSA2

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

      # crm configure colocation prevent-scs-ers-coloc -5000: ers-rsc-group-name scs-rsc-group-name
    2. 将 SCS 配置为在故障转移后 ERS 移至其他服务器之前启动:

      # crm configure order ord-sap-SID-first-start-ascs \
       Optional: scs-instance-rsc-name:start \
       ers-instance-rsc-name:stop symmetrical=false
  3. 停用维护模式。

    # crm configure property maintenance-mode="false"
  4. 检查实例组的配置、主机托管限制条件和排序:

    # crm config show

    输出应包含与以下示例类似的行:

    ENSA1

    group ers-aha-rsc-group-name filesystem-rsc-nw-aha-ers health-check-rsc-nw-ha-ers vip-rsc-nw-aha-ers ers-aha-instance-rsc-name
    group scs-aha-rsc-group-name filesystem-rsc-nw-aha-scs health-check-rsc-nw-ha-scs vip-rsc-nw-aha-scs scs-aha-instance-rsc-name \
            meta resource-stickiness=3000
    colocation prevent-aha-scs-ers-coloc -5000: ers-aha-rsc-group-name scs-aha-rsc-group-name
    location fencing-rsc-nw-aha-vm-1-loc fencing-rsc-nw-aha-vm-1 -inf: nw-ha-vm-1
    location fencing-rsc-nw-aha-vm-2-loc fencing-rsc-nw-aha-vm-2 -inf: nw-ha-vm-2
    location loc-sap-AHA-failover-to-ers scs-aha-instance-rsc-name \
            rule 2000: runs_ers_AHA eq 1

    ENSA2

    group ers-aha-rsc-group-name filesystem-rsc-nw-aha-ers health-check-rsc-nw-ha-ers vip-rsc-nw-aha-ers ers-aha-instance-rsc-name
    group scs-aha-rsc-group-name filesystem-rsc-nw-aha-scs health-check-rsc-nw-ha-scs vip-rsc-nw-aha-scs scs-aha-instance-rsc-name \
            meta resource-stickiness=3000
    location fencing-location-nw-aha-vm-1 fencing-rsc-nw-aha-vm-1 -inf: nw-ha-vm-1
    location fencing-location-nw-aha-vm-2 fencing-rsc-nw-aha-vm-2 -inf: nw-ha-vm-2
    order ord-sap-AHA-first-start-ascs Optional: scs-aha-instance-rsc-name:start ers-aha-instance-rsc-name:stop symmetrical=false
    colocation prevent-aha-scs-ers-coloc -5000: ers-aha-rsc-group-name scs-aha-rsc-group-name

测试集群

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

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

从 SAP 检查集群配置

  1. 在任一服务器上,以根用户身份查看哪些实例在该服务器上处于活动状态:

    # crm status
  2. 切换到 sidadm 用户

    # su - sid-loweradm
  3. 检查集群配置。对于实例编号,请指定您输入命令的服务器上的活动 SCS 或 ERS 实例的实例编号:

    > sapcontrol -nr instance-number -function HAGetFailoverConfig

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

    20.05.2021 01:33:25
    HAGetFailoverConfig
    OK
    HAActive: TRUE
    HAProductVersion: SUSE Linux Enterprise Server for SAP Applications 15 SP2
    HASAPInterfaceVersion: SUSE Linux Enterprise Server for SAP Applications 15 SP2 (sap_suse_cluster_connector 3.1.2)
    HADocumentation: https://www.suse.com/products/sles-for-sap/resource-library/sap-best-practices/
    HAActiveNode: nw-ha-vm-1
    HANodes: nw-ha-vm-1, nw-ha-vm-2
  4. sidadm 身份,检查配置中的错误:

    > sapcontrol -nr instance-number -function HACheckConfig

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

    20.05.2021 01:37:19
    HACheckConfig
    OK
    state, category, description, comment
    SUCCESS, SAP CONFIGURATION, Redundant ABAP instance configuration, 0 ABAP instances detected
    SUCCESS, SAP CONFIGURATION, Redundant Java instance configuration, 0 Java 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 (vh-scs-aha_AHA_00), SAPInstance includes is-ers patch
    SUCCESS, SAP CONFIGURATION, Enqueue replication (vh-scs-aha_AHA_00), Enqueue replication enabled
    SUCCESS, SAP STATE, Enqueue replication state (vh-scs-aha_AHA_00), Enqueue replication active
  5. 在任一服务器上,以根用户身份查看您的资源在哪些节点上运行:

    # crm status

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

    # Cluster Summary:
      * Stack: corosync
      * Current DC: nw-ha-vm-2 (version 2.0.4+20200616.2deceaa3a-3.3.1-2.0.4+20200616.2deceaa3a) - partition with quorum
      * Last updated: Thu May 20 16:58:46 2021
      * Last change:  Thu May 20 16:57:31 2021 by ahaadm via crm_resource on nw-ha-vm-2
      * 2 nodes configured
      * 10 resource instances configured
    
    Node List:
      * Online: [ nw-ha-vm-1 nw-ha-vm-2 ]
    
    Active Resources:
      * fencing-rsc-nw-aha-vm-1     (stonith:fence_gce):     Started nw-ha-vm-2
      * fencing-rsc-nw-aha-vm-2     (stonith:fence_gce):     Started nw-ha-vm-1
      * Resource Group: scs-aha-rsc-group-name:
        * filesystem-rsc-nw-aha-scs (ocf::heartbeat:Filesystem):     Started nw-ha-vm-1
        * health-check-rsc-nw-ha-scs        (ocf::heartbeat:anything):       Started nw-ha-vm-1
        * vip-rsc-nw-aha-scs        (ocf::heartbeat:IPaddr2):        Started nw-ha-vm-1
        * scs-aha-instance-rsc-name (ocf::heartbeat:SAPInstance):    Started nw-ha-vm-1
      * Resource Group: ers-aha-rsc-group-name:
        * filesystem-rsc-nw-aha-ers (ocf::heartbeat:Filesystem):     Started nw-ha-vm-2
        * health-check-rsc-nw-ha-ers        (ocf::heartbeat:anything):       Started nw-ha-vm-2
        * vip-rsc-nw-aha-ers        (ocf::heartbeat:IPaddr2):        Started nw-ha-vm-2
        * ers-aha-instance-rsc-name (ocf::heartbeat:SAPInstance):    Started nw-ha-vm-2
  6. 在 SCS 处于活动状态的服务器上,以 sidadm 身份模拟故障转移:

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

确认锁定条目被保留

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

ENSA1

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

    > enqt pf=/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name 11 number-of-locks
  2. 在 SCS 处于活动状态的服务器上,以 sidadm 身份验证锁定条目已注册:

    > sapcontrol -nr scs-instance-number -function EnqGetStatistic | grep locks_now

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

    locks_now: 10
  3. 在 ERS 处于活动状态的服务器上,以 sidadm 身份启动 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. 重新启动 SCS 处于活动状态的服务器。

    在监控服务器上,当 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. sidadm 身份,在确认锁定被保留后,释放锁定:

    > enqt pf=/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name 12 number-of-locks
  8. 在 SCS 处于活动状态的服务器上,以 sidadm 身份验证锁定条目已移除:

    > sapcontrol -nr scs-instance-number -function EnqGetStatistic | grep locks_now

ENSA2

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

    > enq_admin --set_locks=number-of-locks:X:DIAG::TAB:%u pf=/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name
  2. 在 SCS 处于活动状态的服务器上,以 sidadm 身份验证锁定条目已注册:

    > sapcontrol -nr scs-instance-number -function EnqGetStatistic | grep locks_now

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

    locks_now: 10
  3. 重新启动 SCS 处于活动状态的服务器。

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

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

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

    > enq_admin --release_locks=number-of-locks:X:DIAG::TAB:%u pf=/path-to-profile/SID_ERSers-instance-number_ers-virtual-host-name
  7. 在 SCS 处于活动状态的服务器上,以 sidadm 身份验证锁定条目已移除:

    > sapcontrol -nr scs-instance-number -function EnqGetStatistic | grep locks_now

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

    locks_now: 0

模拟 Compute Engine 维护事件

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

在这些说明中使用的超时和间隔值考虑了实时迁移的时长。如果您使用较短的值,实时迁移触发故障转移的风险就越大。

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

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

    # gcloud compute instances simulate-maintenance-event primary-instance-name
  2. 确认主节点没有发生变化:

    # crm status

问题排查

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

获取 SLES 上的 SAP NetWeaver 的支持

如果您在解决 SLES 上的 SAP NetWeaver 高可用性集群问题时需要帮助,请收集必要的诊断信息并与 Cloud 客户服务联系。如需了解详情,请参阅 SLES 上的高可用性集群诊断信息

支持

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

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

支持要求

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

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

执行部署后任务

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

如需了解详情,请参阅:

后续步骤

如需了解详情,请参阅以下资源:

+ 适用于 Google Cloud 上的 SAP NetWeaver 的高可用性规划指南 + Google Cloud 上的 SAP:高可用性白皮书 + 如需详细了解虚拟机管理和监控,请参阅 SAP NetWeaver 操作指南