RHEL 上的 SAP HANA 的 HA 扩容集群配置指南

本指南介绍如何在 Google Cloud 上为 SAP HANA 1.0 SPS 12 或更高版本的纵向扩容系统部署和配置 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 集群。

本指南包含以下步骤:

本指南还包括配置 SAP HANA 系统复制的步骤;此外,另请参阅 SAP 文档来了解权威说明。

如需部署不包含 Linux 高可用性集群或备用节点主机的 SAP HANA 系统,请参阅 SAP HANA 部署指南

如需在 SUSE Linux Enterprise Server (SLES) 上为 SAP HANA 配置高可用性集群,请参阅针对 SLES 上的 SAP HANA 纵向扩容的高可用性集群配置指南

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

本指南部署的系统

按照本指南,您将部署两个 SAP HANA 实例并将在 RHEL 上设置高可用性集群。您可以在同一区域内不同可用区中的 Compute Engine 虚拟机上部署每个 SAP HANA 实例。本指南不涉及 SAP NetWeaver 高可用性安装。

单节点 SAP HANA 纵向扩容系统的高可用性 Linux 集群概览

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

  • 两个主机虚拟机,每个主机虚拟机都有一个 SAP HANA 实例
  • 同步 SAP HANA 系统复制。
  • Pacemaker 高可用性集群资源管理器。
  • STONITH 防护机制。
  • 自动重启失败的实例,将其用作新的辅助实例。

本指南介绍了如何使用 Google Cloud 提供的 Cloud Deployment Manager 模板来部署 Compute Engine 虚拟机和 SAP HANA 实例,以确保虚拟机和基本 SAP HANA 系统满足 SAP 可支持性要求并遵循当前的最佳做法。

本指南使用 SAP HANA Studio 来测试 SAP HANA 系统复制。如果愿意,您也可以改为使用 SAP HANA Cockpit。如需了解如何安装 SAP HANA Studio,请参阅:

前提条件

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

创建网络

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

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

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

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

控制台

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击创建 VPC 网络
  3. 输入网络的名称

    名称必须遵循命名惯例。VPC 网络使用 Compute Engine 命名惯例。

  4. 对于子网创建模式,选择自定义
  5. 新子网部分,为子网指定以下配置参数:
    1. 输入子网的名称
    2. 对于区域,请选择您要在其中创建子网的 Compute Engine 区域
    3. 对于 IP 栈类型,请选择 IPv4(单栈),然后输入 CIDR 格式的 IP 地址范围,例如 10.1.0.0/24

      这是子网的主要 IPv4 地址范围。如果您计划添加多个子网,请为网络中的每个子网分配互不重叠的 CIDR IP 地址范围。请注意,每个子网及其内部 IP 地址范围都映射到一个区域。

    4. 点击完成
  6. 如需添加更多子网,请点击添加子网,然后重复上述步骤。您可以在创建网络后向网络添加更多子网。
  7. 点击创建

gcloud

  1. 转至 Cloud Shell。

    打开 Cloud Shell

  2. 如需在自定义子网模式下创建新网络,请运行以下命令:
    gcloud compute networks create NETWORK_NAME --subnet-mode custom

    NETWORK_NAME 替换为新网络的名称。名称必须遵循命名惯例。VPC 网络使用 Compute Engine 命名惯例。

    指定 --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 地址的情况下安全地访问互联网。

添加防火墙规则

默认情况下,隐式防火墙规则会阻止从 Virtual Private Cloud (VPC) 网络外部传入的连接。如需允许传入的连接,请为您的虚拟机设置防火墙规则。在与虚拟机建立传入的连接后,防火墙会允许通过此连接的双向流量。

您还可以创建防火墙规则,允许对指定端口进行外部访问,或限制同一网络中各虚拟机之间的访问。如果使用 default VPC 网络类型,则系统还会应用一些其他默认规则(例如 default-allow-internal 规则),以允许在同一网络中所有端口上的各虚拟机之间建立连接。

您可能需要通过创建防火墙规则来隔离或限制与数据库主机的连接,具体取决于适用于您的环境的 IT 政策。

根据您的使用场景,您可以创建防火墙规则来允许下列各项中的访问:

  • 所有 SAP 产品的 TCP/IP 中列出的默认 SAP 端口。
  • 从您的计算机或公司网络环境到 Compute Engine 虚拟机实例的连接。如果您不确定使用哪个 IP 地址,请与您公司的网络管理员联系。
  • SAP HANA 子网中虚拟机之间的通信,包括 SAP HANA 横向扩容系统中节点之间的通信,或采用三层架构的数据库服务器和应用服务器之间的通信。您可以通过创建允许来自子网的流量的防火墙规则,使虚拟机之间能够互相通信。

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

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络防火墙页面。

    进入“防火墙”

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

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

gcloud

使用以下命令创建防火墙规则:

$ gcloud compute firewall-rules create FIREWALL_NAME
--direction=INGRESS --priority=1000 \
--network=NETWORK_NAME --action=ALLOW --rules=PROTOCOL:PORT \
--source-ranges IP_RANGE --target-tags=NETWORK_TAGS

部署虚拟机和 SAP HANA

在开始配置高可用性集群之前,请先定义和部署将充当高可用性集群中的主节点和辅助节点的虚拟机实例和 SAP HANA 系统。

若要定义和部署系统,请使用 SAP HANA 部署指南中用于部署 SAP HANA 系统的 Cloud Deployment Manager 模板。

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

成功部署 SAP HANA 系统后,您可以定义和配置高可用性集群。

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

  1. 确认资源(例如永久性磁盘和 CPU)的当前配额是否满足您要安装的 SAP HANA 系统的要求。如果配额不足,则部署将失败。如需了解 SAP HANA 配额要求,请参阅有关 SAP HANA 的价格和配额考虑因素

    转到“配额”页面

  2. 打开 Cloud Shell;如果已在本地工作站上安装了 gcloud CLI,则打开一个终端。

    转到 Cloud Shell

  3. 在 Cloud Shell 或 gcloud CLI 中输入以下命令,将用于 SAP HANA 高可用性集群的 template.yaml 配置文件模板下载到您的工作目录中:

    wget https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/template.yaml
  4. (可选)重命名 template.yaml 文件以标识其定义的配置。

  5. 在 Cloud Shell 代码编辑器中打开 template.yaml 文件,如果您使用的是 gcloud CLI,则使用您选择的文本编辑器。

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

  6. template.yaml 文件中,完成主要 SAP HANA 系统的定义。通过将括号及其内容替换为安装值来指定属性值。下表介绍了这些属性。

    如需在不安装 SAP HANA 的情况下创建虚拟机实例,请删除或注释掉以 sap_hana_ 开头的所有行。

    属性 数据类型 说明
    type 字符串

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

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

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

    instanceName 字符串 当前正在定义的虚拟机实例的名称。 请在主虚拟机定义和辅助虚拟机定义中指定不同的名称。必须以小写字母、数字或连字符指定名称。
    instanceType 字符串 需要运行 SAP HANA 的 Compute Engine 虚拟机的类型。如果您需要自定义虚拟机类型,请指定一个预定义虚拟机类型,其中 vCPU 的数量最接近但仍大于所需的数量。部署完成后,修改 vCPU 数量和内存量
    zone 字符串 在其中部署您正在定义的虚拟机实例的 Google Cloud 可用区。请在同一区域中为主要和辅助 HANA 定义指定不同的可用区。可用区必须在您为子网选择的区域内。
    subnetwork 字符串 您在上一步中创建的子网的名称。如果您要部署到共享 VPC,请以 [SHAREDVPC_PROJECT]/[SUBNETWORK] 的格式指定此值。例如 myproject/network1
    linuxImage 字符串 您用于 SAP HANA 的 Linux 操作系统映像或映像系列的名称。如需指定映像系列,请将前缀 family/ 添加到系列名称中,例如 family/rhel-7-6-sap-ha。如需指定某一特定映像,请仅指定该映像的名称。 如需查看可用映像和系列的列表,请参阅 Google Cloud 控制台中的映像页面。
    linuxImageProject 字符串 您要使用的映像所属的 Google Cloud 项目。此项目可以是您自己的项目,也可以是某个 Google Cloud 映像项目,例如 rhel-sap-cloud。如需详细了解 Google Cloud 映像项目,请参阅 Compute Engine 文档中的映像页面。
    sap_hana_deployment_bucket 字符串 您在前面步骤上传的 SAP HANA 安装和修订文件所属项目中的 Google Cloud Storage 存储桶的名称。存储桶中的任何升级修订文件都将在部署过程中应用于 SAP HANA。
    sap_hana_sid 字符串 SAP HANA 系统 ID (SID)。 此 ID 必须由 3 个字母数字字符组成,并以字母开头。所有字母必须大写。
    sap_hana_instance_number 整数 SAP HANA 系统的实例编号(0 到 99)。默认值为 0。
    sap_hana_sidadm_password 字符串 操作系统管理员的密码。密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。
    sap_hana_system_password 字符串 数据库超级用户的密码。密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。
    sap_hana_sidadm_uid 整数 SID_LCadm 用户 ID 的默认值为 900,以避免用户创建的组与 SAP HANA 发生冲突。您可以根据需要将其更改为其他值。
    sap_hana_sapsys_gid 整数 sapsys 的默认组 ID 是 79。您可以通过在其上指定一个值来根据需要替换此值。
    sap_hana_scaleout_nodes 整数 指定 0。这些说明仅适用于纵向扩容 SAP HANA 系统。
    networkTag 字符串 表示用于防火墙或路由的虚拟机实例的网络标记。如果您指定 publicIP: No 而不指定网络标记,请务必另外提供一种访问互联网的方法。
    nic_type 字符串 可选,但建议使用(如果适用于目标机器和操作系统版本)。指定要用于虚拟机实例的网络接口。您可以指定值 GVNICVIRTIO_NET。如需使用 Google 虚拟 NIC (gVNIC),您需要指定一个支持 gVNIC 的操作系统映像作为 linuxImage 属性的值。如需查看操作系统映像列表,请参阅操作系统详细信息

    如果您没有为此属性指定值,则系统会根据您为 instanceType 属性指定的机器类型自动选择网络接口。

    此参数在 Deployment Manager 模板版本 202302060649 或更高版本中提供。
    publicIP 布尔值 可选。决定是否为虚拟机实例添加一个公共 IP 地址。默认为 Yes
    serviceAccount 字符串 可选。指定主机虚拟机以及主机虚拟机上运行的程序将使用的服务账号。指定服务账号的电子邮件地址。 例如,svc-acct-name@project-id.iam.gserviceaccount.com。默认情况下,系统会使用 Compute Engine 默认服务账号。如需了解详情,请参阅 Google Cloud 上的 SAP 程序的身份和访问权限管理
  7. 创建辅助 SAP HANA 系统的定义,方法是复制主要 SAP HANA 系统的定义,然后将副本粘贴到主要 SAP HANA 系统定义后面。请参阅以下步骤的示例。

  8. 在辅助 SAP HANA 系统的定义中,为以下属性指定值(这些值不能与在主要 SAP HANA 系统定义中指定的值相同):

    • name
    • instanceName
    • zone

  9. 创建实例:

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

    上面的命令会调用 Deployment Manager。Deployment Manager 将完全根据 template.yaml 文件中的规格部署虚拟机,从存储桶下载 SAP HANA 软件,并安装 SAP HANA。

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

