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

本指南介绍如何在 Google Cloud 上为使用内部直通式网络负载均衡器的 SAP HANA 横向扩容系统部署和手动配置 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 集群以管理虚拟 IP (VIP) 地址。

本指南包含以下步骤:

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

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

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

本指南部署的系统

按照本指南,您将部署一个为获得全可用区冗余而配置的多节点 SAP HANA HA 系统,并使用一个附加实例充当决胜者,也称为决胜节点,以确保在丢失一个可用区时,维持集群法定数。

最终部署包含以下资源:

  • 主要站点和辅助站点,其中每个实例具有一个可用区级的对应实例。
  • 为进行同步复制而配置的两个网站。
  • 充当决胜者的单个计算实例。
  • 具有防护机制的 Pacemaker 高可用性集群资源管理器。
  • 挂接到每个 SAP HANA 实例的 SAP HANA 数据和日志卷的永久性磁盘。

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

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

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

前提条件

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

  • 您已阅读 SAP HANA 规划指南SAP HANA 高可用性规划指南
  • 您或您的组织已有一个 Google Cloud 账号,并且您已为 SAP HANA 部署创建了一个项目。如需了解如何创建 Google Cloud 账号和项目,请参阅 SAP HANA 部署指南中的设置 Google 账号
  • 如果您需要 SAP 工作负载根据数据驻留、访问权限控制、支持人员或监管要求运行,则必须创建所需的 Assured Workloads 文件夹。如需了解详情,请参阅 SAP on Google Cloud 的合规性和主权控制
  • SAP HANA 安装媒体存储在可用于您的部署项目和区域的 Cloud Storage 存储桶中。如需了解如何将 SAP HANA 安装媒体上传到 Cloud Storage 存储桶,请参阅 SAP HANA 部署指南中的下载 SAP HANA

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

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

  • 如果您使用的是 VPC 内部 DNS,则项目元数据中 vmDnsSetting 变量的值必须为 GlobalOnlyZonalPreferred,才能支持跨可用区解析节点名称。vmDnsSetting 的默认设置为 ZonalOnly。如需了解详情,请参阅以下主题:

  • 您已有一个 NFS 解决方案(例如代管式 Filestore 解决方案),用于在横向扩容 SAP HANA 系统中的主机之间共享 SAP HANA /hana/shared/hanabackup 卷。如需部署 Filestore NFS 服务器,请参阅创建实例

    • 请注意,主要网站和次要网站必须能够访问自己的专用 NFS 路径,以避免覆盖数据。若要使用单个 Filestore 实例,则必须将部署配置为使用不同的子目录作为装载路径。

创建网络

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

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

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

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

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

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

设置 NAT 网关

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

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

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

添加防火墙规则

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

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

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

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

  • 所有 SAP 产品的 TCP/IP 中列出的默认 SAP 端口。
  • 从您的计算机或公司网络环境到 Compute Engine 虚拟机实例的连接。如果您不确定使用哪个 IP 地址,请与您公司的网络管理员联系。

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

部署虚拟机和 SAP HANA

本指南介绍了如何使用 Google Cloud 提供的 Terraform 配置文件来部署以下内容:

  • 两个匹配的 SAP HANA 系统,每个系统有两个或更多虚拟机实例。
  • 单个决胜实例(也称为决胜节点),可确保在丢失一个可用区时,维持集群法定数。

SAP HANA 系统使用异步系统复制,以便将其中一个 SAP HANA 系统用作活跃主系统,将另一个 SAP HANA 系统用作辅助备用系统。可以在同一区域中部署两个 SAP HANA 系统,最好位于不同可用区。

如果您需要包含备用主机的横向扩容系统,以实现 SAP HANA 主机自动故障切换,则必须参阅 Terraform:具备主机自动故障切换功能的 SAP HANA 横向扩容系统部署指南

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