完整 template.yaml 配置文件的示例

以下示例展示了一个已完成的 template.yaml 配置文件,该文件部署了两个安装了 SAP HANA 系统的虚拟机实例。

该文件包含要部署的两个资源(sap_hana_primarysap_hana_secondary)的定义。每个资源定义都包含一个虚拟机和一个 SAP HANA 实例的定义。

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

networkTagserviceAccountsap_hana_sidadm_uidsap_hana_sapsys_gid 属性来自配置文件模板的“高级选项”部分。其中包含的属性 sap_hana_sidadm_uidsap_hana_sapsys_gid 将显示所用的默认值,因为这些属性已被注释掉。

resources:
- name: sap_hana_primary
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/sap_hana.py
  #
  # By default, this configuration file uses the latest release of the deployment
  # scripts for SAP on Google Cloud.  To fix your deployments to a specific release
  # of the scripts, comment out the type property above and uncomment the type property below.
  #
  # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana/sap_hana.py
  #
  properties:
    instanceName: hana-ha-vm-1
    instanceType: n2-highmem-32
    zone: us-central1-a
    subnetwork: example-subnet-us-central1
    linuxImage: family/rhel-8-1-sap-ha
    linuxImageProject: rhel-sap-cloud
    sap_hana_deployment_bucket: hana2-sp4-rev46
    sap_hana_sid: HA1
    sap_hana_instance_number: 22
    sap_hana_sidadm_password: Tempa55word
    sap_hana_system_password: Tempa55word
    sap_hana_scaleout_nodes: 0
    networkTag: cluster-ntwk-tag
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
    # sap_hana_sidadm_uid: 900
    # sap_hana_sapsys_gid: 79

- name: sap_hana_secondary
  type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana/sap_hana.py
  #
  # By default, this configuration file uses the latest release of the deployment
  # scripts for SAP on Google Cloud.  To fix your deployments to a specific release
  # of the scripts, comment out the type property above and uncomment the type property below.
  #
  # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana/sap_hana.py
  #
  properties:
    instanceName: hana-ha-vm-2
    instanceType: n2-highmem-32
    zone: us-central1-c
    subnetwork: example-subnet-us-central1
    linuxImage: family/rhel-8-1-sap-ha
    linuxImageProject: rhel-sap-cloud
    sap_hana_deployment_bucket: hana2-sp4-rev46
    sap_hana_sid: HA1
    sap_hana_instance_number: 22
    sap_hana_sidadm_password: Google123
    sap_hana_system_password: Google123
    sap_hana_scaleout_nodes: 0
    networkTag: cluster-ntwk-tag
    serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
    # sap_hana_sidadm_uid: 900
    # sap_hana_sapsys_gid: 79
    

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

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

  • 您的本地工作站、堡垒主机或跳转服务器(用于配置用途)
  • 高可用性集群中的其他主机虚拟机(用于集群节点之间的访问)

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

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

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

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

验证虚拟机和 SAP HANA 的部署

如需验证部署,请检查 Cloud Logging 中的部署日志,并检查主要主机和辅助主机的虚拟机上的磁盘和服务。

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

    转到 Cloud Logging

  2. 过滤日志:

    日志浏览器

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

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

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

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

    旧式日志查看器

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

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

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

      2. 在 Deployment Manager 的部署页面上,删除部署以清理失败安装中的虚拟机和永久性磁盘。

      3. 重新运行部署。

检查虚拟机和 SAP HANA 的配置

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

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

  2. 切换到根用户。

    $ sudo su -
  3. 在命令提示符处,输入 df -h。在每个虚拟机上,确保您看到 /hana 目录,例如 /hana/data

    Filesystem                        Size  Used Avail Use% Mounted on
    /dev/sda2                          30G  4.0G   26G  14% /
    devtmpfs                          126G     0  126G   0% /dev
    tmpfs                             126G     0  126G   0% /dev/shm
    tmpfs                             126G   17M  126G   1% /run
    tmpfs                             126G     0  126G   0% /sys/fs/cgroup
    /dev/sda1                         200M  9.7M  191M   5% /boot/efi
    /dev/mapper/vg_hana-shared        251G   49G  203G  20% /hana/shared
    /dev/mapper/vg_hana-sap            32G  240M   32G   1% /usr/sap
    /dev/mapper/vg_hana-data          426G  7.0G  419G   2% /hana/data
    /dev/mapper/vg_hana-log           125G  4.2G  121G   4% /hana/log
    /dev/mapper/vg_hanabackup-backup  512G   33M  512G   1% /hanabackup
    tmpfs                              26G     0   26G   0% /run/user/900
    tmpfs                              26G     0   26G   0% /run/user/899
    tmpfs                              26G     0   26G   0% /run/user/1000
  4. 在以下命令中,将 SID_LC 替换为您在配置文件模板中指定的系统 ID,以切换到 SAP 管理员用户。对于任何字母,请使用小写字母。

    # su - SID_LCadm
  5. 输入以下命令,确保 SAP HANA 服务(例如 hdbnameserverhdbindexserver 及其他服务)正在实例上运行:

    > HDB info
  6. 如果您使用的是 RHEL for SAP 9.0 或更高版本,请确保将虚拟机实例 chkconfigcompat-openssl11 安装在虚拟机实例上。

    如需查看 SAP 提供的详细信息,请参阅 SAP 说明 3108316 - Red Hat Enterprise Linux 9.x:安装和配置

验证 Google Cloud 的 Agent for SAP 的安装情况

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

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

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

  1. 与 Compute Engine 实例建立 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

为 SAP HANA 设置监控

(可选)您可以使用 Google Cloud 的 Agent for SAP 来监控 SAP HANA 实例。从 2.0 版开始,您可以将代理配置为收集 SAP HANA 监控指标并将其发送到 Cloud Monitoring。借助 Cloud Monitoring,您可以创建信息中心以直观呈现这些指标,并根据指标阈值设置提醒等。

如需详细了解如何使用 Google Cloud 的 Agent for SAP 收集 SAP HANA 监控指标,请参阅 SAP HANA 监控指标收集

启用 SAP HANA 快速重启

Google Cloud 强烈建议为 SAP HANA 的每个实例(尤其是较大的实例)启用 SAP HANA 快速重启。当 SAP HANA 终止但操作系统保持运行时,SAP HANA 快速重启可以减少重启时间。

Google Cloud 提供的自动化脚本会代您将操作系统和内核设置配置为支持 SAP HANA 快速重启。您只需定义 tmpfs 文件系统并配置 SAP HANA。

如需定义 tmpfs 文件系统并配置 SAP HANA,您可以按照手动步骤进行操作,也可以使用 Google Cloud 提供的自动化脚本来启用 SAP HANA 快速重启。如需了解详情,请参阅:

如需了解 SAP HANA 快速重启的完整权威说明,请参阅 SAP HANA 快速重启选项文档

手动步骤

配置 tmpfs 文件系统

成功部署主机虚拟机和基本 SAP HANA 系统后,您需要在 tmpfs 文件系统中创建和装载 NUMA 节点的目录。

显示虚拟机的 NUMA 拓扑

在映射所需的 tmpfs 文件系统之前,您需要知道虚拟机有多少 NUMA 节点。如需显示 Compute Engine 虚拟机上的可用 NUMA 节点,请输入以下命令:

lscpu | grep NUMA

例如,m2-ultramem-208 虚拟机类型有四个 NUMA 节点(编号为 0-3),如以下示例所示:

NUMA node(s):        4
NUMA node0 CPU(s):   0-25,104-129
NUMA node1 CPU(s):   26-51,130-155
NUMA node2 CPU(s):   52-77,156-181
NUMA node3 CPU(s):   78-103,182-207
创建 NUMA 节点目录

为虚拟机中的每个 NUMA 节点创建一个目录,并设置权限。

例如,对于编号为 0-3 的四个 NUMA 节点:

mkdir -pv /hana/tmpfs{0..3}/SID
chown -R SID_LCadm:sapsys /hana/tmpfs*/SID
chmod 777 -R /hana/tmpfs*/SID
将 NUMA 节点目录装载到 tmpfs