以下说明使用的是 Cloud Shell,但一般也适用于安装了 Terraform 并使用 Google 提供方配置的本地终端。

  1. 确认资源(例如永久性磁盘和 CPU)的当前配额是否满足您要安装的 SAP HANA 系统的要求。如果配额不足,则部署将失败。

    如需了解 SAP HANA 配额要求,请参阅有关 SAP HANA 的价格和配额考虑因素

    转到“配额”

  2. 打开 Cloud Shell 或本地终端。

    打开 Cloud Shell

  3. 在 Cloud Shell 或终端中运行以下命令,将 manual_sap_hana_scaleout_ha.tf 配置文件下载到您的工作目录:

    $ wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana_ha/terraform/manual_sap_hana_scaleout_ha.tf
  4. 在 Cloud Shell 代码编辑器中打开 manual_sap_hana_scaleout_ha.tf 文件,如果您使用的是终端,请在您选择的文本编辑器中打开该文件。

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

  5. manual_sap_hana_scaleout_ha.tf 文件中,对于 sap_hana_primarysap_hana_secondary,如需更新参数值,请将双引号中的内容替换为安装所需的值。下表介绍了这些参数。

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

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

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

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

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

    例如 n1-highmem-32

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

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

    subnetwork 字符串 指定您在先前步骤中创建的子网的名称。如果您要部署到共享 VPC,请以 SHARED_VPC_PROJECT_ID/SUBNETWORK 形式指定该值。例如 myproject/network1
    linux_image 字符串 指定要在其中部署 SAP 系统的 Linux 操作系统映像的名称。 例如 rhel-9-2-sap-hasles-15-sp5-sap。 如需查看可用操作系统映像的列表,请参阅 Google Cloud 控制台中的映像页面。
    linux_image_project 字符串 指定包含您为 linux_image 参数指定的映像的 Google Cloud 项目。此项目可以是您自己的项目,也可以是某个 Google Cloud 映像项目。 对于 Compute Engine 映像,请指定 rhel-sap-cloudsuse-sap-cloud。如需查找操作系统的映像项目,请参阅操作系统详细信息
    primary_instance_name 字符串 指定主要 SAP HANA 系统的虚拟机实例的名称。该名称可以包含小写字母、数字或连字符。
    primary_zone 字符串 指定要在其中部署主要 SAP HANA 系统的可用区。主要可用区和次要可用区必须位于同一区域。 例如:us-east1-c
    secondary_instance_name 字符串 指定辅助 SAP HANA 系统的虚拟机实例的名称。该名称可以包含小写字母、数字或连字符。
    secondary_zone 字符串 指定要在其中部署辅助 SAP HANA 系统的可用区。主要可用区和辅助可用区必须位于同一区域。 例如:us-east1-b
    sap_hana_deployment_bucket 字符串 如需在部署的虚拟机上自动安装 SAP HANA,请指定包含 SAP HANA 安装文件的 Cloud Storage 存储桶路径。请勿在路径中包含 gs://;仅包含存储桶名称和任何文件夹的名称。例如,my-bucket-name/my-folder

    Cloud Storage 存储桶必须存在于您为 project_id 参数指定的 Google Cloud 项目中。

    sap_hana_scaleout_nodes 整数 指定在横向扩容系统中所需的工作器主机的数量。如需部署横向扩容系统,您至少需要一个工作器主机。

    除了 SAP HANA 主实例之外,Terraform 还会创建工作器主机。例如,如果指定为 3,则系统会在横向扩容系统中部署 4 个 SAP HANA 实例。

    sap_hana_sid 字符串 如需在部署的虚拟机上自动安装 SAP HANA,请指定 SAP HANA 系统的 ID。此 ID 必须由 3 个字母数字字符组成,并以字母开头。所有字母必须大写。 例如 ED1
    sap_hana_instance_number 整数 可选。指定 SAP HANA 系统的实例编号(0 到 99)。默认值为 0
    sap_hana_sidadm_password 字符串 如需在部署的虚拟机上自动安装 SAP HANA,请为安装脚本指定一个临时 SIDadm 密码,以便在部署期间使用。该密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。

    我们建议您使用密文,而不是以纯文本形式指定密码。如需了解详情,请参阅密码管理

    sap_hana_sidadm_password_secret 字符串 可选。如果您使用 Secret Manager 存储 SIDadm 密码,请指定与此密码对应的密文的名称

    在 Secret Manager 中,请确保密文值(即密码)至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。

    如需了解详情,请参阅密码管理

    sap_hana_system_password 字符串 如需在部署的虚拟机上自动安装 SAP HANA,请为安装脚本指定一个临时数据库超级用户密码,以便在部署期间使用。该密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。

    我们建议您使用密文,而不是以纯文本形式指定密码。如需了解详情,请参阅密码管理

    sap_hana_system_password_secret 字符串 可选。如果您使用 Secret Manager 存储数据库超级用户密码,请指定与此密码对应的密文的名称

    在 Secret Manager 中,请确保密文值(即密码)至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。

    如需了解详情,请参阅密码管理

    sap_hana_double_volume_size 布尔值 可选。如需将 HANA 卷大小翻倍,请指定 true。如果要在同一虚拟机上部署多个 SAP HANA 实例或要部署灾难恢复 SAP HANA 实例,此参数会非常有用。默认情况下,卷大小会根据虚拟机大小自动计算为所需的最小大小,同时仍满足 SAP 认证和支持要求。默认值为 false
    sap_hana_backup_size 整数 可选。指定 /hanabackup 卷的大小(以 GB 为单位)。如果未指定此参数或将其设置为 0,则安装脚本会为 Compute Engine 实例预配大小为总内存两倍的 HANA 备份卷。
    sap_hana_sidadm_uid 整数 可选。指定一个值来替换 SID_LCadm 用户 ID 的默认值。默认值为 900。您可以将此值更改为其他值,以便在 SAP 环境中保持一致性。
    sap_hana_sapsys_gid 整数 可选。替换 sapsys 的默认组 ID。默认值为 79
    sap_vip 字符串 指定要用于 VIP 的 IP 地址。此 IP 地址必须在分配给子网的 IP 地址范围内。Terraform 配置文件会为您预留此 IP 地址。
    primary_instance_group_name 字符串 可选。指定主节点的非代管式实例组的名称。默认名称是 ig-PRIMARY_INSTANCE_NAME
    secondary_instance_group_name 字符串 可选。指定辅助节点的非代管式实例组的名称。默认名称是 ig-SECONDARY_INSTANCE_NAME
    loadbalancer_name 字符串 可选。指定内部直通式网络负载均衡器的名称。 默认名称是 lb-SAP_HANA_SID-ilb
    network_tags 字符串 可选。指定要与虚拟机实例关联的一个或多个网络标记(以英文逗号分隔),用于防火墙或路由。

    如果您指定 public_ip = false 而不指定网络标记,请务必另外提供一种访问互联网的方法。

    nic_type 字符串 可选。指定要用于虚拟机实例的网络接口。您可以指定值 GVNICVIRTIO_NET。如需使用 Google 虚拟 NIC (gVNIC),您需要指定一个支持 gVNIC 的操作系统映像作为 linux_image 参数的值。如需查看操作系统映像列表,请参阅操作系统详细信息

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

    此参数在 sap_hana 模块 202302060649 或更高版本中可用。
    disk_type 字符串 可选。指定要为部署中的所有 SAP 卷部署的永久性磁盘或超磁盘的默认类型。默认值为 pd-ssd。以下是此参数的有效值:pd-ssdpd-balancedhyperdisk-extremehyperdisk-balancedpd-extreme

    请注意,如果指定值 hyperdisk-extremehyperdisk-balanced,则 /usr/sap 目录会装载在单独的平衡永久性磁盘 (pd-balanced) 中。这是因为 /usr/sap 目录不需要具有与 /hana/data/hana/log 目录一样高的性能。 在 SAP HANA 纵向扩容部署中,系统还会为 /hana/shared 目录部署一个单独的平衡永久性磁盘。

    您可以使用一些高级参数替换此默认磁盘类型以及关联的默认磁盘大小和默认 IOPS。如需了解详情,请转到您的工作目录,运行 terraform init 命令,然后查看 /.terraform/modules/manual_sap_hana_scaleout_ha/variables.tf 文件。在生产环境中使用这些参数之前,请务必在测试环境中对其进行测试。

    use_single_shared_data_log_disk 布尔值 可选。默认值为 false,指示 Terraform 为以下每个 SAP 卷部署单独的永久性磁盘或超磁盘:/hana/data/hana/log/hana/shared/usr/sap。如需将这些 SAP 卷装载到同一永久性磁盘或超磁盘上,请指定 true
    include_backup_disk 布尔值 可选。此参数适用于 SAP HANA 纵向扩容部署。默认值为 true,它会指示 Terraform 部署标准 HDD 永久性磁盘以托管 /hanabackup 目录。此磁盘的大小由 sap_hana_backup_size 参数决定。

    如果将 include_backup_disk 的值设置为 false,则不会为 /hanabackup 目录部署任何磁盘。

    public_ip 布尔值 可选。决定是否为虚拟机实例添加一个公共 IP 地址。默认值为 true
    service_account 字符串 可选。指定主机虚拟机以及主机虚拟机上运行的程序将要使用的用户管理的服务账号的电子邮件地址。例如 svc-acct-name@project-id.iam.gserviceaccount.com

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

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

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

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

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

    • specificReservationRequired 选项设置为 true;或在 Google Cloud 控制台中,选中选择特定预留选项。
    • 某些 Compute Engine 机器类型支持的 CPU 平台不在该机器类型的 SAP 认证范围内。如果目标预留要用于以下任何机器类型,则必须按如下所示为该预留指定最低要求 CPU 平台:
      • n1-highmem-32:Intel Broadwell
      • n1-highmem-64:Intel Broadwell
      • n1-highmem-96:Intel Skylake
      • m1-megamem-96:Intel Skylake
    • 对于经过 SAP 认证在 Google Cloud 上使用的所有其他机器类型,最低要求 CPU 平台应符合 SAP 最低 CPU 要求。
    primary_static_ip 字符串 可选。为高可用性集群中的主虚拟机实例指定有效的静态 IP 地址。如果未指定,系统会自动为您的虚拟机实例生成 IP 地址。 例如 128.10.10.10

    此参数在 sap_hana_ha 模块 202306120959 或更高版本中可用。

    secondary_static_ip 字符串 可选。为高可用性集群中的辅助虚拟机实例指定有效的静态 IP 地址。如果未指定,系统会自动为您的虚拟机实例生成 IP 地址。 例如 128.11.11.11

    此参数在 sap_hana_ha 模块 202306120959 或更高版本中可用。

    primary_worker_static_ips 列表(字符串) 可选。为 SAP HANA 横向扩容高可用性系统的主实例中的工作器实例指定一组有效的静态 IP 地址。如果未指定此参数的值,系统会自动为每个工作器虚拟机实例生成一个 IP 地址。例如:[ "1.0.0.1", "2.3.3.4" ]

    静态 IP 地址按实例创建顺序分配。例如,如果您选择部署 3 个工作器实例,但仅为参数指定 2 个 IP 地址primary_worker_static_ips,则这些 IP 地址将分配给 Terraform 配置部署的前两个虚拟机实例。对于第三个工作器虚拟机实例,系统会自动生成 IP 地址。

    此参数在 sap_hana_ha 模块 202307270727 或更高版本中可用。

    secondary_worker_static_ips 列表(字符串) 可选。为 SAP HANA 横向扩容高可用性系统的辅助实例中的工作器实例指定一组有效的静态 IP 地址。如果未指定此参数的值,系统会自动为每个工作器虚拟机实例生成一个 IP 地址。 例如:[ "1.0.0.2", "2.3.3.5" ]

    静态 IP 地址按实例创建顺序分配。例如,如果您选择部署 3 个工作器实例,但仅为参数指定 2 个 IP 地址secondary_worker_static_ips,则这些 IP 地址将分配给 Terraform 配置部署的前两个虚拟机实例。对于第三个工作器虚拟机实例,系统会自动生成 IP 地址。

    此参数在 sap_hana_ha 模块 202307270727 或更高版本中可用。

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

    Terraform 会部署配置文件中定义的 Google Cloud 资源,然后脚本进行接管以配置操作系统并安装 SAP HANA。

  6. 在同一 manual_sap_hana_scaleout_ha.tf 文件中,更新 majority_maker 的参数值。下表介绍了这些参数。

    参数名 数据类型 说明
    project 字符串 指定要在其中部署此系统的 Google Cloud 项目的 ID。
    majority_maker_instance_name 字符串

    指定充当决胜者的 Compute Engine 虚拟机实例的名称。

    此参数在 sap_hana_ha 模块 202307270727 或更高版本中可用。

    majority_maker_instance_type 字符串 指定要用于决胜者实例的 Compute Engine 虚拟机 (VM) 的类型。例如,n1-highmem-32

    如果您需要自定义虚拟机类型,请指定一个预定义虚拟机类型,其中 vCPU 的数量最接近但仍大于所需的数量。部署完成后,修改 vCPU 数量和内存量

    此参数在 sap_hana_ha 模块 202307270727 或更高版本中可用。

    majority_maker_zone 字符串 指定要在其中部署决胜者虚拟机实例的可用区。此可用区必须与主要可用区和次要可用区位于同一区域。 例如 us-east1-d

    Google Cloud 建议将决胜者虚拟机实例部署在与主要和辅助 SAP HANA 系统不同的可用区。

    此参数在 sap_hana_ha 模块 202307270727 或更高版本中可用。

    majority_maker_linux_image 字符串 使用与上一步中相同的值,将完整映像路径指定为 "linux_image_project/linux_image"。例如 "rhel-sap-cloud/rhel-9-0-sap-v20230708"
    subnetwork 字符串 指定您在先前步骤中创建的子网的名称。如果您要部署到共享 VPC,请以 SHARED_VPC_PROJECT_ID/SUBNETWORK 形式指定该值。例如 myproject/network1
    service_account 字符串 可选。指定主机虚拟机以及主机虚拟机上运行的程序将要使用的用户管理的服务账号的电子邮件地址。例如 svc-acct-name@project-id.iam.gserviceaccount.com

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

    metadata_startup_script 字符串 请勿修改此参数。默认情况下,决胜者会下载最新的启动脚本,以准备用于 Pacemaker 集群的实例。

    为清楚起见,以下示例配置中的注释被省略。

  module "sap_hana_primary" {
    source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"

    project_id                     = "example-project-123456"
    zone                           = "us-west1-a"
    machine_type                   = "n1-highmem-32"
    subnetwork                     = "default"
    linux_image                    = "rhel-9-0-sap-v20230711"
    linux_image_project            = "rhel-sap-cloud"
    instance_name                  = "hana-ha-1"
    sap_hana_sid                   = "HA1"

    sap_hana_deployment_bucket      = "my-hana-bucket"
    sap_hana_sidadm_password_secret = "hana_sid_adm_pwd"
    sap_hana_system_password_secret = "hana_sys_pwd"
    sap_hana_scaleout_nodes         = 1
    sap_hana_shared_nfs             = "10.10.10.1:/hana_scaleout/hana_a/shared"
    sap_hana_backup_nfs             = "10.10.10.1:/hana_scaleout/hana_a/backup"

  }
  module "sap_hana_secondary" {
    source = "https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/sap_hana/sap_hana_module.zip"

    project_id                     = "example-project-123456"
    zone                           = "us-west1-b"
    machine_type                   = "n1-highmem-32"
    subnetwork                     = "default"
    linux_image                    = "rhel-9-0-sap-v20230711"
    linux_image_project            = "rhel-sap-cloud"
    instance_name                  = "hana-ha-2"
    sap_hana_sid                   = "HA1"

    sap_hana_deployment_bucket      = "my-hana-bucket"
    sap_hana_sidadm_password_secret = "hana_sid_adm_pwd"
    sap_hana_system_password_secret = "hana_sys_pwd"
    sap_hana_scaleout_nodes         = 1
    sap_hana_shared_nfs             = "10.10.10.2:/hana_scaleout/hana_b/shared"
    sap_hana_backup_nfs             = "10.10.10.2:/hana_scaleout/hana_b/backup"
  }

  resource "google_compute_instance" "majority_maker" {

    project =  "example-project-123456"

    # majority_maker_instance_name
    name         = "majority-maker"

    # majority_maker_instance_type
    machine_type = "n1-standard-8"

    # majority_maker_zone
    zone         = "us-west1-c"

    boot_disk {
      initialize_params {
        # majority_maker_linux_image
        image = "rhel-sap-cloud/rhel-9-0-sap-v20230711"
      }
    }

    network_interface {
      # network or subnetwork
      network = "default"
    }

      service_account {
      # service_account (Optional)
      # email  = svc-acct-name@project-id.iam.gserviceaccount.com.
      scopes = ["cloud-platform"]
    }

    # Do not edit
    metadata_startup_script = "curl -s https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_majoritymaker/startup.sh | bash -s https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_majoritymaker/startup.sh"

  }
  1. 初始化当前工作目录并下载适用于 Google Cloud 的 Terraform 提供程序插件和模块文件:

    terraform init

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

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

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

    terraform plan

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

  3. 应用执行计划:

    terraform apply

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

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

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