装载 tmpfs 文件系统目录,并使用 mpol=prefer 为每个目录指定 NUMA 节点首选设置:

SID 使用大写字母指定 SID。

mount tmpfsSID0 -t tmpfs -o mpol=prefer:0 /hana/tmpfs0/SID
mount tmpfsSID1 -t tmpfs -o mpol=prefer:1 /hana/tmpfs1/SID
mount tmpfsSID2 -t tmpfs -o mpol=prefer:2 /hana/tmpfs2/SID
mount tmpfsSID3 -t tmpfs -o mpol=prefer:3 /hana/tmpfs3/SID
更新/etc/fstab

为了确保装载点在操作系统重新启动后可用,请将条目添加到文件系统表 /etc/fstab 中:

tmpfsSID0 /hana/tmpfs0/SID tmpfs rw,relatime,mpol=prefer:0
tmpfsSID1 /hana/tmpfs1/SID tmpfs rw,relatime,mpol=prefer:1
tmpfsSID1 /hana/tmpfs2/SID tmpfs rw,relatime,mpol=prefer:2
tmpfsSID1 /hana/tmpfs3/SID tmpfs rw,relatime,mpol=prefer:3

可选:设置内存用量限制

tmpfs 文件系统可以动态扩缩。

如需限制 tmpfs 文件系统使用的内存,您可以使用 size 选项设置 NUMA 节点卷的大小限制。例如:

mount tmpfsSID0 -t tmpfs -o mpol=prefer:0,size=250G /hana/tmpfs0/SID

您还可以通过设置 global.ini 文件的 [memorymanager] 部分中的 persistent_memory_global_allocation_limit 参数,限制给定 SAP HANA 实例和给定服务器节点的所有 NUMA 节点的总 tmpfs 内存用量。

快速重启的 SAP HANA 配置

要配置 SAP HANA 以使用快速重启,请更新 global.ini 文件并指定要存储在永久性内存中的表。

更新 global.ini 文件中的 [persistence] 部分

配置 SAP HANA global.ini 文件中的 [persistence] 部分以引用 tmpfs 位置。用英文分号分隔每个 tmpfs 位置:

[persistence]
basepath_datavolumes = /hana/data
basepath_logvolumes = /hana/log
basepath_persistent_memory_volumes = /hana/tmpfs0/SID;/hana/tmpfs1/SID;/hana/tmpfs2/SID;/hana/tmpfs3/SID

上述示例为 4 个 NUMA 节点指定了 4 个内存卷,对应于 m2-ultramem-208。如果您是在 m2-ultramem-416 上运行,则需要配置 8 个内存卷 (0..7)。

修改 global.ini 文件后,重启 SAP HANA。

SAP HANA 现在可以将 tmpfs 位置用作永久性内存空间。

指定要存储在永久性内存中的表

指定要存储在永久性内存中的特定列表或分区。

例如,如需为现有表启用永久性内存,请执行 SQL 查询:

ALTER TABLE exampletable persistent memory ON immediate CASCADE

如需更改新表的默认设置,请在 indexserver.ini 文件中添加参数 table_default。例如:

[persistent_memory]
table_default = ON

如需详细了解如何控制列、表以及哪些监控视图提供详细信息,请参阅 SAP HANA 永久性内存

自动步骤

Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本会更改目录 /hana/tmpfs*、文件 /etc/fstab 和 SAP HANA 配置。运行脚本时,您可能需要执行其他步骤,具体取决于这是 SAP HANA 系统的初始部署,还是需要将机器大小调整为其他 NUMA 大小。

对于 SAP HANA 系统的初始部署或调整机器大小以增加 NUMA 节点的数量,请确保在执行 Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本期间正在运行 SAP HANA。

当您调整机器大小以减少 NUMA 节点的数量时,请确保在执行 Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本期间已停止 SAP HANA。执行脚本后,您需要手动更新 SAP HANA 配置以完成 SAP HANA 快速重启设置。如需了解详情,请参阅用于快速重启的 SAP HANA 配置

如需启用 SAP HANA 快速重启,请按照以下步骤操作:

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

  2. 切换到根用户:

    sudo su -

  3. 下载 sap_lib_hdbfr.sh 脚本:

    wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/lib/sap_lib_hdbfr.sh
  4. 让该文件可执行:

    chmod +x sap_lib_hdbfr.sh
  5. 验证脚本没有错误:

    vi sap_lib_hdbfr.sh
    ./sap_lib_hdbfr.sh -help

    如果该命令返回错误,请与 Cloud Customer Care 团队联系。如需详细了解如何与 Customer Care 团队联系,请参阅获取 Google Cloud 上的 SAP 支持

  6. 在替换 SAP HANA 数据库的 SYSTEM 用户的 SAP HANA 系统 ID (SID) 和密码后运行脚本。要安全地提供密码,我们建议您在 Secret Manager 中使用 Secret。

    使用 Secret Manager 中的 Secret 名称运行脚本。此 Secret 必须存在于包含主机虚拟机实例的 Google Cloud 项目中。

    sudo ./sap_lib_hdbfr.sh -h 'SID' -s SECRET_NAME 

    替换以下内容:

    • SID:使用大写字母指定 SID。例如 AHA
    • SECRET_NAME:指定与 SAP HANA 数据库的 SYSTEM 用户密码相对应的 Secret 名称。此 Secret 必须存在于包含主机虚拟机实例的 Google Cloud 项目中。

    或者,您可以使用纯文本密码运行脚本。启用 SAP HANA 快速重启后,请务必更改密码。不建议使用纯文本密码,因为密码将记录在虚拟机的命令行历史记录中。

    sudo ./sap_lib_hdbfr.sh -h 'SID' -p 'PASSWORD'

    替换以下内容:

    • SID:使用大写字母指定 SID。例如 AHA
    • PASSWORD:指定 SAP HANA 数据库的 SYSTEM 用户的密码。

如果系统成功运行了初始运行,您应该会看到如下所示的输出:

INFO - Script is running in standalone mode
ls: cannot access '/hana/tmpfs*': No such file or directory
INFO - Setting up HANA Fast Restart for system 'TST/00'.
INFO - Number of NUMA nodes is 2
INFO - Number of directories /hana/tmpfs* is 0
INFO - HANA version 2.57
INFO - No directories /hana/tmpfs* exist. Assuming initial setup.
INFO - Creating 2 directories /hana/tmpfs* and mounting them
INFO - Adding /hana/tmpfs* entries to /etc/fstab. Copy is in /etc/fstab.20220625_030839
INFO - Updating the HANA configuration.
INFO - Running command: select * from dummy
DUMMY
"X"
1 row selected (overall time 4124 usec; server time 130 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') SET ('persistence', 'basepath_persistent_memory_volumes') = '/hana/tmpfs0/TST;/hana/tmpfs1/TST;'
0 rows affected (overall time 3570 usec; server time 2239 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM') SET ('persistent_memory', 'table_unload_action') = 'retain';
0 rows affected (overall time 4308 usec; server time 2441 usec)

INFO - Running command: ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'SYSTEM') SET ('persistent_memory', 'table_default') = 'ON';
0 rows affected (overall time 3422 usec; server time 2152 usec)

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

需要在高可用性集群中的各主机之间同步 SAP HANA 安全存储 (SSFS) 密钥。为了简化同步并允许在高可用性集群中的各主机之间复制文件(如备份),这些说明将授权两个主机之间的直接 SSH 连接。

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

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

如需在主实例和辅助实例之间启用 SSH 连接,请按照以下步骤操作。

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

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

    2. 为需要主机到主机 SSH 连接的用户生成 SSH 密钥。该用户通常是您。

      $ ssh-keygen
    3. 在系统提示时,按 Enter 键接受默认值。

    4. 使用辅助虚拟机的 SSH 密钥相关信息更新主虚拟机的元数据。

      $ gcloud compute instances add-metadata secondary-host-name \
           --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \
           --zone secondary-zone
    5. 将主虚拟机授权给其自身

      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  2. 在辅助主机虚拟机上:

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

    2. 为需要主机到主机 SSH 连接的用户生成 SSH 密钥。

      $ ssh-keygen
    3. 使用主虚拟机的 SSH 密钥相关信息更新辅助虚拟机的元数据。

      $ gcloud compute instances add-metadata primary-host-name \
            --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \
            --zone primary-zone
    4. 将辅助虚拟机授权给其自身

      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    5. 通过打开辅助系统到主系统之间的 SSH 连接,确认 SSH 密钥是否已正确设置。

      $ ssh primary-host-name
  3. 在主要主机虚拟机上,通过打开与辅助主机虚拟机的 SSH 连接来确认连接:

    $ ssh secondary-host-name

备份数据库

为数据库创建备份,以启动 SAP HANA 系统复制的数据库日志记录并创建恢复点。

如果您在 MDC 配置中有多个租户数据库,请备份每个租户数据库。

Deployment Manager 模板使用 /hanabackup/data/SID 作为默认备份目录。

如需创建新 SAP HANA 数据库的备份,请执行以下操作:

  1. 在主要主机上,切换到 SID_LCadm。该命令可能会有所不同,具体取决于您的操作系统映像。

    sudo -i -u SID_LCadm
  2. 创建数据库备份:

    • 对于 SAP HANA 单数据库容器系统:

      > hdbsql -t -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"

      以下示例显示了来自新 SAP HANA 系统的成功响应:

      0 rows affected (overall time 18.416058 sec; server time 18.414209 sec)
    • 对于 SAP HANA 多数据库容器系统 (MDC),请创建系统数据库以及所有租户数据库的备份:

      > hdbsql -t -d SYSTEMDB -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"
      > hdbsql -t -d SID -u system -p SYSTEM_PASSWORD -i INST_NUM \
        "backup data using file ('full')"

    以下示例显示了来自新 SAP HANA 系统的成功响应:

    0 rows affected (overall time 16.590498 sec; server time 16.588806 sec)
  3. 确认日志记录模式设置为正常:

    > hdbsql -u system -p SYSTEM_PASSWORD -i INST_NUM \
      "select value from "SYS"."M_INIFILE_CONTENTS" where key='log_mode'"

    您应该会看到:

    VALUE
    "normal"

启用 SAP HANA 系统复制

作为启用 SAP HANA 系统复制的一部分,您需要将 SAP HANA 文件系统安全存储 (SSFS) 的数据和密钥文件从主要主机复制到辅助主机。此过程用于复制文件的方法只是您可以使用的其中一种方法。

  1. 在主要主机上,以 SID_LCadm 身份启用系统复制:

    > hdbnsutil -sr_enable --name=primary-host-name
  2. 在辅助主机上,以 SID_LCadm 身份停止 SAP HANA:

    > HDB stop
  3. 在主要主机上,使用您在主机虚拟机之间设置 SSH 的同一用户账号,将密钥文件复制到辅助主机。为方便起见,以下命令还将为您的用户账号 ID 定义一个环境变量:

    $ sudo cp /usr/sap/SID/SYS/global/security/rsecssfs ~/rsecssfs -r
    $ myid=$(whoami)
    $ sudo chown ${myid} -R /home/"${myid}"/rsecssfs
    $ scp -r rsecssfs $(whoami)@secondary-host-name:rsecssfs
    $ rm -r /home/"${myid}"/rsecssfs
    
  4. 在辅助主机上,以与上一步相同的用户身份执行以下操作:

    1. 将 rsecssfs 目录中的现有密钥文件替换为主要主机中的文件,并设置文件权限来限制访问:

      $ SAPSID=SID
      $ sudo rm /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo rm /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ myid=$(whoami)
      $ sudo cp /home/"${myid}"/rsecssfs/data/SSFS_"${SAPSID}".DAT \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo cp /home/"${myid}"/rsecssfs/key/SSFS_"${SAPSID}".KEY \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ sudo chown "${SAPSID,,}"adm:sapsys \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo chown "${SAPSID,,}"adm:sapsys \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
      $ sudo chmod 644 \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/data/SSFS_"${SAPSID}".DAT
      $ sudo chmod 640 \
        /usr/sap/"${SAPSID}"/SYS/global/security/rsecssfs/key/SSFS_"${SAPSID}".KEY
    2. 清理主目录中的文件。

      $ rm -r /home/"${myid}"/rsecssfs
    3. SID_LCadm 身份将辅助 SAP HANA 系统注册到 SAP HANA 系统复制:

      > hdbnsutil -sr_register --remoteHost=primary-host-name --remoteInstance=inst_num \
      --replicationMode=syncmem --operationMode=logreplay --name=secondary-host-name
    4. SID_LCadm 身份启动 SAP HANA:

      > HDB start

验证系统复制

在主要主机上,以 SID_LCadm 身份运行以下 Python 脚本来确认 SAP HANA 系统复制处于活跃状态:

$ python $DIR_INSTANCE/exe/python_support/systemReplicationStatus.py

如果复制功能已正确设置,则除了其他指示符外,系统还将针对 xsenginenameserverindexserver 服务显示以下值:

  • Secondary Active StatusYES
  • Replication StatusACTIVE

此外,overall system replication status 将显示 ACTIVE

配置 Cloud Load Balancing 故障切换支持

具有故障切换支持的内部直通式网络负载均衡器服务会根据健康检查服务将流量路由到 SAP HANA 集群中的活跃主机。

为虚拟 IP 地址预留 IP 地址

虚拟 IP (VIP) 地址(有时也称为浮动 IP 地址)跟随活跃 SAP HANA 系统。负载均衡器将发送到 VIP 的流量路由到当前正在托管活跃 SAP HANA 系统的虚拟机。

  1. 打开 Cloud Shell:

    转到 Cloud Shell

  2. 为虚拟 IP 地址预留 IP 地址。这是应用用于访问 SAP HANA 的 IP 地址。如果您省略 --addresses 标志,系统会为您选择指定子网中的 IP 地址:

    $ gcloud compute addresses create VIP_NAME \
      --region CLUSTER_REGION --subnet CLUSTER_SUBNET \
      --addresses VIP_ADDRESS

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

  3. 确认 IP 地址预留:

    $ gcloud compute addresses describe VIP_NAME \
      --region CLUSTER_REGION

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

    address: 10.0.0.19
    addressType: INTERNAL
    creationTimestamp: '2020-05-20T14:19:03.109-07:00'
    description: ''
    id: '8961491304398200872'
    kind: compute#address
    name: vip-for-hana-ha
    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/vip-for-hana-ha
    status: RESERVED
    subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-subnet-us-central1

为您的主机虚拟机创建实例组

  1. 在 Cloud Shell 中,创建两个非代管实例组,并将主要主实例主机虚拟机分配给其中一个实例组,同时将辅助主实例主机虚拟机分配给另一个实例组:

    $ gcloud compute instance-groups unmanaged create PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE \
      --instances=PRIMARY_HOST_NAME
    $ gcloud compute instance-groups unmanaged create SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE \
      --instances=SECONDARY_HOST_NAME
    
  2. 确认已创建实例组:

    $ gcloud compute instance-groups unmanaged list

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

    NAME          ZONE           NETWORK          NETWORK_PROJECT        MANAGED  INSTANCES
    hana-ha-ig-1  us-central1-a  example-network  example-project-123456 No       1
    hana-ha-ig-2  us-central1-c  example-network  example-project-123456 No       1

创建 Compute Engine 健康检查

  1. 在 Cloud Shell 中,创建健康检查。对于健康检查使用的端口,请选择专用范围 (49152-65535) 内的端口,以避免与其他服务发生冲突。检查间隔和超时值略大于默认值,其目的是为了在 Compute Engine 实时迁移事件期间提高故障切换容忍度。您可以根据需要调整这些值:

    $ gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port=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: '2020-05-20T21:03:06.924-07:00'
    healthyThreshold: 2
    id: '4963070308818371477'
    kind: compute#healthCheck
    name: hana-health-check
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/hana-health-check
    tcpHealthCheck:
     port: 60000
     portSpecification: USE_FIXED_PORT
     proxyHeader: NONE
    timeoutSec: 10
    type: TCP
    unhealthyThreshold: 2

为健康检查创建防火墙规则

为专用范围内的端口定义防火墙规则,用于允许从 Compute Engine 健康检查使用的 IP 地址范围(35.191.0.0/16130.211.0.0/22)访问您的主机虚拟机。如需了解详情,请参阅为健康检查创建防火墙规则

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

    $ gcloud compute instances add-tags PRIMARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone PRIMARY_ZONE
    $ gcloud compute instances add-tags SECONDARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone SECONDARY_ZONE
    
  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:HLTH_CHK_PORT_NUM

    例如:

    gcloud compute firewall-rules create  fw-allow-health-checks \
    --network example-network \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges 35.191.0.0/16,130.211.0.0/22 \
    --target-tags cluster-ntwk-tag \
    --rules tcp:60000

配置负载均衡器和故障切换组

  1. 创建负载均衡器后端服务:

    $ gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme internal \
      --health-checks HEALTH_CHECK_NAME \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 1.0 \
      --region CLUSTER_REGION \
      --global-health-checks
  2. 将主实例组添加到后端服务:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group PRIMARY_IG_NAME \
      --instance-group-zone PRIMARY_ZONE \
      --region CLUSTER_REGION
  3. 将辅助故障切换实例组添加到后端服务:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group SECONDARY_IG_NAME \
      --instance-group-zone SECONDARY_ZONE \
      --failover \
      --region CLUSTER_REGION
  4. 创建转发规则。对于 IP 地址,请指定您为 VIP 地址预留的 IP 地址。如果您需要从下面指定的区域外部访问 SAP HANA 系统,请在定义中添加 --allow-global-access 标志:

    $ gcloud compute forwarding-rules create RULE_NAME \
      --load-balancing-scheme internal \
      --address VIP_ADDRESS \
      --subnet CLUSTER_SUBNET \
      --region CLUSTER_REGION \
      --backend-service BACKEND_SERVICE_NAME \
      --ports ALL

    如需详细了解跨区域访问 SAP HANA 高可用性系统,请参阅内部 TCP/UDP 负载均衡

测试负载均衡器配置

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

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

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

您可以使用 socat 实用程序来临时侦听健康检查端口。

  1. 在两个主机虚拟机上,安装 socat 实用程序:

    $ sudo yum install -y socat

  2. 启动 socat 进程以侦听健康检查端口 60 秒:

    $ sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,fork

  3. 在 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-a/instanceGroups/hana-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/hana-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2
       ipAddress: 10.0.0.34
       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-a/instanceGroups/hana-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/hana-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth
  6. 完成后,将健康检查端口号更改回原始端口号。

设置 Pacemaker

以下过程将在用于 SAP HANA 的 Compute Engine 虚拟机上配置 Pacemaker 集群的 Red Hat 实现。

此过程基于用于配置高可用性集群的 Red Hat 文档,包括以下内容(需要 Red Hat 订阅):

在两个节点上安装集群代理

在两个节点上完成以下步骤。

  1. 以根用户身份安装 Pacemaker 组件:

    # yum -y install pcs pacemaker fence-agents-gce resource-agents-gcp resource-agents-sap-hana
    # yum update -y

    如果您使用的是 Google 提供的 RHEL-for-SAP 映像,则这些软件包已安装,但可能需要更新。

  2. 设置 hacluster 用户的密码,该用户将作为软件包的一部分安装:

    # passwd hacluster
  3. 在系统提示时为 hacluster 指定密码。

  4. 在 Google Cloud 提供的 RHEL 映像中,操作系统防火墙服务默认处于活跃状态。配置防火墙服务以允许高可用性流量:

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  5. 启动 pcs 服务,并将其配置为在启动时启动:

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  6. 检查 pcs 服务的状态:

    # systemctl status pcsd.service

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

    ● pcsd.service - PCS GUI and remote configuration interface
      Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled)
      Active: active (running) since Sat 2020-06-13 21:17:05 UTC; 25s ago
        Docs: man:pcsd(8)
              man:pcs(8)
    Main PID: 31627 (pcsd)
      CGroup: /system.slice/pcsd.service
              └─31627 /usr/bin/ruby /usr/lib/pcsd/pcsd
    Jun 13 21:17:03 hana-ha-vm-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Jun 13 21:17:05 hana-ha-vm-1 systemd[1]: Started PCS GUI and remote configuration interface.
  7. /etc/hosts 文件中,添加集群中两个主机的完整主机名和内部 IP 地址。例如:

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.0.0.40 hana-ha-vm-1.us-central1-a.c.example-project-123456.internal hana-ha-vm-1  # Added by Google
    10.0.0.41 hana-ha-vm-2.us-central1-c.c.example-project-123456.internal hana-ha-vm-2
    169.254.169.254 metadata.google.internal  # Added by Google

    如需详细了解 Red Hat 如何在 RHEL 集群节点上设置 /etc/hosts 文件,请参阅 https://access.redhat.com/solutions/81123

创建集群

  1. 在任一节点上以根用户身份为 hacluster 用户授权。点击 RHEL 版本的标签页以查看命令:

    RHEL 8 及更高版本

    # pcs host auth primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster auth primary-host-name secondary-host-name
  2. 在系统提示时,输入 hacluster 用户名以及您为 hacluster 用户设置的密码。

  3. 创建集群:

    RHEL 8 及更高版本

    # pcs cluster setup cluster-name primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster setup --name cluster-name primary-host-name secondary-host-name

修改 corosync.conf 默认设置

修改主要主机上的 /etc/corosync/corosync.conf 文件,以为在 Google Cloud 上测试高可用性集群的容错设置较合适的起点。

  1. 在任一主机上,使用首选文本编辑器打开 /etc/corosync/corosync.conf 文件进行修改:

    # /etc/corosync/corosync.conf
  2. 如果 /etc/corosync/corosync.conf 是新文件或者为空,您可以在 /etc/corosync/ 目录中查找示例文件并用作 corosync 文件的基础。

  3. 在 corosync.conf 文件的 totem 部分中,添加以下属性以及建议的值,如您的 RHEL 版本所示:

    RHEL 8 及更高版本

    • transport: knet
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    例如:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: knet
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...

    RHEL 7

    • transport: udpu
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    例如:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: udpu
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...
  4. 从包含已修改的 corosync.conf 文件的主机上,在集群之间同步 corosync 配置:

    RHEL 8 及更高版本

    # pcs cluster sync corosync

    RHEL 7

    # pcs cluster sync
  5. 将集群设置为自动启动:

    1. # pcs cluster enable --all
    2. # pcs cluster start --all
  6. 使用 corosync-cmapctl 实用工具确认新的 corosync 设置在集群中处于活动状态:

    # corosync-cmapctl

设置防护功能

Google Cloud 提供的 RHEL 映像包含一个特定于 Google Cloud 的 fence_gce 防护代理。您可以使用 fence_gce 为每个主机虚拟机创建防护设备。

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

若要查看 fence_gce 防护代理可用的所有选项,请发出 fence_gce -h

创建防护设备资源

  1. 在主要主机上,以根用户身份执行以下操作:

    1. 为每个主机虚拟机创建防护设备:

      # pcs stonith create primary-fence-name fence_gce \
        port=primary-host-name \
        zone=primary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
      # pcs stonith create secondary-fence-name fence_gce \
        port=secondary-host-name \
        zone=secondary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
    2. 将每个防护设备限制到另一个主机虚拟机:

      # pcs constraint location primary-fence-name avoids primary-host-name
      # pcs constraint location secondary-fence-name avoids secondary-host-name
  2. 在主要主机上,以根用户身份测试辅助防护设备:

    1. 关闭辅助主机虚拟机:

      # fence_gce -o off -n secondary-host-name --zone=secondary-host-zone

      如果命令成功,您将失去与辅助主机虚拟机的连接,并且在 Google Cloud 控制台中的虚拟机实例页面上会停止该命令。您可能需要刷新页面。

    2. 重启辅助主机虚拟机:

      # fence_gce -o on -n secondary-host-name --zone=secondary-host-zone
  3. 在辅助主机上,以根用户身份,通过在命令中使用主要主机的值重复上述步骤来测试主防护设备。

  4. 在任一主机上,以根用户身份检查集群的状态:

    # pcs status

    防护资源显示在集群状态的资源部分中,类似于以下示例:

    [root@hana-ha-vm-2 ~]# pcs status
    Cluster name: hana-ha-cluster
    Stack: corosync
    Current DC: hana-ha-vm-1 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Mon Jun 15 17:19:07 2020
    Last change: Mon Jun 15 17:18:33 2020 by root via cibadmin on hana-ha-vm-1
    
    2 nodes configured
    2 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
    
     STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
     STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

设置 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

启用 SAP HANA 高可用性/灾难恢复提供商钩子

Red Hat 建议您启用 SAP HANA 高可用性/灾难恢复提供商钩子,这样一来,SAP HANA 就可以发出特定事件的通知并改进故障检测。SAP HANA 高可用性/灾难恢复提供商钩子需要 SAP HANA 2.0 SPS 03 或更高版本。

在主要和次要站点上,完成以下步骤:

  1. SID_LCadm 身份停止 SAP HANA:

    > HDB stop

  1. 以根用户或 SID_LCadm 身份打开 global.ini 文件进行修改:

    > vi /hana/shared/SID/global/hdb/custom/config/global.ini
  2. 将以下定义添加到 global.ini 文件中:

    [ha_dr_provider_SAPHanaSR]
    provider = SAPHanaSR
    path = /usr/share/SAPHanaSR/srHook
    execution_order = 1
    
    [ha_dr_provider_chksrv]
    provider = ChkSrv
    path = /usr/share/SAPHanaSR/srHook
    execution_order = 2
    action_on_lost = stop
    
    [trace]
    ha_dr_saphanasr = info
    ha_dr_chksrv = info

  3. 以根用户身份运行以下命令,在 /etc/sudoers.d 目录中创建一个自定义配置文件。在调用 srConnectionChanged() 钩子方法时,此新配置文件允许 SID_LCadm 用户访问集群节点属性。

    > sudo visudo -f /etc/sudoers.d/20-saphana
  4. /etc/sudoers.d/20-saphana 文件中,添加以下文本:

    请替换以下内容:

    • SITE_A:主 SAP HANA 服务器的站点名称
    • SITE_B:辅助 SAP HANA 服务器的站点名称
    • SID_LC:应使用小写字母指定 SID
    如需查看站点名称,您可以在 SAP HANA 主服务器或辅助服务器上以根用户身份运行 crm_mon -A1 | grep site 命令。
    Cmnd_Alias SITEA_SOK = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_A -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEA_SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_A -v SFAIL -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEB_SOK = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_B -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SITEB_SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_site_srHook_SITE_B -v SFAIL -t crm_config -s SAPHanaSR
    SID_LCadm ALL=(ALL) NOPASSWD: SITEA_SOK, SITEA_SFAIL, SITEB_SOK, SITEB_SFAIL
    Defaults!SITEA_SOK, SITEA_SFAIL, SITEB_SOK, SITEB_SFAIL !requiretty

  5. 确保 /etc/sudoers 文件中包含以下文本:

    #includedir /etc/sudoers.d

    请注意,此文本中的 # 是语法的一部分,并不表示该行是注释。

  6. SID_LCadm 身份启动 SAP HANA:

    > HDB start

  7. 在主要主机上,以 SID_LCadm 身份测试钩子脚本报告的状态:

    > cdtrace
    > awk '/ha_dr_SAPHanaSR.*crm_attribute/ { printf "%s %s %s %s\n",$2,$3,$5,$16 }' nameserver_*

设置集群默认设置

设置迁移阈值和粘性,以确定在发生故障前要尝试的故障切换次数,并将系统设置为先尝试在当前主机上重启。只需在一个节点上设置此设置即可应用到集群。

  1. 以任一主机上,以根用户身份启动集群:

    # pcs cluster start --all #start the cluster
  2. 设置资源默认值:

    # pcs resource defaults resource-stickiness=1000
    # pcs resource defaults migration-threshold=5000

    属性 resource-stickiness 用于控制服务在其位置保持运行的可能性。值越高,服务粘性越高。值 1000 表示服务粘性非常高。

    属性 migration-threshold 用于指定在服务故障切换到其他主机之前必须发生的故障数。值 5000 已经足够高,可以防止对持续较短时间的故障进行故障切换。

    您可以通过输入 pcs resource defaults 来检查资源默认值。

  3. 设置资源操作超时默认值:

    # pcs resource op defaults timeout=600s

    您可以通过输入 pcs resource op defaults 来检查资源操作默认值。

  4. 如下设置集群属性:

    # pcs property set stonith-enabled="true"
    # pcs property set stonith-timeout="300s"
    

    您可以通过 pcs property list 来检查您的属性设置。

创建 SAPHanaTopology 资源