验证 HANA 高可用性系统的部署

查看日志

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

    转到 Cloud Logging

  2. 过滤日志:

    日志浏览器

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

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

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

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

    旧式日志查看器

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

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

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

      2. 打开 Cloud Shell。

        转到 Cloud Shell

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

        terraform destroy

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

      4. 重新运行部署。

检查虚拟机和 SAP HANA 安装的配置

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

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

  2. 切换到根用户。

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

    [root@example-ha-vm1 ~]# df -h
      Filesystem                        Size  Used Avail Use% Mounted on
      devtmpfs                          126G     0  126G   0% /dev
      tmpfs                             126G   54M  126G   1% /dev/shm
      tmpfs                             126G   25M  126G   1% /run
      tmpfs                             126G     0  126G   0% /sys/fs/cgroup
      /dev/sda2                          30G  5.4G   25G  18% /
      /dev/sda1                         200M  6.9M  193M   4% /boot/efi
      /dev/mapper/vg_hana-shared        251G   52G  200G  21% /hana/shared
      /dev/mapper/vg_hana-sap            32G  477M   32G   2% /usr/sap
      /dev/mapper/vg_hana-data          426G  9.8G  417G   3% /hana/data
      /dev/mapper/vg_hana-log           125G  7.0G  118G   6% /hana/log
      /dev/mapper/vg_hanabackup-backup  512G  9.3G  503G   2% /hanabackup
      tmpfs                              26G     0   26G   0% /run/user/900
      tmpfs                              26G     0   26G   0% /run/user/899
      tmpfs                              26G     0   26G   0% /run/user/1003