SAPHanaTopology 资源在节点上获取 HANA 系统复制的状态和配置。它还会检查 SAP 主机代理。

  1. 在任一主机上,以根用户身份创建 SAPHanaTopology 资源:

    # pcs resource create topology_resource_name SAPHanaTopology SID=SID \
       InstanceNumber=inst_num \
       op start timeout=600 \
       op stop timeout=300 \
       op monitor interval=10 timeout=600 \
       clone clone-max=2 clone-node-max=1 interleave=true
  2. 创建资源后,请检查配置。将 -clone 附加到资源名称以在响应中包含克隆集信息:

    RHEL 8 及更高版本

    # pcs resource config topology_resource_name-clone

    RHEL 7

    # pcs resource show topology_resource_name-clone

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

    Clone: SAPHanaTopology_HA1_22-clone
    Meta Attrs: clone-max=2 clone-node-max=1 interleave=true
    Resource: SAPHanaTopology_HA1_22 (class=ocf provider=heartbeat type=SAPHanaTopology)
     Attributes: InstanceNumber=22 SID=HA1
     Operations: methods interval=0s timeout=5 (SAPHanaTopology_HA1_22-methods-interval-0s)
                 monitor interval=10 timeout=600 (SAPHanaTopology_HA1_22-monitor-interval-10)
                 reload interval=0s timeout=5 (SAPHanaTopology_HA1_22-reload-interval-0s)
                 start interval=0s timeout=600 (SAPHanaTopology_HA1_22-start-interval-0s)
                 stop interval=0s timeout=300 (SAPHanaTopology_HA1_22-stop-interval-0s)

您还可以使用 crm_mon -A1 命令检查集群特性。

创建 SAPHana 资源

SAPHana 资源代理负责管理为 SAP HANA 系统复制配置的数据库。

SAPHana 资源定义中的以下参数是可选参数:

  • AUTOMATED_REGISTER,当该参数设置为 true 时,系统会在 DUPLICATE_PRIMARY_TIMEOUT 在接管后到期时自动将之前的主实例注册为辅助实例。默认值为 false

    对于多层级 SAP HANA 高可用性集群,如果您使用的是 SAP HANA 2.0 SP03 之前的版本,请将 AUTOMATED_REGISTER 设置为 false。这可以防止恢复的实例尝试向已配置复制目标的 HANA 系统自行注册以进行复制。在 SAP HANA 2.0 SP03 或更高版本中,对于使用多层级系统复制的 SAP HANA 配置,您可以将 AUTOMATED_REGISTER 设置为 true

  • DUPLICATE_PRIMARY_TIMEOUT,该参数用于设置在存在两个主时间戳的情况下,这两个主时间戳之间的时间差(以秒为单位)。默认值为 7200

  • PREFER_SITE_TAKEOVER,该参数用于确定是否在启动故障切换之前尝试本地重启。默认值为 false

如需详细了解这些参数,请参阅在 Google Cloud 上安装和配置 Red Hat Enterprise Linux 7.6(及更高版本)的高可用性集群。需要 Red Hat 订阅。

  1. 以任一主机上,以根用户身份创建 SAP HANA 资源:

    RHEL 8 及更高版本

    # pcs resource create sap_hana_resource_name SAPHana SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op start timeout=3600 \
    op stop timeout=3600 \
    op monitor interval=61 role="Slave" timeout=700 \
    op monitor interval=59 role="Master" timeout=700 \
    op promote timeout=3600 \
    op demote timeout=3600 \
    promotable meta notify=true clone-max=2 clone-node-max=1 interleave=true

    RHEL 7

    # pcs resource create sap_hana_resource_name SAPHana SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op start timeout=3600 \
    op stop timeout=3600 \
    op monitor interval=61 role="Slave" timeout=700 \
    op monitor interval=59 role="Master" timeout=700 \
    op promote timeout=3600 \
    op demote timeout=3600 \
    master meta notify=true clone-max=2 clone-node-max=1 interleave=true
  2. 检查生成的资源特性:

    RHEL 8 及更高版本

    # pcs resource config sap_hana_resource_name

    RHEL 7

    # pcs resource show sap_hana_resource_name

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

     Resource: SAPHana_HA1_22 (class=ocf provider=heartbeat type=SAPHana)
      Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=22 PREFER_SITE_TAKEOVER=true SID=HA1
      Meta Attrs: clone-max=2 clone-node-max=1 interleave=true notify=true
      Operations: demote interval=0s timeout=3600 (SAPHana_HA1_22-demote-interval-0s)
                  methods interval=0s timeout=5 (SAPHana_HA1_22-methods-interval-0s)
                  monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_22-monitor-interval-61)
                  monitor interval=59 role=Master timeout=700 (SAPHana_HA1_22-monitor-interval-59)
                  promote interval=0s timeout=3600 (SAPHana_HA1_22-promote-interval-0s)
                  reload interval=0s timeout=5 (SAPHana_HA1_22-reload-interval-0s)
                  start interval=0s timeout=3600 (SAPHana_HA1_22-start-interval-0s)
                  stop interval=0s timeout=3600 (SAPHana_HA1_22-stop-interval-0s)
  3. 启动资源后,请检查节点特性以查看节点上 SAP HANA 数据库的当前状态:

    # crm_mon -A1

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

    Stack: corosync
    Current DC: hana-ha-vm-2 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Tue Jun 16 20:07:51 2020
    Last change: Tue Jun 16 20:07:26 2020 by root via crm_attribute on hana-ha-vm-1
    
    2 nodes configured
    6 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Active resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    
    Node Attributes:
    * Node hana-ha-vm-1:
       + hana_ha1_clone_state              : PROMOTED
       + hana_ha1_op_mode                  : logreplay
       + hana_ha1_remoteHost               : hana-ha-vm-2
       + hana_ha1_roles                    : 4:P:master1:master:worker:master
       + hana_ha1_site                     : hana-ha-vm-1
       + hana_ha1_srmode                   : syncmem
       + hana_ha1_sync_state               : PRIM
       + hana_ha1_version                  : 1.00.122.27.1568902538
       + hana_ha1_vhost                    : hana-ha-vm-1
       + lpa_ha1_lpt                       : 1592338046
       + master-SAPHana_HA1_22             : 150
    * Node hana-ha-vm-2:
       + hana_ha1_clone_state              : DEMOTED
       + hana_ha1_op_mode                  : logreplay
       + hana_ha1_remoteHost               : hana-ha-vm-1
       + hana_ha1_roles                    : 4:S:master1:master:worker:master
       + hana_ha1_site                     : hana-ha-vm-2
       + hana_ha1_srmode                   : syncmem
       + hana_ha1_sync_state               : SOK
       + hana_ha1_version                  : 1.00.122.27.1568902538
       + hana_ha1_vhost                    : hana-ha-vm-2
       + lpa_ha1_lpt                       : 30
       + master-SAPHana_HA1_22             : 100

创建虚拟 IP 地址资源

您需要为 VIP 创建集群资源。VIP 资源已本地化到主操作系统,且无法由其他主机路由。负载均衡器将根据健康检查将发送到 VIP 的流量路由到后端主机。

以任一主机上,以根用户身份执行以下操作:

# pcs resource create resource_name \
  IPaddr2 ip="vip-address" nic=eth0 cidr_netmask=32 \
  op monitor interval=3600s timeout=60s

vip-address 值与您之前为负载均衡器前端转发规则预留并指定的 IP 地址相同。根据您的配置更改网络接口。

创建限制条件

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

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

    RHEL 8 及更高版本

    # pcs constraint order topology_resource_name-clone \
    then sap_hana_resource_name-clone symmetrical=false

    RHEL 7

    # pcs constraint order topology_resource_name-clone \
    then sap_hana_resource_name-master symmetrical=false

    symmetrical=false 规范意味着该限制条件仅适用于启动,而不适用于关闭。

    但是,由于您在上一步中为这些资源设置了 interleave=true,因此这些进程可以并行启动。换言之,您可以在 SAPHanaTopology 运行时立即在任何节点上启动 SAPHana。

  2. 检查限制条件:

    # pcs constraint

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

    Location Constraints:
     Resource: STONITH-hana-ha-vm-1
       Disabled on:
         Node: hana-ha-vm-1 (score:-INFINITY)
     Resource: STONITH-hana-ha-vm-2
       Disabled on:
         Node: hana-ha-vm-2 (score:-INFINITY)
    Ordering Constraints:
     start SAPHanaTopology_HA1_22-clone then start SAPHana_HA1_22-master (kind:Mandatory) (non-symmetrical)
    Colocation Constraints:
    Ticket Constraints:

安装监听器并创建健康检查资源

如需配置健康检查资源,您需要先安装监听器。

安装侦听器

负载均衡器在每个主机的健康检查端口上使用侦听器来确定 SAP HANA 集群主实例的运行位置。 1. 在主要和辅助系统上,以主实例上的根用户身份安装 TCP 监听器。这些说明将安装 HAProxy 并将其用作监听器。

# yum install haproxy

  1. 打开配置文件 haproxy.cfg 进行修改:

    # vi /etc/haproxy/haproxy.cfg
    1. haproxy.cfg默认值部分中,将 mode 更改为 tcp

    2. 默认值部分后,通过添加以下内容创建一个新部分:

      #---------------------------------------------------------------------
      # Health check listener port for SAP HANA HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
        bind *:healthcheck-port-num

      绑定端口与您在创建健康检查时使用的端口相同。

      完成后,更新应类似于以下示例:

      #---------------------------------------------------------------------
      # common defaults that all the 'listen' and 'backend' sections will
      # use if not designated in their block
      #---------------------------------------------------------------------
      defaults
        mode                    tcp
        log                     global
        option                  tcplog
        option                  dontlognull
        option http-server-close
        # option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
      
      #---------------------------------------------------------------------
      # Set up health check listener for SAP HANA HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
       bind *:60000
  2. 在每个主机上,以根用户身份启动服务以确认其配置正确无误:

    # systemctl start haproxy.service
  3. 在 Google Cloud 控制台中的“负载均衡器”页面上,点击您的负载均衡器条目:

    “负载均衡”页面

    负载均衡器详情页面的后端部分中,如果两个主机上的 HAProxy 服务都处于活跃状态,则您会在每个实例组条目的运行状况良好列中看到 1/1

    该屏幕截图在两个实例组的“运行状况良好”列中都显示了“1/1”,这表示它们都运行状况良好。

  4. 在每个主机上,停止 HAProxy 服务:

    # systemctl stop haproxy.service

    在每个主机上停止 HAProxy 服务后,每个实例组的运行状况良好列中都会显示 0/1

    该屏幕截图在每个实例组的“运行状况良好”列中都显示了“0/1”,这表示没有处于活跃状态的监听器。

    稍后,在配置健康检查后,集群将在主节点上重启监听器。