清理并重试部署

如果上述各部分中的任何部署验证步骤显示安装失败,则必须撤消部署并通过完成以下步骤重试:

  1. 解决所有错误以确保您的部署不会因同一原因再次失败。如需了解如何检查日志或解决配额相关错误,请参阅检查日志

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

    打开 Cloud Shell

  3. 转到包含用于此部署的 Terraform 配置文件的目录。

  4. 通过运行以下命令删除属于部署的所有资源:

    terraform destroy

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

  5. 按照本指南前面的说明重试部署。

验证 Google Cloud 的 Agent for SAP 的安装

部署所有实例并安装 SAP 系统后,验证 Google Cloud 的 Agent for SAP 是否正常运行。

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

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

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

  2. 运行以下命令:

    systemctl status google-cloud-sap-agent

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

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

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

验证 SAP Host Agent 正在接收指标

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

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

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

为 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 系统和 Pacemaker 集群期间半自动执行一些重复性任务,您可以使用 bash 脚本。在本指南中,此类 bash 脚本用于加快 SAP HANA 系统和 Pacemaker 集群的配置。这些脚本需要将所有已部署的虚拟机实例及其相应可用区的列表作为输入。

如需启用这种自动化功能,请创建一个名为 nodes.txt 的文件,其中包含采用以下格式的所有已部署虚拟机实例的详细信息:可用区名称、空格和虚拟机实例名称。本指南中使用了以下示例文件:

# cat nodes.txt
  us-west1-a hana-ha-vm-1
  us-west1-a hana-ha-vm-1w1
  us-west1-a hana-ha-vm-1w2
  us-west1-b hana-majoritymaker
  us-west1-c hana-ha-vm-2
  us-west1-c hana-ha-vm-2w1
  us-west1-c hana-ha-vm-2w2
 

设置无密码 SSH 访问

如需配置 Pacemaker 集群并同步 SAP HANA 安全存储 (SSFS) 密钥,所有节点(包括决胜实例)之间都需要无密码 SSH 访问权限。为了获得无密码 SSH 访问权限,您需要将 SSH 公钥添加到所有已部署实例的实例元数据中。

元数据的格式为 USERNAME: PUBLIC-KEY-VALUE

如需详细了解如何将 SSH 密钥添加到虚拟机,请参阅将 SSH 密钥添加到使用基于元数据的 SSH 密钥的虚拟机

手动步骤

  1. 对于主要和辅助系统中的每个实例以及决胜实例,收集用户 root 的公钥。

    gcloud compute ssh --quiet --zone ZONE_ID INSTANCE_NAME -- sudo cat /root/.ssh/id_rsa.pub
  2. 在密钥前面添加字符串 root:,并将密钥作为新行写入名为 public-ssh-keys.txt 的文件中,例如:

    root:ssh-rsa AAAAB3NzaC1JfuYnOI1vutCs= root@INSTANCE_NAME
  3. 收集所有 SSH 公钥后,将密钥作为元数据上传到所有实例:

    gcloud compute instances add-metadata --metadata-from-file ssh-keys=public-ssh-keys.txt --zone ZONE_ID INSTANCE_NAME

自动步骤

或者,如需自动为 nodes.txt 中列出的所有实例设置无密码 SSH 访问权限,请在 Google Cloud 控制台中执行以下步骤:

  1. 创建一个列表,其中包含所有已部署实例中的公钥:

    while read -u10 ZONE HOST ;  do echo "Collecting public-key from $HOST"; { echo 'root:'; gcloud compute ssh --quiet --zone $ZONE $HOST --tunnel-through-iap -- sudo cat /root/.ssh/id_rsa.pub; } | tr -ds '\n' " " >> public-ssh-keys.txt; done 10< nodes.txt

  2. 将 SSH 公钥作为元数据条目分配给所有实例:

    while read -u10 ZONE HOST ;  do echo "Adding public keys to $HOST"; gcloud compute instances add-metadata --metadata-from-file ssh-keys=public-ssh-keys.txt --zone $ZONE $HOST; done 10< nodes.txt 

停用 SAP HANA 自动启动

手动步骤

对于集群中的每个 SAP HANA 实例,请确保已停用 SAP HANA 自动启动。对于故障切换,Pacemaker 将负责管理集群中 SAP HANA 实例的启动和停止。

  1. 在每个主机上,以 SID_LCadm 身份停止 SAP HANA:

    > HDB stop
  2. 在每个主机上,使用编辑器(例如 vi)打开 SAP HANA 配置文件:

    vi /usr/sap/SID/SYS/profile/SID_HDBINST_NUM_HOST_NAME
  3. Autostart 属性设置为 0

    Autostart=0
  4. 保存该配置文件。

  5. 在每个主机上,以 SID_LCadm 身份启动 SAP HANA:

    > HDB start

自动步骤

或者,如需为 nodes.txt 中列出的所有实例停用 SAP HANA 自动启动,请从 Google Cloud 控制台运行以下脚本:

while read -u10 ZONE HOST ;
 do gcloud compute ssh --verbosity=none --zone $ZONE $HOST -- "echo Setting Autostart=0 on \$HOSTNAME;
 sudo sed -i 's/Autostart=1/Autostart=0/g' /usr/sap/SID/SYS/profile/SID_HDBINST_NUM_\$HOSTNAME";
 done 10< nodes.txt
 

启用 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)

自动步骤

如需自动执行此过程,请使用 nodes.txt 和 Google Cloud 控制台中的以下脚本:

  1. 使用 IP 地址和主机名列表生成 hosts.txt 文件:

    while read -u10 ZONE HOST ; do gcloud compute instances list --filter="name=( 'NAME' $HOST )" --format="csv[separator=' ',no-heading](networkInterfaces[0].networkIP,name)" >> hosts.txt; done 10< nodes.txt
  2. 验证您的 hosts.txt 文件是否类似于以下示例:

    10.138.0.1 rhel-hana-primary
    10.138.0.2 rhel-hana-primaryw1
    10.138.0.3 rhel-hana-secondary
    10.138.0.4 rhel-hana-secondaryw1
    10.138.0.5 rhel-sap-mm
    
  3. 在集群中的所有主机(包括决胜主机)上,更新 /etc/hosts 文件,以包含 Pacemaker 集群中所有实例的主机名和内部 IP 地址。

    while read -u10 ZONE HOST ;  do gcloud compute ssh --tunnel-through-iap --quiet $HOST --zone $ZONE -- "sudo tee -a /etc/hosts" < hosts.txt; done 10< nodes.txt

备份数据库

为数据库创建备份,以启动 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. 在辅助主机上:

    1. SID_LCadm 身份停止 SAP HANA:

      > sapcontrol -nr INST_NUM -function StopSystem
    2. 以根用户的身份对现有 SSFS 数据和密钥文件进行归档:

      # cd /usr/sap/SID/SYS/global/security/rsecssfs/
      # mv data/SSFS_SID.DAT data/SSFS_SID.DAT-ARC
      # mv key/SSFS_SID.KEY key/SSFS_SID.KEY-ARC
    3. 复制主要主机中的数据文件:

      # scp -o StrictHostKeyChecking=no \
      PRIMARY_HOST_NAME:/usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT \
      /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
    4. 复制主要主机中的密钥文件:

      # scp -o StrictHostKeyChecking=no \
      PRIMARY_HOST_NAME:/usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY \
      /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    5. 更新文件的所有权:

      # chown SID_LCadm:sapsys /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
      # chown SID_LCadm:sapsys /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    6. 更新文件的权限:

      # chmod 644 /usr/sap/SID/SYS/global/security/rsecssfs/data/SSFS_SID.DAT
      # chmod 640 /usr/sap/SID/SYS/global/security/rsecssfs/key/SSFS_SID.KEY
    7. SID_LCadm 身份将辅助 SAP HANA 系统注册到 SAP HANA 系统复制:

      > hdbnsutil -sr_register --remoteHost=PRIMARY_HOST_NAME --remoteInstance=INST_NUM \
      --replicationMode=syncmem --operationMode=logreplay --name=SECONDARY_HOST_NAME
    8. SID_LCadm 身份启动 SAP HANA:

      > sapcontrol -nr INST_NUM -function StartSystem

验证系统复制

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

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

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

  • Secondary Active StatusYES
  • Replication StatusACTIVE

此外,overall system replication status 将显示 ACTIVE

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

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

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

  1. SID_LCadm 身份停止 SAP HANA:

    > sapcontrol -nr 00 -function StopSystem

  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-ScaleOut/
    execution_order = 1
    
    [trace]
    ha_dr_saphanasr = info
    

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

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

    SID_LC 替换为小写字母的 SID。

    Cmnd_Alias SOK = /usr/sbin/crm_attribute -n hana_SID_LC_glob_srHook -v SOK -t crm_config -s SAPHanaSR
    Cmnd_Alias SFAIL = /usr/sbin/crm_attribute -n hana_SID_LC_glob_srHook -v SFAIL -t crm_config -s SAPHanaSR
    SID_LCadm ALL=(ALL) NOPASSWD: SOK, SFAIL
    Defaults!SOK, SFAIL !requiretty

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

    #includedir /etc/sudoers.d

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

  6. SID_LCadm 身份启动 SAP HANA:

    > sapcontrol -nr 00 -function StartSystem

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

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

配置 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 订阅):

手动步骤

在所有主机上完成以下步骤。Google 提供的 RHEL-for-SAP 映像中已安装一些软件包,但需要额外执行一些修改。

  1. 以根用户身份移除映像中预安装的 SAP HANA 纵向扩容资源代理:

    # yum -y remove resource-agents-sap-hana
  2. 安装 Pacemaker 和缺失的资源代理:

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

  3. 将软件包更新为最新版本:

    # yum update -y

  4. 设置 hacluster 用户的密码,该用户是作为软件包的一部分创建的:

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

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

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

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  8. 检查 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-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Jun 13 21:17:05 hana-ha-1 systemd[1]: Started PCS GUI and remote configuration interface.

自动步骤

如需自动执行此过程,您可以使用 nodes.txt 和 Google Cloud 控制台中的以下脚本。

在系统提示时,输入要在安装 Pacemaker 资源代理期间创建的 hacluster 用户要使用的密码。

echo "Set password for hacluster user:"; read -r HA_PASSWD; while read -u10 HOST ;  do gcloud compute ssh --tunnel-through-iap --quiet --zone $HOST -- "sudo yum -y remove resource-agents-sap-hana; sudo yum -y install pcs pacemaker fence-agents-gce resource-agents-sap-hana-scaleout resource-agents-gcp; sudo yum update -y; sudo firewall-cmd --permanent --add-service=high-availability; sudo firewall-cmd --reload; sudo systemctl start pcsd.service; sudo systemctl enable pcsd.service; yes $HA_PASSWD | sudo passwd hacluster"; done 10< nodes.txt

更新 /etc/hosts 文件

在集群中的所有主机(包括决胜主机)上,更新 /etc/hosts 文件,以包含 Pacemaker 集群中所有实例的主机名和内部 IP 地址。

/etc/hosts 文件的输出应类似于以下示例:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1                localhost localhost.localdomain localhost6 localhost6.localdomain6
10.138.0.1 rhel-hana-primary.us-west1-a.c.project-name.internal rhel-hana-primary # Added by Google
169.254.169.254 metadata.google.internal # Added by Google
10.138.0.1 rhel-hana-primary
10.138.0.2 rhel-hana-primaryw1
10.138.0.3 rhel-hana-secondary
10.138.0.4 rhel-hana-secondaryw1
10.138.0.5 rhel-sap-mm

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