创建健康检查资源

  1. 在任一主机上,以根用户身份为 HAProxy 服务创建健康检查资源:

    # pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s
  2. 确认健康检查服务在主 SAP HANA 实例和 VIP 资源所在的主机上处于活跃状态:

    # pcs status

    如果健康检查资源不在主要主机上,请使用以下命令进行移动:

    # pcs resource move healthcheck_resource_name target_host_name
    # pcs resource clear healthcheck_resource_name

    命令 pcs resource clear 会将资源保留在其新位置,但移除了 pcs resource move 命令创建的不需要的位置限制条件。

    在状态中,资源部分应类似于以下示例:

    Full list of resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    rsc_vip_HA1_22 (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
    rsc_healthcheck_HA1    (service:haproxy):      Started hana-ha-vm-2
  3. 将 VIP 和健康检查资源组合在一起:

    # pcs resource group add rsc-group-name healthcheck_resource_name vip_resource_name

    在集群状态中,资源部分应类似于以下示例:

    Full list of resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
    Resource Group: g-primary
        rsc_healthcheck_HA1        (service:haproxy):      Started hana-ha-vm-1
        rsc_vip_HA1_22     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
  4. 创建一个限制条件,以用于在主 SAP HANA 实例所在的节点上定位新组。

    RHEL 8 及更高版本

    # pcs constraint colocation add rsc-group-name with master sap_hana_resource_name-clone 4000

    RHEL 7

    # pcs constraint colocation add rsc-group-name with master sap_hana_resource_name-master 4000

    您的最终限制条件应类似于以下示例:

    # pcs constraint
    Location Constraints:
     Resource: STONITH-hana-ha-vm-1
       Disabled on:
         Node: hana-ha-vm-1 (score:-INFINITY)
     Resource: STONITH-hana-ha-vm-2
       Disabled on:
         Node: hana-ha-vm-2 (score:-INFINITY)
    Ordering Constraints:
     start SAPHanaTopology_HA1_22-clone then start SAPHana_HA1_22-master (kind:Mandatory) (non-symmetrical)
    Colocation Constraints:
     g-primary with SAPHana_HA1_22-master (score:4000) (rsc-role:Started) (with-rsc-role:Master)
    Ticket Constraints:

测试故障切换

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

在测试前备份系统。

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

  • HDB stop
  • HDB kill
  • reboot(活跃节点上)
  • ip link set eth0 down,适用于具有单个网络接口的实例
  • iptables ... DROP,适用于具有多个网络接口的实例
  • echo c > /proc/sysrq-trigger

以下说明使用 ip link set eth0 downiptables 来模拟集群中两个主机之间的网络中断。在具有单个网络接口的实例上使用 ip link 命令,在具有一个或多个网络接口的实例上使用 iptables 命令。此测试会验证故障切换和防护。如果您的实例定义了多个网络接口,请在辅助主机上使用 iptables 命令,以根据集群的主要主机用于集群通信的 IP 来丢弃传入和传出流量,从而模拟主要主机的网络连接中断。

  1. 在活跃主机上,以根用户身份将网络接口设为离线:

    # ip link set eth0 down

    或者,如果有多个网络接口处于活跃状态,请在辅助主机上使用 iptables

    # iptables -A INPUT -s PRIMARY_CLUSTER_IP -j DROP; iptables -A OUTPUT -d PRIMARY_CLUSTER_IP -j DROP
  2. 使用 SSH 重新连接到任一主机并切换到根用户。

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

    Cluster name: hana-ha-cluster
    Stack: corosync
    Current DC: hana-ha-vm-2 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Wed Jun 17 01:04:36 2020
    Last change: Wed Jun 17 01:03:58 2020 by root via crm_attribute on hana-ha-vm-2
    
    2 nodes configured
    8 resources configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
    
    STONITH-hana-ha-vm-1   (stonith:fence_gce):    Started hana-ha-vm-2
    STONITH-hana-ha-vm-2   (stonith:fence_gce):    Started hana-ha-vm-1
    
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2  ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-2 ]
        Slaves: [ hana-ha-vm-1  ]
    Resource Group: g-primary
        rsc_healthcheck_HA1        (service:haproxy):      Started hana-ha-vm-2
        rsc_vip_HA1_22     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-2
    
    Daemon Status:
     corosync: active/enabled
     pacemaker: active/enabled
     pcsd: active/enabled

配置 HANA 主动/主动(启用读取)

从 SAP HANA 2.0 SPS1 开始,您可以在 Pacemaker 集群中配置 HANA 主动/主动(启用读取)。这是可选操作。

如需在 Pacemaker 集群中配置 HANA 主动/主动(启用读取),请完成以下步骤。

为辅助主机配置 Cloud Load Balancing 故障切换支持

具有故障切换支持的内部直通式网络负载均衡器服务会根据健康检查服务将流量路由到 SAP HANA 集群中的辅助主机。

如需为辅助主机配置故障切换支持,请按照以下步骤操作:

  1. 打开 Cloud Shell:

    转到 Cloud Shell

  2. 通过运行以下命令为虚拟 IP 地址预留 IP 地址。

    虚拟 IP (VIP) 地址跟随辅助 SAP HANA 系统。这是应用用于访问辅助 SAP HANA 系统的 IP 地址。负载均衡器将发送到 VIP 地址的流量路由到当前托管辅助系统的虚拟机实例。

    如果您在以下命令中省略 --addresses 标志,系统会为您选择指定子网中的 IP 地址。如需详细了解如何预留静态 IP 地址,请参阅预留静态内部 IP 地址

    $ gcloud compute addresses create secondary-vip-name \
      --region cluster-region --subnet cluster-subnet \
      --addresses secondary-vip-address
  3. 运行以下命令来创建 Compute Engine 健康检查。

    对于健康检查使用的端口,请选择专用范围 (49152-65535) 内的端口,以避免与其他服务发生冲突。此端口应与为用于 HANA 主要系统访问的健康检查配置的端口不同。检查间隔和超时值略大于默认值,其目的是为了在 Compute Engine 实时迁移事件期间提高故障切换容忍度。您可以根据需要调整这些值。

    $ gcloud compute health-checks create tcp secondary-health-check-name \
      --port=secondary-healthcheck-port-num \
      --proxy-header=NONE --check-interval=10 --timeout=10 --unhealthy-threshold=2 \
      --healthy-threshold=2
  4. 通过运行以下命令来配置负载均衡器和故障切换组。

    在此处创建其他后端服务,并使用之前为 SAP HANA 主要系统的内部 TCP/UDP 负载均衡器后面的后端服务创建的实例组。

    1. 创建负载均衡器后端服务:

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

      $ gcloud compute backend-services add-backend secondary-backend-service-name \
        --instance-group primary-ig-name \
        --instance-group-zone primary-zone \
        --region cluster-region
    3. 将辅助故障切换实例组添加到后端服务:

      $ gcloud compute backend-services add-backend secondary-backend-service-name \
        --instance-group secondary-ig-name \
        --instance-group-zone secondary-zone \
        --failover \
        --region cluster-region
    4. 创建转发规则。

      对于 IP 地址标志,请指定您为 VIP 地址预留的 IP 地址。如果需要从以下命令中指定的区域外部访问 HANA 辅助系统,请在转发规则的定义中添加 --allow-global-access 标志。

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

      如需详细了解跨区域访问 SAP HANA 高可用性系统,请参阅内部 TCP/UDP 负载均衡

启用 HANA 主动/主动(启用读取)

在辅助主机上,按照以下步骤为 SAP HANA 系统复制启用主动/主动(启用读取):

  1. 以根用户身份将集群置于维护模式:

    $ pcs property set maintenance-mode=true

  2. SID_LCadm 身份停止 SAP HANA:

    > HDB stop
  3. SID_LCadm 身份,使用操作模式 logreplay_readaccess 向 SAP HANA 系统复制重新注册 HANA 辅助系统:

    > hdbnsutil -sr_register --remoteHost=primary-host-name --remoteInstance=inst_num \
     --replicationMode=syncmem --operationMode=logreplay_readaccess --name=secondary-host-name
  4. SID_LCadm 身份启动 SAP HANA:

    > HDB start
  5. SID_LCadm 身份,确认 HANA 同步状态为 ACTIVE

    > cdpy; python systemReplicationStatus.py --sapcontrol=1 | grep overall_replication_status

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

    overall_replication_status=ACTIVE

配置 Pacemaker