创建集群

  1. 在主要主实例主机上,以根用户身份为 hacluster 用户授权。请务必在此命令中添加集群的各主机,它们应属于集群的一部分。

    RHEL 8.0 及更高版本

    pcs host auth primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name
    

    RHEL 7.6 及更高版本

    pcs cluster auth primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name
    
  2. 在系统提示时,输入您在上一部分中为 hacluster 用户设置的 hacluster 用户名和密码。

  3. 将集群设置为维护模式。

    pcs property set maintenance-mode=true
  4. 生成并同步 corosync 配置。

    RHEL 8.0 及更高版本

    pcs cluster setup scale_out_hsr primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name

    RHEL 7.6 及更高版本

    pcs cluster setup --start --name hanascaleoutsr primary-master-name primary-worker-name(s) secondary-master-name secondary-worker-name(s) majority-maker-name

修改 corosync.conf 默认设置

  1. 使用您选择的编辑器打开 /etc/corosync/corosync.conf 文件。

  2. 移除 consensus 参数。

  3. 根据 Google Cloud 的建议修改其余参数。

    下表显示了 Google Cloud 推荐值的 totem 参数,以及更改值的影响。如需了解这些参数的默认值(可能因 Linux 发行版而异),请参阅 Linux 发行版的文档。
    参数 推荐值 更改值的影响
    secauth off 停用所有 totem 消息的身份验证和加密。
    join 60 (ms) 增加节点在成员资格协议中等待 join 消息的时间。
    max_messages 20 增加在接收令牌后节点可能发送的消息数上限。
    token 20000 (ms)

    增加在节点声明令牌丢失,假定节点故障,并开始执行操作之前节点等待 totem 协议令牌的时长。

    增加 token 参数的值可让集群对瞬时基础设施事件(例如实时迁移)的容忍度更高。但是,这也可能会使集群需要更长的时间来检测节点故障并从节点故障中恢复。

    token 参数的值还决定了 consensus 参数的默认值,后者用于控制节点在尝试重新建立配置成员资格前等待达成共识的时间。

    consensus 不适用

    指定在开始新一轮成员资格配置之前等待达成共识的时长(以毫秒为单位)。

    我们建议您省略此参数。如果未指定 consensus 参数,Corosync 会将其值设置为 token 参数的值的 1.2 倍。如果您使用 token 参数的建议值 20000,则 consesus 参数会设置为值 24000

    但是,如果您明确为 consensus 指定值,请确保该值为 240001.2*token,以较大者为准。

    token_retransmits_before_loss_const 10 增加节点在由于收件人节点发生故障和执行操作前令牌重新递送的尝试次数。
    transport
    • 对于 SLES:udpu
    • 对于 RHEL 8 或更高版本:knet
    • 对于 RHEL 7:udpu
    指定 corosync 使用的传输机制。
  4. 从包含已修改的 corosync.conf 文件的主机上,在集群之间同步 corosync 配置:

    RHEL 8 及更高版本

    # pcs cluster sync corosync

    RHEL 7

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

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

    # corosync-cmapctl

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

自动步骤

或者,如需为 nodes.txt 中列出的所有实例自动执行此过程,请从 Google Cloud 控制台运行以下脚本:

while read -u10 HOST;  do gcloud compute ssh --tunnel-through-iap --quiet --zone $HOST   --  "sudo mkdir -p /etc/systemd/system/corosync.service.d/; sudo echo -e '[Service]\nExecStartPre=/bin/sleep 60' | sudo tee -a /etc/systemd/system/corosync.service.d/override.conf; sudo systemctl daemon-reload"; done 10< nodes.txt

设置防护功能

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

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

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

手动步骤

  1. 在主要主机上,以根用户身份为所有主机创建防护设备,包括决胜主机:

    pcs stonith create STONITH-host-name fence_gce \
    port=host-name \
    zone=host-zone \
    project=project-id \
    pcmk_host_list=host-name pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \
    op monitor interval="300s" timeout="120s" \
    op start interval="0" timeout="60s"
  2. 设置防护设备的位置限制条件:

    pcs constraint location STONITH-host-name avoids host-name

  3. host-namehost-zone 变量输入相应值,对主要和次要集群上的所有其他主机以及决胜主机重复上述两个步骤。

自动步骤

如需自动执行此过程,您必须使用 nodes.txt 文件和 Google Cloud 控制台中的以下脚本:

while read -u10 ZONE HOST; do gcloud compute ssh $HOST --tunnel-through-iap --quiet --zone $ZONE -- "sudo pcs stonith create STONITH-$HOST fence_gce project=project-id port=$HOST zone=$ZONE pcmk_host_list=$HOST pcmk_reboot_timeout=300 pcmk_monitor_retries=4 op monitor interval=300s timeout=120s op start interval=0 timeout=60s && sudo pcs constraint location STONITH-$HOST avoids $HOST"; done 10< nodes.txt

设置集群默认设置

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

  1. 以根用户身份从任何主机设置资源默认值:

    RHEL 8.0 及更高版本

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

    RHEL 7.6 及更高版本

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

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

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

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

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

    RHEL 8.0 及更高版本

    # pcs resource op defaults update timeout=600s

    RHEL 7.6 及更高版本

    # pcs resource op defaults timeout=600s

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

  3. 如下设置集群属性:

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

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

创建 SAPHanaTopology 资源

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

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

    RHEL 8.0 及更高版本

    # pcs resource create rsc_SAPHanaTopology_SID_HDBinstNr SAPHanaTopology SID=SID \
    InstanceNumber=inst_num \
    op methods interval=0s timeout=5 \
    op monitor interval=10 timeout=600 \
    clone meta clone-node-max=1 interleave=true

    RHEL 7.6 及更高版本

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

    RHEL 8.0 及更高版本

    # pcs resource config rsc_SAPHanaTopology_SID_HDBinstNr-clone

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

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

    RHEL 7.6 及更高版本

    # pcs resource show rsc_SAPHanaTopology_SID_HDBinstNr-clone

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

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

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

创建 SAPHanaController 资源

SAPHanaController 资源代理负责管理为 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. 在任一主机上,以根用户身份创建 SAPHanaController 资源:

    RHEL 8.0 及更高版本

    # pcs resource create rsc_SAPHana_SID_HDBinstNr SAPHanaController SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op demote interval=0s timeout=320 \
    op methods interval=0s timeout=5 \
    op monitor interval=59 \
    role="Master" timeout=700 \
    op monitor interval=61 \
    role="Slave" timeout=700 \
    op promote interval=0 timeout=3600 \
    op start interval=0 timeout=3600 \
    op stop interval=0 timeout=3600e
    # pcs resource promotable rsc_SAPHana_SID_HDBinstNr meta master-max="1" clone-node-max=1 interleave=true

    RHEL 7.6 及更高版本

    # pcs resource create rsc_SAPHana_SID_HDBinstNr SAPHanaController SID=SID \
    InstanceNumber=inst_num \
    PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true \
    op start interval=0 timeout=3600 \
    op stop interval=0 timeout=3600 \
    op promote interval=0 timeout=3600 \
    op monitor interval=60 \
    role="Master" timeout=700 \
    op monitor interval=61 \
    role="Slave" timeout=700
    # pcs resource master msl_rsc_SAPHana_SID_HDBinstNr rsc_SAPHana_SID_HDBinstNr master-max="1" clone-node-max=1 interleave=true
  2. 检查生成的资源属性:

    RHEL 8.0 及更高版本

    # pcs resource config rsc_SAPHana_SID_HDBinstNr-clone

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

    Resource: SAPHana_HA1_00 (class=ocf provider=heartbeat type=SAPHanaController)
    Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 PREFER_SITE_TAKEOVER=true SID=HA1
    Operations: demote interval=0s timeout=320 (SAPHana_HA1_00-demote-interval-0s)
          methods interval=0s timeout=5 (SAPHana_HA1_00-methods-interval-0s)
          monitor interval=59 role=Master timeout=700 (SAPHana_HA1_00-monitor-interval-59)
          promote interval=0 timeout=3600 (SAPHana_HA1_00-promote-interval-0)
          reload interval=0s timeout=5 (SAPHana_HA1_00-reload-interval-0s)
          start interval=0 timeout=3600 (SAPHana_HA1_00-start-interval-0)
          stop interval=0 timeout=3600 (SAPHana_HA1_00-stop-interval-0)
          monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_00-monitor-interval-61)

    RHEL 7.6 及更高版本

    # pcs resource show msl_rsc_SAPHana_SID_HDBinstNr

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

    Master: msl_rsc_SAPHana_HA1_HDB00
    Meta Attrs: clone-node-max=1 interleave=true master-max=1
    Resource: rsc_SAPHana_HA1_HDB00 (class=ocf provider=heartbeat type=SAPHanaController)
    Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 PREFER_SITE_TAKEOVER=true SID=HA1
    Operations: demote interval=0s timeout=320 (rsc_SAPHana_HA1_HDB00-demote-interval-0s)
           methods interval=0s timeout=5 (rsc_SAPHana_HA1_HDB00-methods-interval-0s)
           monitor interval=60 role=Master timeout=700 (rsc_SAPHana_HA1_HDB00-monitor-interval-60)
           monitor interval=61 role=Slave timeout=700 (rsc_SAPHana_HA1_HDB00-monitor-interval-61)
           promote interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-promote-interval-0)
           start interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-start-interval-0)
           stop interval=0 timeout=3600 (rsc_SAPHana_HA1_HDB00-stop-interval-0)

创建虚拟 IP 地址资源

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

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

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

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

创建限制条件

您可以创建限制条件来定义哪些服务需要先启动,以及哪些服务需要在同一主机上一起运行。

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

    RHEL 8.0 及更高版本

    # pcs constraint order start rsc_SAPHanaTopology_SID_HDBinstNr-clone then start rsc_SAPHana_SID_HDBinstNr-clone

    RHEL 7.6

    # pcs constraint order rsc_SAPHanaTopology_SID_HDBinstNr-clone then rsc_SAPHana_SID_HDBinstNr-master

  2. 配置决胜者以避免在集群环境中担任活跃角色:

    RHEL 8.0 及更高版本

    # pcs constraint location rsc_SAPHana_SID_HDBinstNr-clone avoids majority-maker-name
    
    # pcs constraint location rsc_SAPHanaTopology_SID_HDBinstNr-clone avoids majoritymaker

    RHEL 7.6

    # pcs constraint location msl_rsc_SAPHana_SID_HDBinstNr avoids majoritymaker
    
    # pcs constraint location rsc_SAPHanaTopology_SID_HDBinstNr-clone avoids majoritymaker
  3. 检查限制条件:

    # pcs constraint

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

    Location Constraints:
    Resource: STONITH-hana-ha-1
      Disabled on: hana-ha-1 (score:-INFINITY)
    Resource: STONITH-hana-ha-1w1
      Disabled on: hana-ha-1w1 (score:-INFINITY)
    Resource: STONITH-hana-ha-2
      Disabled on: hana-ha-2 (score:-INFINITY)
    Resource: STONITH-hana-ha-2w1
      Disabled on: hana-ha-2w1 (score:-INFINITY)
    Resource: STONITH-majority-maker
      Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHanaTopology_HA1_HDB00-clone
      Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHana_HA1_HDB00-master
      Disabled on: majority-maker (score:-INFINITY)
    Ordering Constraints:
      start rsc_SAPHanaTopology_HA1_HDB00-clone then start rsc_SAPHana_HA1_HDB00-master (kind:Mandatory)

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

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

安装侦听器

负载均衡器在每个主机的健康检查端口上使用侦听器来确定 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 hc_SID_HDBinstNr service:haproxy op monitor interval=10s timeout=20s
  2. 将 VIP 和健康检查资源组合在一起:

    # pcs resource group add rsc-group-name hc_SID_HDBinstNr rsc_ip_SAPHANA_SID_HDBinstNr
  3. 创建一个限制条件,以使实例组与主 SAP HANA 实例位于同一节点上。

    RHEL 8.0 及更高版本

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

    RHEL 7.6 及更高版本

    # pcs constraint colocation add rsc-group-name with master msl_rsc_SAPHana_SID_HDBinstNr
  4. 创建顺序限制条件,以仅在提升 HANA 后启动实例组:

    # pcs constraint order promote rsc_SAPHana_SID_HDBinstNr-clone then start rsc-group-name

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

    # pcs constraint
    
    Location Constraints:
    Resource: STONITH-hana-ha-1
     Disabled on: hana-ha-1 (score:-INFINITY)
    Resource: STONITH-hana-ha-1w1
     Disabled on: hana-ha-1w1 (score:-INFINITY)
    Resource: STONITH-hana-ha-2
     Disabled on: hana-ha-2 (score:-INFINITY)
    Resource: STONITH-hana-ha-2w1
     Disabled on: hana-ha-2w1 (score:-INFINITY)
    Resource: STONITH-majority-maker
     Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHanaTopology_HA1_HDB00-clone
     Disabled on: majority-maker (score:-INFINITY)
    Resource: rsc_SAPHana_HA1_HDB00-master
     Disabled on: majority-maker (score:-INFINITY)
    Ordering Constraints:
     start rsc_SAPHanaTopology_HA1_HDB00-clone then start rsc_SAPHana_HA1_HDB00-master (kind:Mandatory)
     promote rsc_SAPHana_HA1_HDB00-clone then start g-primary (kind:Mandatory) (id:order-rsc_SAPHana_HA1_HDB00-clone-g-primary-mandatory)
    Colocation Constraints:
     g-primary with rsc_SAPHana_HA1_HDB00-master (score:INFINITY) (rsc-role:Started) (with-rsc-role:Master)
    Ticket Constraints:

完成设置

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

    pcs property set maintenance-mode=false
  2. 启动资源后,请检查节点属性以查看节点上 SAP HANA 数据库的当前状态:

    # crm_mon -A1

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

    RHEL 8.0 及更高版本

    Cluster Summary:
    Stack: corosync
    Current DC: hana-ha-2w1 (version 2.0.5-9.el8_4.7-ba59be7122) - partition with quorum
    Last updated: Wed Oct 11 17:59:51 2023
    Last change:  Wed Oct 11 17:59:48 2023 by hacluster via crmd on hana-ha-2
    5 nodes configured
    17 resource instances configured
    
    Node List:
    Online: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 dru-somm ]
    
    Active Resources:
    STONITH-hana-ha-1     (stonith:fence_gce):     Started hana-ha-2
    STONITH-hana-ha-1w1   (stonith:fence_gce):     Started hana-ha-1
    STONITH-hana-ha-2     (stonith:fence_gce):     Started hana-ha-2w1
    STONITH-hana-ha-2w1   (stonith:fence_gce):     Started dru-somm
    STONITH-dru-somm    (stonith:fence_gce):     Started hana-ha-1
    Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]:
     Started: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00]-(promotable):
     Slaves: [ hana-ha-1w1 hana-ha-2w1 ]
    Resource Group: g-primary:
     healthcheck_HA1   (service:haproxy):       Started hana-ha-1
     ip_SAPHANA_HA1_00 (ocf::heartbeat:IPaddr2):        Started hana-ha-1
    
    Node Attributes:
    Node: hana-ha-1:
     hana_ha1_clone_state              : PROMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_roles                    : master1:master:worker:master
     hana_ha1_site                     : hana-ha-1
     hana_ha1_sra                      : -
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-1
     master-SAPHana_HA1_00             : 5
    Node: hana-ha-1w1:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_roles                    : slave:slave:worker:slave
     hana_ha1_site                     : hana-ha-1
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-1w1
     master-SAPHana_HA1_00             : -INFINITY
    Node: hana-ha-2:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-1w1
     hana_ha1_roles                    : master1:master:worker:master
     hana_ha1_site                     : hana-ha-2
     hana_ha1_sra                      : -
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-2
     master-SAPHana_HA1_00             : 100
    Node: hana-ha-2w1:
     hana_ha1_clone_state              : DEMOTED
     hana_ha1_gra                      : 2.0
     hana_ha1_remoteHost               : hana-ha-1w1
     hana_ha1_roles                    : slave:slave:worker:slave
     hana_ha1_site                     : hana-ha-2
     hana_ha1_srmode                   : syncmem
     hana_ha1_vhost                    : hana-ha-2w1
     master-SAPHana_HA1_00             : -12200
    Node: dru-somm:
     hana_ha1_remoteHost               : hana-ha-2w1
     hana_ha1_srmode                   : syncmem

    RHEL 7.6 及更高版本

    Stack: corosync
    Current DC: majority-maker (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
    Last updated: Wed Oct 11 17:58:07 2023
    Last change: Wed Oct 11 17:57:57 2023 by hacluster via crmd on hana-ha-2w1
    
    5 nodes configured
    17 resource instances configured
    
    Online: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 majority-maker ]
    
    Active resources:
    
    STONITH-hana-ha-1 (stonith:fence_gce):    Started hana-ha-1w1
    STONITH-hana-ha-1w1       (stonith:fence_gce):    Started hana-ha-2
    STONITH-hana-ha-2 (stonith:fence_gce):    Started hana-ha-1
    STONITH-hana-ha-2w1       (stonith:fence_gce):    Started majority-maker
    STONITH-majority-maker (stonith:fence_gce):    Started hana-ha-1w1
    Master/Slave Set: msl_rsc_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00]
     rsc_SAPHana_HA1_HDB00      (ocf::heartbeat:SAPHanaController):     Master hana-ha-1 (Monitoring)
     Slaves: [ hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Clone Set: rsc_SAPHanaTopology_HA1_HDB00-clone [rsc_SAPHanaTopology_HA1_HDB00]
     Started: [ hana-ha-1 hana-ha-1w1 hana-ha-2 hana-ha-2w1 ]
    Resource Group: g-primary
     hc_HA1_HDB00       (service:haproxy):      Started hana-ha-1
     rsc_ip_SAPHANA_HA1_HDB00   (ocf::heartbeat:IPaddr2):       Started hana-ha-1
    
    Node Attributes:
    Node hana-ha-1:
      hana_ha1_clone_state              : PROMOTED
      hana_ha1_remoteHost               : hana-ha-2
      hana_ha1_roles                    : master1:master:worker:master
      hana_ha1_site                     : hana-ha-1
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-1
      master-rsc_SAPHana_HA1_HDB00      : 150
    Node hana-ha-1w1:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-2w1
      hana_ha1_roles                    : slave:slave:worker:slave
      hana_ha1_site                     : hana-ha-1
      hana_ha1_srmode                   : syncmem
      hana_ha1_version                  : 2.00.052.00.1599235305
      hana_ha1_vhost                    : hana-ha-1w1
      master-rsc_SAPHana_HA1_HDB00      : -10000
    Node hana-ha-2:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-2w1
      hana_ha1_roles                    : master1:master:worker:master
      hana_ha1_site                     : hana-ha-2
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-2
      master-rsc_SAPHana_HA1_HDB00      : 100
    Node hana-ha-2w1:
      hana_ha1_clone_state              : DEMOTED
      hana_ha1_remoteHost               : hana-ha-1
      hana_ha1_roles                    : slave:slave:worker:slave
      hana_ha1_site                     : hana-ha-2
      hana_ha1_srmode                   : syncmem
      hana_ha1_vhost                    : hana-ha-2w1
      master-rsc_SAPHana_HA1_HDB00      : -12200
    Node majority-maker:
      hana_ha1_srmode                   : syncmem
  3. 如果有失败的集群资源,您可能需要运行下一个命令:

    pcs resource cleanup

测试故障切换

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

在测试前备份系统。

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

  • 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 hana-ha-vm-1w1 hana-ha-vm-2w1]
    
    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
    STONITH-hana-ha-vm-1w1   (stonith:fence_gce):    Started hana-ha-vm-2w1
    STONITH-hana-ha-vm-1w1   (stonith:fence_gce):    Started hana-ha-vm-mm
    STONITH-hana-ha-vm-mm   (stonith:fence_gce):    Started hana-ha-vm-1w1
    Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22]
        Started: [ hana-ha-vm-1 hana-ha-vm-2 hana-ha-vm-1w1 hana-ha-vm-2w1
        Stopped: [ hana-ha-vm-mm ] ]
    Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22]
        Masters: [ hana-ha-vm-2 ]
        Slaves: [ hana-ha-vm-1 hana-ha-vm-1w1 hana-ha-vm-2w1
        Stopped: [ hana-ha-vm-mm ] ]
    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

问题排查

如需排查 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 基础架构问题,则将工单转移到 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 网络接口上的总体网络吞吐量,而不会影响网络延迟时间。

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

后续步骤

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