以根用户身份运行以下命令,将 Pacemaker 高可用性集群配置为主动/主动(启用读取):

  1. 为健康检查设置监听器:

    1. 复制并重命名默认的 haproxy.service 配置文件,使其成为多个 haproxy 实例的模板文件:

      # cp /usr/lib/systemd/system/haproxy.service \
           /etc/systemd/system/haproxy@.service
    2. 修改 haproxy@.service 文件的 [Unit] 和 [Service] 部分以包含 %i 实例参数,如以下示例所示:

      RHEL 7

      [Unit]
      Description=HAProxy Load Balancer %i
      After=network-online.target

      [Service] EnvironmentFile=/etc/sysconfig/haproxy ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy-%i.cfg -p /run/haproxy-%i.pid $OPTIONS ...

      RHEL 8

      [Unit]
      Description=HAProxy Load Balancer %i
      After=network-online.target
      Wants=network-online.target

      [Service] Environment="CONFIG=/etc/haproxy/haproxy-%i.cfg" "PIDFILE=/run/haproxy-%i.pid" ...

      如需了解 Red Hat 关于 systemd 单元模板的详情,请参阅使用实例化单元

    3. 为 SAP HANA 主要系统创建 haproxy.cfg 配置文件。例如:

      # vi /etc/haproxy/haproxy-primary.cfg
    4. 在 SAP HANA 主要系统的 haproxy-primary.cfg 配置文件中,插入以下配置,并将 healthcheck-port-num 替换为您之前在为 HANA 主要系统创建 Compute Engine 健康检查时指定的端口号:

      global
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy-%i.pid
        user        haproxy
        group       haproxy
        daemon
      defaults
        mode                    tcp
        log                     global
        option                  dontlognull
        option                  redispatch
        retries                 3
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout check           10s
        maxconn                 3000
      
      # Listener for SAP healthcheck
      listen healthcheck
        bind *:healthcheck-port-num
    5. 为 SAP HANA 辅助系统创建 haproxy.cfg 配置文件。例如:

      # vi /etc/haproxy/haproxy-secondary.cfg
    6. 在 SAP HANA 辅助系统的 haproxy-secondary.cfg 配置文件中,插入以下配置,并将 secondary-healthcheck-port-num 替换为您之前在为 HANA 辅助系统创建 Compute Engine 健康检查时指定的端口号:

      global
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy-%i.pid
        user        haproxy
        group       haproxy
        daemon
      defaults
        mode                    tcp
        log                     global
        option                  dontlognull
        option                  redispatch
        retries                 3
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout check           10s
        maxconn                 3000
      
      # Listener for SAP healthcheck
      listen healthcheck
        bind *:secondary-healthcheck-port-num
    7. /etc/haproxy/haproxy.cfg 中移除现有的监听器配置:

      #---------------------------------------------------------------------
      # Health check listener port for SAP HANA HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
        bind *:healthcheck-port-num
    8. 重新加载 systemd 服务以加载更改:

      # systemctl daemon-reload
    9. 确认正确设置了这两项 haproxy 服务:

      # systemctl start haproxy@primary
      # systemctl start haproxy@secondary
      
      # systemctl status haproxy@primary
      # systemctl status haproxy@secondary

      返回的状态应显示 haproxy@primary.servicehaproxy@secondary.serviceactive (running)。以下是 haproxy@primary.service 的示例输出:

      ● haproxy@primary.service - Cluster Controlled haproxy@primary
        Loaded: loaded (/etc/systemd/system/haproxy@.service; disabled; vendor preset: disabled)
        Drop-In: /run/systemd/system/haproxy@primary.service.d
                 └─50-pacemaker.conf
        Active: active (running) since Fri 2022-10-07 23:36:09 UTC; 1h 13min ago
      Main PID: 21064 (haproxy-systemd)
        CGroup: /system.slice/system-haproxy.slice/haproxy@primary.service
                ├─21064 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy-primary.cfg -p /run/hapro...
                ├─21066 /usr/sbin/haproxy -f /etc/haproxy/haproxy-primary.cfg -p /run/haproxy-primary.pid -...
                └─21067 /usr/sbin/haproxy -f /etc/haproxy/haproxy-primary.cfg -p /run/haproxy-primary.pid -...
      
      Oct 07 23:36:09 hana-ha-vm-1 systemd[1]: Started Cluster Controlled haproxy@primary.
    10. 在 Cloud Shell 中,等待几秒钟,让健康检查检测到监听器,然后检查主要和辅助后端服务中的后端实例组的运行状况:

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

      您应该会看到如下所示的输出,显示您当前正在处理的虚拟机,其中 healthStateHEALTHY

      ---
      backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/hana-ha-ig-1
      status:
      healthStatus:
      ‐ healthState: HEALTHY
        instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1
        ipAddress: 10.0.0.35
        port: 80
      kind: compute#backendServiceGroupHealth
      
    11. 停止这两项服务,让 Pacemaker 管理这些服务:

      # systemctl stop haproxy@primary
      # systemctl stop haproxy@secondary
    12. 在集群中的每台主机上重复执行上述步骤。

  2. 针对您为辅助系统预留的 VIP 地址创建本地集群 IP 地址资源:

    # pcs resource create secondary_vip_resource_name \
      IPaddr2 ip="secondary-vip-address" nic=eth0 cidr_netmask=32 \
      op monitor interval=3600s timeout=60s
  3. 通过运行以下命令来设置帮助程序健康检查服务。

    负载均衡器在每个主机的健康检查端口上使用侦听器来确定 SAP HANA 集群次要实例的运行位置。

    1. 如需管理集群中的侦听器,请为侦听器创建资源:

      1. 删除 HANA 主要系统的健康检查服务的资源:

        # pcs resource delete healthcheck_resource_name --force
      2. 为 HANA 主要系统的健康检查服务添加新资源:

        # pcs resource create primary_healthcheck_resource_name \
         service:haproxy@primary op monitor interval=10s timeout=20s
      3. 为 HANA 辅助系统的健康检查服务添加新资源:

        # pcs resource create secondary_healthcheck_resource_name \
         service:haproxy@secondary op monitor interval=10s timeout=20s
    2. 将 VIP 地址和帮助程序健康检查服务资源组合在一起

      1. 将新的健康检查资源添加到主要 VIP 地址资源的现有资源组中:

        # pcs resource group add rsc-group-name primary_healthcheck_resource_name \
         --before vip_resource_name
      2. 添加新的资源组,用于对 HANA 辅助系统的 VIP 地址和帮助程序健康检查服务资源进行分组:

        # pcs resource group add secondary-rsc-group-name \
         secondary_healthcheck_resource_name secondary_vip_resource_name
  4. 通过运行以下命令创建两个位置限制条件:

    这些限制条件用于确保将辅助 VIP 地址资源组放在正确的集群节点上:

    # pcs constraint location secondary-rsc-group-name rule score=INFINITY \
      hana_sid_sync_state eq SOK and hana_sid_roles eq 4:S:master1:master:worker:master
    # pcs constraint location secondary-rsc-group-name rule score=2000 \
      hana_sid_sync_state eq PRIM and hana_sid_roles eq 4:P:master1:master:worker:master
  5. 退出集群维护模式:

    # pcs property set maintenance-mode=false
  6. 检查集群状态:

    # pcs status

    以下示例展示了使用主动/主动(启用读取)的 SAP HANA 系统复制的已正确配置的活跃集群的状态。您应该会看到辅助系统的 VIP 地址资源的其他资源组。在以下示例中,该资源组的名称为 g-secondary

    Cluster name: hacluster
      Stack: corosync
      Current DC: hana-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Sat Oct  8 00:37:08 2022
      Last change: Sat Oct  8 00:36:57 2022 by root via crm_attribute on hana-test-2
    
      2 nodes configured
      10 resource instances configured
    
    Online: [ hana-ha-vm-1 hana-ha-vm-2 ]
    
    Full list of resources:
      STONITH-hana-ha-vm-1    (stonith:fence_gce):    Started hana-ha-vm-2
      STONITH-hana-ha-vm-2    (stonith:fence_gce):    Started hana-ha-vm-1
      Resource Group: g-primary
        rsc_healthcheck_HA1-primary        (service:haproxy@primary):      Started hana-ha-vm-1
        rsc_vip_HA1_00     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-1
      Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 ]
      Master/Slave Set: SAPHana_HA1_00-master [SAPHana_HA1_00]
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
      Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable):
        Masters: [ hana-ha-vm-1 ]
        Slaves: [ hana-ha-vm-2 ]
      Resource Group: g-secondary
        rsc_healthcheck_HA1-secondary        (service:haproxy@secondary):      Started hana-ha-vm-2
        rsc_vip_HA1_00-secondary     (ocf::heartbeat:IPaddr2):       Started hana-ha-vm-2
    

评估 SAP HANA 工作负载

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

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

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

问题排查

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

获取 RHEL 上的 SAP HANA 的支持

如果您在解决 RHEL 上的 SAP HANA 高可用性集群问题时需要帮助,请收集必要的诊断信息并与 Cloud 客户服务联系。如需了解详情,请参阅 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 HANA

如果主机虚拟机没有 SAP HANA 的外部 IP 地址,则您将只能使用 SSH 通过堡垒实例连接到 SAP HANA 实例,或使用 SAP HANA Studio 通过 Windows 服务器连接到 SAP HANA 实例。

  • 如需通过堡垒实例连接到 SAP HANA,请使用您选择的 SSH 客户端连接到堡垒主机,然后再连接到 SAP HANA 实例。

  • 如需通过 SAP HANA Studio 连接到 SAP HANA 数据库,请使用远程桌面客户端连接到 Windows Server 实例。连接后,手动安装 SAP HANA Studio 并访问 SAP HANA 数据库。

部署后任务

完成部署后,请完成以下步骤:

  1. 更改 SAP HANA 系统管理员和数据库超级用户的临时密码。例如:

    sudo passwd SID_LCadm

    如需了解 SAP 提供的有关更改密码的信息,请参阅重置系统数据库的系统用户密码

  2. 在使用 SAP HANA 实例之前,请先配置和备份新的 SAP HANA 数据库。

  3. 如果 SAP HANA 系统部署在 VirtIO 网络接口上,我们建议您确保 TCP 参数 /proc/sys/net/ipv4/tcp_limit_output_bytes 的值设置为 1048576。此修改有助于提高 VirtIO 网络接口上的总体网络吞吐量,而不会影响网络延迟时间。

如需了解详情,请参阅以下主题:

后续步骤

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