本指南介绍如何为 SAP NetWeaver 系统部署和配置性能优化的 Red Hat Enterprise Linux (RHEL) 高可用性 (HA) 集群。
本指南包含以下步骤:- 配置内部直通式网络负载均衡器以在发生故障时重新路由流量
- 在 RHEL 上配置 Pacemaker 集群,以在故障切换期间管理 SAP 系统和其他资源
本指南还包括配置 SAP NetWeaver 系统以实现高可用性的步骤,但请参阅 SAP 文档来了解权威说明。
如需了解如何为 SAP NetWeaver 部署 Compute Engine 虚拟机,请参阅您的操作系统对应的 SAP NetWeaver 部署指南。
如需在 SUSE Linux Enterprise Server (SLES) 上为 SAP NetWeaver 配置高可用性集群,请参阅针对 SLES 上的 SAP NetWeaver 的高可用性集群手动配置指南。
本指南适用于熟悉 SAP NetWeaver 的 Linux 高可用性配置的 SAP NetWeaver 高级用户。
本指南部署的系统
按照本指南,您将部署两个 SAP NetWeaver 实例并将在 RHEL 上设置高可用性集群。您需要在同一区域内不同可用区中的 Compute Engine 虚拟机上部署每个 SAP NetWeaver 实例。本指南未介绍底层数据库的高可用性安装。
部署的集群包括以下功能和特性:
- 两个主机虚拟机,一个用于活跃 ASCS 实例,另一个用于 ENSA2 Enqueue Replicator 或 ENSA1 Enqueue Replication Server (ENSA1) 的活跃实例。ENSA2 和 ENSA1 实例均称为 ERS。
- Pacemaker 高可用性集群资源管理器。
- STONITH 防护机制。
- 自动重启失败的实例,将其用作新的辅助实例。
如需使用 Terraform 自动部署 SAP NetWeaver 高可用性系统,请参阅 Terraform:RHEL 上的 SAP NetWeaver 的高可用性集群配置指南。
前提条件
在创建 SAP NetWeaver 高用性集群之前,请确保满足以下前提条件:
- 您已阅读 SAP NetWeaver 规划指南和 SAP NetWeaver on Google Cloud 的高可用性规划指南。
- 您或您的组织已有一个 Google Cloud 账号,并且您已为 SAP NetWeaver 部署创建了一个项目。如需了解如何创建 Google Cloud 账号和项目,请参阅适用于 Linux 的 SAP NetWeaver 部署指南中的创建项目。
- 如果您需要 SAP 工作负载根据数据驻留、访问权限控制、支持人员或监管要求运行,则必须创建所需的 Assured Workloads 文件夹。如需了解详情,请参阅 SAP on Google Cloud 的合规性和主权控制。
如果您使用的是 VPC 内部 DNS,则项目元数据中
vmDnsSetting
变量的值必须为GlobalOnly
或ZonalPreferred
,才能支持跨可用区解析节点名称。vmDnsSetting
的默认设置为ZonalOnly
。如需了解详情,请参阅以下主题:您已使用 NFS 共享文件存储解决方案(如 Filestore Enterprise)设置了文件共享。
如果在项目元数据中启用了 OS Login,则需要暂时停用 OS Login,直到部署完成。出于部署目的,此过程会在实例元数据中配置 SSH 密钥。启用 OS Login 后,基于元数据的 SSH 密钥配置会停用,并且此部署将失败。部署完成后,您可以再次启用 OS Login。
如需了解详情,请参阅以下主题:
RHEL 的相关信息
除非 Google Cloud 环境另有要求,否则本指南中的信息与 Red Hat 和 SAP 提供的以下相关指南一致:
- 在 RHEL 7.5+ 和 RHEL 8 中使用独立资源配置 SAP NetWeaver ASCS/ERS ENSA1
- 在 Pacemaker 中使用 Standalone Enqueue Server 2 (ENSA2) 配置 SAP S/4HANA ASCS/ERS
- SAP 说明 2002167 - Red Hat Enterprise Linux 7.x:安装和升级
- SAP 说明 2772999 - Red Hat Enterprise Linux 8.x:安装和配置
- SAP 说明 3108316 - Red Hat Enterprise Linux 9.x:安装和配置
- SAP 说明 2641322 - 使用 SAP 的 Red Hat HA 解决方案时安装 ENSA2 并从 ENSA1 更新为 ENSA2
创建网络
出于安全考虑,建议您创建一个新的网络。您可以通过添加防火墙规则或使用其他访问权限控制方法来控制哪些人有权访问该网络。
如果您的项目具有默认 VPC 网络,请勿使用。 请创建自己的 VPC 网络,以保证只有您明确创建的防火墙规则在起作用。
在部署期间,虚拟机实例通常需要访问互联网来下载 Google Cloud's Agent for SAP。如果您使用的是由 Google Cloud 提供的某一经 SAP 认证的 Linux 映像,那么虚拟机实例还需要访问互联网来注册许可以及访问操作系统供应商代码库。具有 NAT 网关和虚拟机网络标记的配置支持这种访问,即使目标虚拟机没有外部 IP 地址,也是如此。
如需设置网络,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
- 点击创建 VPC 网络。
- 输入网络的名称。
名称必须遵循命名惯例。VPC 网络使用 Compute Engine 命名惯例。
- 对于子网创建模式,选择自定义。
- 在新子网部分,为子网指定以下配置参数:
- 输入子网的名称。
- 对于区域,请选择您要在其中创建子网的 Compute Engine 区域。
- 对于 IP 栈类型,请选择 IPv4(单栈),然后输入 CIDR 格式的 IP 地址范围,例如
10.1.0.0/24
。这是子网的主要 IPv4 地址范围。如果您计划添加多个子网,请为网络中的每个子网分配互不重叠的 CIDR IP 地址范围。请注意,每个子网及其内部 IP 地址范围都映射到一个区域。
- 点击完成。
- 如需添加更多子网,请点击添加子网,然后重复上述步骤。您可以在创建网络后向网络添加更多子网。
- 点击创建。
gcloud
- 转至 Cloud Shell。
- 如需在自定义子网模式下创建新网络,请运行以下命令:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
将
NETWORK_NAME
替换为新网络的名称。名称必须遵循命名惯例。VPC 网络使用 Compute Engine 命名惯例。指定
--subnet-mode custom
可避免使用默认的自动模式,该模式会自动在每个 Compute Engine 区域创建一个子网。如需了解详情,请参阅子网创建模式。 - 创建一个子网,并指定区域和 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 地址范围均映射到一个区域。
- (可选)重复上述步骤并添加更多子网。
设置 NAT 网关
如果您需要创建一个或多个没有公共 IP 地址的虚拟机,则需要使用网络地址转换 (NAT) 以使虚拟机能够访问互联网。使用 Cloud NAT,这是 Google Cloud 提供的一项软件定义的托管式服务,可让虚拟机将出站数据包发送到互联网,并接收任何对应的已建立入站响应数据包。或者,您可以将单独的虚拟机设置为 NAT 网关。
如需为项目创建 Cloud NAT 实例,请参阅使用 Cloud NAT。
为项目配置 Cloud NAT 后,虚拟机实例可以在没有公共 IP 地址的情况下安全地访问互联网。
添加防火墙规则
默认情况下,系统会屏蔽从 Google Cloud 网络外部传入的连接。如需允许传入的连接,请为您的虚拟机设置防火墙规则。 这些防火墙规则仅适用于新传入虚拟机的连接。在与虚拟机建立连接后,防火墙会允许通过此连接的双向流量。
通过创建防火墙规则,您可以允许对指定端口进行访问,也可以允许同一子网中各虚拟机之间互相访问。
如要允许以下访问,请创建防火墙规则:
- 访问 SAP NetWeaver 使用的默认端口,具体请参阅所有 SAP 产品的 TCP/IP 端口。
- 从您的计算机或公司网络环境连接到 Compute Engine 虚拟机实例。如果您不确定使用哪个 IP 地址,请与您公司的网络管理员联系。
- 3 层式、横向扩缩或高可用性配置中的虚拟机之间的通信。例如,如果您要部署 3 层式系统,则子网中应至少有 2 个虚拟机:一个用于 SAP NetWeaver,另一个用于数据库服务器。为使两个虚拟机之间得以相互通信,您必须创建防火墙规则以允许来自子网的流量。
- Cloud Load Balancing 健康检查。 如需了解详情,请参阅为健康检查创建防火墙规则。
如需创建防火墙规则,请执行以下操作:
在 Google Cloud 控制台中,进入 VPC 网络防火墙页面。
点击页面顶部的创建防火墙规则。
- 在网络字段中,选择您的虚拟机所在的网络。
- 在目标字段中,选择网络中的所有实例。
- 在来源过滤条件字段中,选择下列选项之一:
- IP 地址范围:用于允许从特定 IP 地址传入的流量。 请在来源 IP 地址范围字段中指定相应 IP 地址范围。
- 子网:用于允许从特定子网传入的流量。请在下面的子网字段中指定相应子网名称。此选项可用于允许 3 层式或横向扩缩式配置中的各虚拟机之间互相访问。
- 在协议和端口部分,选择指定的协议和端口并指定
tcp:PORT_NUMBER;
。
点击创建以创建防火墙规则。
为 SAP NetWeaver 部署虚拟机
在开始配置高可用性集群之前,您需要定义和部署将充当高可用性集群中的主节点和辅助节点的虚拟机实例。
要定义和部署虚拟机,请使用您在自动部署在 Linux 上运行 SAP NetWeaver 的虚拟机中为 SAP NetWeaver 系统部署虚拟机时使用的相同 Cloud Deployment Manager 模板。
但是,为了部署两个虚拟机而不是一个虚拟机,您需要通过复制和粘贴第一个虚拟机的定义来将第二个虚拟机的定义添加到配置文件中。创建第二个定义后,您需要更改第二个定义中的资源和实例名称。为了防止发生可用区故障,请在同一区域中指定另一个可用区。两个定义中的所有其他属性值均相同。
成功部署虚拟机后,您将安装 SAP NetWeaver 并定义和配置高可用性集群。
以下说明使用的是 Cloud Shell,但一般也适用于 Google Cloud CLI。
打开 Cloud Shell。
将 YAML 配置文件模板
template.yaml
下载到您的工作目录:wget https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/template.yaml
(可选)重命名
template.yaml
文件以标识其定义的配置。例如nw-ha-rhel-8-4.yaml
。点击 Cloud Shell 终端窗口右上角的铅笔 (edit) 图标启动编辑器,在 Cloud Shell 代码编辑器中打开 YAML 配置文件。
在 YAML 配置文件模板中,定义第一个虚拟机实例。在下表中,您需要在下一步中定义第二个虚拟机实例。
通过将英文括号及其内容替换为安装使用的值来指定属性值。下表介绍了这些属性。如需查看已完成的配置文件的示例,请参阅完整 YAML 配置文件的示例。
属性 数据类型 说明 name
字符串 用于标识以下一组属性定义的部署资源的任意名称。 type
字符串 指定要在部署期间使用的 Deployment Manager 模板的位置、类型和版本。
YAML 文件包含两个
type
规范,其中一个被注释掉。默认处于活跃状态的type
规范将模板版本指定为latest
。注释掉的type
规范使用时间戳指定特定模板版本。如果您需要所有部署都使用相同的模板版本,请使用包含时间戳的
type
规范。instanceName
字符串 您要定义的虚拟机实例的名称。请在主虚拟机定义和辅助虚拟机定义中指定不同的名称。请考虑使用将实例标识为属于同一高可用性集群的名称。 实例名称不得超过 13 个字符,并且只能包含小写字母、数字或连字符。请确保在您的项目范围内不重名。
instanceType
字符串 您需要的 Compute Engine 虚拟机类型。为主虚拟机和辅助虚拟机指定相同的实例类型。 zone
字符串 在其中部署您正在定义的虚拟机实例的 Google Cloud 可用区。请在同一区域中为主虚拟机定义和辅助虚拟机定义指定不同的可用区。可用区必须在您为子网选择的区域内。 subnetwork
字符串 您在先前步骤中创建的子网的名称。如果您要部署到共享 VPC,请以 SHAREDVPC_PROJECT/SUBNETWORK
的格式指定此值。例如myproject/network1
。linuxImage
字符串 与 SAP NetWeaver 结合使用的 Linux 操作系统映像或映像系列的名称。如需指定映像系列,请将前缀 family/
添加到系列名称中,例如:family/rhel-8-4-sap-ha
。如需查看可用映像系列的列表,请参阅 Google Cloud 控制台的映像页面。linuxImageProject
字符串 您要使用的映像所属的 Google Cloud 项目。此项目可以是您自己的项目,也可以是 Google Cloud 映像项目 rhel-sap-cloud
。如需查看 Google Cloud 映像项目的列表,请参阅 Compute Engine 文档中的映像页面。usrsapSize
整数 /usr/sap
磁盘的大小。最小为 8 GB。sapmntSize
整数 /sapmnt
磁盘的大小。最小为 8 GB。swapSize
整数 交换卷的大小。最小为 1 GB。 networkTag
字符串 可选。一个或多个英文逗号分隔的网络标记,表示用于防火墙或路由的虚拟机实例。
对于高可用性配置,请指定允许集群节点之间通信的防火墙规则的网络标记,以及允许 Cloud Load Balancing 健康检查访问集群节点的防火墙规则的网络标记。
如果您指定
publicIP: No
而不指定网络标记,请务必另外提供一种访问互联网的方法。serviceAccount
字符串 可选。指定用于已部署虚拟机的自定义服务账号。该服务账号必须包含在部署 SAP 虚拟机期间需要的权限。
如果未指定
serviceAccount
,则使用默认 Compute Engine 服务账号。指定完整的服务账号地址。例如
sap-ha-example@example-project-123456.iam.gserviceaccount.com
publicIP
布尔值 可选。决定是否为虚拟机实例添加一个公共 IP 地址。默认为 Yes
。sap_deployment_debug
布尔值 可选。如果此值设置为 Yes
,则部署将生成详细的部署日志。除非 Google 支持工程师要求您启用调试,否则请勿开启此设置。在 YAML 配置文件中,通过复制第一个虚拟机的定义并在第一个定义后粘贴副本,创建第二个虚拟机的定义。如需查看示例,请参阅完整 YAML 配置文件的示例。
在第二个虚拟机的定义中,为以下属性指定与第一个定义中的指定值不同的值:
name
instanceName
zone
创建虚拟机实例:
gcloud deployment-manager deployments create DEPLOYMENT_NAME --config TEMPLATE_NAME.yaml
其中:
DEPLOYMENT_NAME
表示您的部署的名称。TEMPLATE_NAME
表示 YAML 配置文件的名称。
上述命令会调用 Deployment Manager,以根据 YAML 配置文件中的规范部署虚拟机。
部署处理包含两个阶段。在第一阶段,Deployment Manager 会将其状态写入控制台。 在第二阶段,部署脚本会将其状态写入 Cloud Logging。
完整的 YAML 配置文件示例
以下示例展示了一个已完成的 YAML 配置文件,该文件使用最新版本的 Deployment Manager 模板部署两个虚拟机实例,用于 SAP NetWeaver 的高可用性配置。该示例省略了首次下载模板时包含的注释。
该文件包含要部署的两个资源(sap_nw_node_1
和 sap_nw_node_2
)的定义。每个资源定义都包含一个虚拟机的定义。
sap_nw_node_2
资源定义是通过以下方式创建的:复制并粘贴第一个定义,然后修改 name
、instanceName
、zone
属性的值。两个资源定义中的所有其他属性值都相同。
networkTag
和 serviceAccount
属性来自配置文件模板的“高级选项”部分。
resources: - name: sap_nw_node_1 type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/sap_nw.py properties: instanceName: nw-ha-vm-1 instanceType: n2-standard-4 zone: us-central1-b subnetwork: example-sub-network-sap linuxImage: family/rhel-8-4-sap-ha linuxImageProject: rhel-sap-cloud usrsapSize: 15 sapmntSize: 15 swapSize: 24 networkTag: cluster-ntwk-tag,allow-health-check serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com - name: sap_nw_node_2 type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_nw/sap_nw.py properties: instanceName: nw-ha-vm-2 instanceType: n2-standard-4 zone: us-central1-c subnetwork: example-sub-network-sap linuxImage: family/rhel-8-4-sap-ha linuxImageProject: rhel-sap-cloud usrsapSize: 15 sapmntSize: 15 swapSize: 24 networkTag: cluster-ntwk-tag,allow-health-check serviceAccount: limited-roles@example-project-123456.iam.gserviceaccount.com
创建允许访问主机虚拟机的防火墙规则
请创建允许从以下来源访问每个主机虚拟机的防火墙规则(如果您尚未执行此操作):
- 您的本地工作站、堡垒主机或跳转服务器(用于配置用途)
- 高可用性集群中的其他主机虚拟机(用于集群节点之间的访问)
- Cloud Load Balancing 使用的健康检查,如下文的为健康检查创建防火墙规则步骤中所述。
创建 VPC 防火墙规则时,请指定您在 template.yaml
配置文件中定义的网络标记,以将您的主机虚拟机指定为规则的目标。
若要验证部署,请定义规则以允许在端口 22 上从堡垒主机或本地工作站进行 SSH 连接。
对于集群节点之间的访问,请添加防火墙规则,用于允许在任何端口上从同一子网中的其他虚拟机建立所有类型的连接。
在继续下一部分之前,请确保已创建用于验证部署的防火墙规则以及用于集群内通信的防火墙规则。如需了解相关说明,请参阅添加防火墙规则。
验证虚拟机的部署
在安装 SAP NetWeaver 或开始配置高可用性集群之前,请通过检查日志和操作系统存储映射来验证虚拟机已正确部署。
查看日志
在 Google Cloud 控制台中,打开 Cloud Logging 以监控安装进度并检查错误。
过滤日志:
日志浏览器
在日志浏览器页面中,转到查询窗格。
从资源下拉菜单中选择全局,然后点击添加。
如果您没有看到全局选项,请在查询编辑器中输入以下查询:
resource.type="global" "Deployment"
点击运行查询。
旧式日志查看器
- 在旧版日志查看器页面中,从基本选择器菜单选择全局作为日志记录资源。
分析过滤后的日志:
- 如果显示
"--- Finished"
,则表示部署已完成处理,您可以继续执行下一步。 如果出现配额错误,请执行以下步骤:
对于任何不符合 SAP NetWeaver 规划指南中列出的 SAP NetWeaver 要求的配额,请在“IAM 和管理”的配额页面上提高配额。
在 Deployment Manager 的部署页面上,删除部署以清理失败安装中的虚拟机和永久性磁盘。
重新运行部署。
- 如果显示
检查虚拟机的配置
虚拟机实例部署完成之后,使用
ssh
连接到虚拟机。显示文件系统:
~>
df -h确保您看到类似如下所示的输出:
Filesystem Size Used Avail Use% Mounted on devtmpfs 32G 8.0K 32G 1% /dev tmpfs 48G 0 48G 0% /dev/shm tmpfs 32G 402M 32G 2% /run tmpfs 32G 0 32G 0% /sys/fs/cgroup /dev/sda3 30G 3.4G 27G 12% / /dev/sda2 20M 3.7M 17M 19% /boot/efi /dev/mapper/vg_usrsap-vol 15G 48M 15G 1% /usr/sap /dev/mapper/vg_sapmnt-vol 15G 48M 15G 1% /sapmnt tmpfs 6.3G 0 6.3G 0% /run/user/1002 tmpfs 6.3G 0 6.3G 0% /run/user/0
确认已创建交换空间:
~>
cat /proc/meminfo | grep Swap您会看到类似如下示例的结果:
SwapCached: 0 kB SwapTotal: 25161724 kB SwapFree: 25161724 kB
如果任一验证步骤显示安装失败,请执行以下步骤:
- 更正错误。
- 在部署页面上,删除该部署以从失败的安装中清除虚拟机和永久性磁盘。
- 重新运行部署。
启用虚拟机之间的负载均衡器后端通信
确认虚拟机已成功部署后,启用将充当高可用性集群中的节点的虚拟机之间的后端通信。
您可以通过修改 google-guest-agent
(包含在 Google Cloud 提供的所有 Linux 公共映像的 Linux 访客环境中)的配置来启用虚拟机之间的后端通信。
如需启用负载均衡器后端通信,请在集群中的每个虚拟机上执行以下步骤:
停止代理:
sudo service google-guest-agent stop
打开或创建
/etc/default/instance_configs.cfg
文件进行修改。例如:sudo vi /etc/default/instance_configs.cfg
在
/etc/default/instance_configs.cfg
文件中,指定以下配置属性,如下所示。如果这些部分不存在,请创建它们。尤其要确保target_instance_ips
和ip_forwarding
属性设置为false
:[IpForwarding] ethernet_proto_id = 66 ip_aliases = true target_instance_ips = false [NetworkInterfaces] dhclient_script = /sbin/google-dhclient-script dhcp_command = ip_forwarding = false setup = true
启动访客代理服务:
sudo service google-guest-agent start
负载均衡器健康检查配置需要健康检查监听目标端口以及为接口分配虚拟 IP 地址。如需了解详情,请参阅测试负载均衡器配置。
在主虚拟机和辅助虚拟机上配置 SSH 密钥
为了允许在高可用性集群中的主机之间复制文件,本部分中的步骤在这两个主机之间创建根 SSH 连接。
Google Cloud 提供的 Deployment Manager 模板会为您生成密钥,但您也可以根据需要将其替换为您生成的密钥。
您的组织可能有内部网络通信管理规范。必要时,在部署完成后,您可以从虚拟机中移除元数据,并从 authorized_keys
目录中移除密钥。
如果设置直接 SSH 连接不符合您组织的规范,您可以使用其他方法传输文件,例如:
- 使用 Cloud Shell 上传文件和下载文件菜单选项通过本地工作站传输较小的文件。请参阅使用 Cloud Shell 管理文件。
- 使用 Cloud Storage 存储桶交换文件。请参阅上传和下载。
- 使用 Filestore 或 NetApp Cloud Volumes 服务等文件存储解决方案来创建共享文件夹。请参阅文件共享解决方案。
如需在主实例和辅助实例之间启用 SSH 连接,请按照以下步骤操作。这些步骤假定您使用 SAP 的 Deployment Manager 模板生成的 SSH 密钥。
在主要主机虚拟机上:
通过 SSH 连接到虚拟机。
切换到根用户:
$
sudo su -确认 SSH 密钥存在:
#
ls -l /root/.ssh/您应该会看到 id_rsa 密钥文件,如以下示例所示:
-rw-r--r-- 1 root root 569 May 4 23:07 authorized_keys -rw------- 1 root root 2459 May 4 23:07 id_rsa -rw-r--r-- 1 root root 569 May 4 23:07 id_rsa.pub
使用辅助虚拟机的 SSH 密钥相关信息更新主虚拟机的元数据。
#
gcloud compute instances add-metadata SECONDARY_VM_NAME \ --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \ --zone SECONDARY_VM_ZONE通过打开主系统到辅助系统之间的 SSH 连接,确认 SSH 密钥已正确设置:
#
ssh SECONDARY_VM_NAME
在辅助主机虚拟机上:
通过 SSH 连接到虚拟机。
切换到根用户:
$
sudo su -确认 SSH 密钥存在:
#
ls -l /root/.ssh/您应该会看到 id_rsa 密钥文件,如以下示例所示:
-rw-r--r-- 1 root root 569 May 4 23:07 authorized_keys -rw------- 1 root root 2459 May 4 23:07 id_rsa -rw-r--r-- 1 root root 569 May 4 23:07 id_rsa.pub
使用主虚拟机的 SSH 密钥相关信息更新辅助虚拟机的元数据。
#
gcloud compute instances add-metadata PRIMARY_VM_NAME \ --metadata "ssh-keys=$(whoami):$(cat ~/.ssh/id_rsa.pub)" \ --zone PRIMARY_VM_ZONE#
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys通过打开辅助系统到主系统之间的 SSH 连接,确认 SSH 密钥已正确设置。
#
ssh PRIMARY_VM_NAME
设置共享文件存储并配置共享目录
您需要设置一个 NFS 文件共享解决方案,以提供高可用性集群的两个节点均可访问的高可用共享文件存储。然后,在这两个映射到共享文件存储的节点上创建目录。集群软件可确保正确的目录仅装载在正确的实例上。
本指南不介绍如何设置文件共享解决方案。如需了解如何设置文件共享系统,请参阅所选解决方案的供应商提供的说明。如果您选择将 Filestore 用于文件共享解决方案,我们建议您使用 Filestore 的企业层级。如需了解如何创建 Filestore 实例,请参阅创建实例。
如需了解 Google Cloud 上提供的文件共享解决方案,请参阅 Google Cloud 上高可用性 SAP 系统的共享存储选项。
要配置共享目录,请执行以下操作:
如果您尚未设置高可用性 NFS 共享文件存储解决方案,请立即设置。
在两个服务器上装载 NFS 共享存储空间以进行初始配置。
~>
sudo mkdir /mnt/nfs~>
sudo mount -t nfs NFS_PATH /mnt/nfs将
NFS_PATH
替换为 NFS 文件共享解决方案的路径。例如10.49.153.26:/nfs_share_nw_ha
。在任一服务器中,为
sapmnt
、中央传输目录和实例专用目录创建目录。如果您使用的是 Java 堆栈,请在使用以下命令以及任何其他命令之前,将“ASCS”替换为“SCS”:~>
sudo mkdir /mnt/nfs/sapmntSID~>
sudo mkdir /mnt/nfs/usrsap{trans,SIDASCSASCS_INSTANCE_NUMBER,SIDERSERS_INSTANCE_NUMBER}替换以下内容:
SID
:SAP 系统 ID (SID)。所有字母均大写。例如AHA
。ASCS_INSTANCE_NUMBER
:ASCS 系统的实例编号。例如00
。ERS_INSTANCE_NUMBER
:ERS 系统的实例编号。例如10
。
在两个服务器上,创建必要的装载点:
~>
sudo mkdir -p /sapmnt/SID~>
sudo mkdir -p /usr/sap/trans~>
sudo mkdir -p /usr/sap/SID/ASCSASCS_INSTANCE_NUMBER~>
sudo mkdir -p /usr/sap/SID/ERSERS_INSTANCE_NUMBER配置
autofs
,以便在首次访问文件目录时装载通用的共享文件目录。ASCSASCS_INSTANCE_NUMBER
和ERSERS_INSTANCE_NUMBER
目录的装载由集群软件管理,您将在后续步骤中配置该软件。根据需要为文件共享解决方案调整命令中的 NFS 选项。
在两个服务器上配置
autofs
:~>
echo "/- /etc/auto.sap" | sudo tee -a /etc/auto.master~>
NFS_OPTS="-rw,relatime,vers=3,hard,proto=tcp,timeo=600,retrans=2,mountvers=3,mountport=2050,mountproto=tcp"~>
echo "/sapmnt/SID ${NFS_OPTS} NFS_PATH/sapmntSID" | sudo tee -a /etc/auto.sap~>
echo "/usr/sap/trans ${NFS_OPTS} NFS_PATH/usrsaptrans" | sudo tee -a /etc/auto.sap如需详细了解
autofs
,请参阅 autofs - 工作原理。在两个服务器上启动
autofs
服务:~>
sudo systemctl enable autofs~>
sudo systemctl restart autofs~>
sudo automount -v触发
autofs
,以通过使用cd
命令访问每个目录来装载共享目录。例如:~>
cd /sapmnt/SID~>
cd /usr/sap/trans访问所有目录后,发出
df -Th
命令以确认目录已装载。~>
df -Th | grep FILE_SHARE_NAME将
FILE_SHARE_NAME
替换为您的 NFS 文件共享解决方案的名称。例如nfs_share_nw_ha
。您应该会看到类似如下所示的装载点和目录:
10.49.153.26:/nfs_share_nw_ha nfs 1007G 76M 956G 1% /mnt/nfs 10.49.153.26:/nfs_share_nw_ha/usrsaptrans nfs 1007G 76M 956G 1% /usr/sap/trans 10.49.153.26:/nfs_share_nw_ha/sapmntAHA nfs 1007G 76M 956G 1% /sapmnt/AHA
配置 Cloud Load Balancing 故障切换支持
具有故障切换支持的内部直通式网络负载均衡器服务会将 ASCS 和 ERS 流量路由到 SAP NetWeaver 集群中各自的活跃实例。内部直通式网络负载均衡器使用虚拟 IP (VIP) 地址、后端服务、实例组和健康检查来相应地路由流量。
为虚拟 IP 地址预留 IP 地址
对于 SAP NetWeaver 高可用性集群,您将创建两个 VIP 地址(有时称为“浮动” IP 地址)。一个 VIP 用于活动的 SAP 中央服务 (SCS) 实例,另一个用于 Enqueue Replication Server (ERS) 实例。负载均衡器会将发送到每个 VIP 地址的流量路由到当前正在托管 VIP 地址的 ASCS 或 ERS 组件的活跃实例的虚拟机。
打开 Cloud Shell:
为 ASCS 的虚拟 IP 地址和 ERS 的 VIP 地址预留 IP 地址。对于 ASCS,该 IP 地址是应用用于访问 SAP NetWeaver 的 IP 地址。对于 ERS,该 IP 地址是用于排队服务器复制的 IP 地址。如果您省略
--addresses
标志,系统会为您选择指定子网中的 IP 地址:~
gcloud compute addresses create ASCS_VIP_NAME \ --region CLUSTER_REGION --subnet CLUSTER_SUBNET \ --addresses ASCS_VIP_ADDRESS~
gcloud compute addresses create ERS_VIP_NAME \ --region CLUSTER_REGION --subnet CLUSTER_SUBNET \ --addresses ERS_VIP_ADDRESS替换以下内容:
ASCS_VIP_NAME
:指定 ASCS 实例的虚拟 IP 地址的名称。例如:ascs-aha-vip
。CLUSTER_REGION
:指定集群所在的 Google Cloud 区域。例如us-central1
CLUSTER_SUBNET
:指定用于集群的子网。例如:example-sub-network-sap
。ASCS_VIP_ADDRESS
:(可选)以 CIDR 表示法为 ASCS 虚拟 IP 地址指定 IP 地址。例如:10.1.0.2
。ERS_VIP_NAME
:指定 ERS 实例的虚拟 IP 地址的名称。例如:ers-aha-vip
。ERS_VIP_ADDRESS
:(可选)以 CIDR 表示法为 ERS 虚拟 IP 地址指定 IP 地址。例如:10.1.0.4
。
如需详细了解如何预留静态 IP 地址,请参阅预留静态内部 IP 地址。
确认 IP 地址预留:
~
gcloud compute addresses describe VIP_NAME \ --region CLUSTER_REGION您应该会看到类似于以下示例的输出:
address: 10.1.0.2 addressType: INTERNAL creationTimestamp: '2022-04-04T15:04:25.872-07:00' description: '' id: '555067171183973766' kind: compute#address name: ascs-aha-vip 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/ascs-aha-vip status: RESERVED subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-sub-network-sap
在 /etc/hosts
中为 VIP 地址定义主机名
为每个 VIP 地址定义主机名,然后将虚拟机和 VIP 的 IP 地址和主机名添加到每个虚拟机上的 /etc/hosts
文件。
虚拟机外部不知道 VIP 主机名,除非您也将其添加到 DNS 服务。将这些条目添加到本地 /etc/hosts
文件可保护集群免受 DNS 服务中断的影响。
对 /etc/hosts
文件的更新应与以下示例类似:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.1.0.113 nw-ha-vm-2.us-central1-c.c.example-project-123456.internal nw-ha-vm-2 10.1.0.2 ascs-aha-vip 10.1.0.4 ers-aha-vip 10.1.0.114 nw-ha-vm-1.us-central1-b.c.example-project-123456.internal nw-ha-vm-1 # Added by Google 169.254.169.254 metadata.google.internal # Added by Google
创建 Cloud Load Balancing 健康检查
创建健康检查:一个用于活跃的 ASCS 实例,另一个用于活跃的 ERS。
在 Cloud Shell 中,创建健康检查。为避免与其他服务发生冲突,请在专用范围 (49152-65535) 中为 ASCS 和 ERS 实例指定端口号。以下命令中的检查间隔和超时值略大于默认值,其目的是为了在 Compute Engine 实时迁移事件期间提高故障切换容忍度。您可以根据需要调整这些值:
~
gcloud compute health-checks create tcp ASCS_HEALTH_CHECK_NAME \ --port=ASCS_HEALTHCHECK_PORT_NUM --proxy-header=NONE --check-interval=10 --timeout=10 \ --unhealthy-threshold=2 --healthy-threshold=2~
gcloud compute health-checks create tcp ERS_HEALTH_CHECK_NAME \ --port=ERS_HEALTHCHECK_PORT_NUM --proxy-header=NONE --check-interval=10 --timeout=10 \ --unhealthy-threshold=2 --healthy-threshold=2
确认每个健康检查均已创建:
~
gcloud compute health-checks describe HEALTH_CHECK_NAME您应该会看到类似于以下示例的输出:
checkIntervalSec: 10 creationTimestamp: '2021-05-12T15:12:21.892-07:00' healthyThreshold: 2 id: '1981070199800065066' kind: compute#healthCheck name: ascs-aha-health-check-name selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/scs-aha-health-check-name tcpHealthCheck: port: 60000 portSpecification: USE_FIXED_PORT proxyHeader: NONE timeoutSec: 10 type: TCP unhealthyThreshold: 2
为健康检查创建防火墙规则
请为专用范围内的端口定义防火墙规则,以允许从 Cloud Load Balancing 健康检查使用的 IP 地址范围(35.191.0.0/16
和 130.211.0.0/22
)访问您的主机虚拟机(如果您尚未这样做)。如需详细了解负载均衡器的防火墙规则,请参阅为健康检查创建防火墙规则。
如果您还没有为主机虚拟机添加网络标记,请先添加。此网络标记由防火墙规则用于健康检查。
~
gcloud compute instances add-tags PRIMARY_VM_NAME \ --zone=PRIMARY_ZONE \ --tags NETWORK_TAGS~
gcloud compute instances add-tags SECONDARY_VM_NAME \ --zone=SECONDARY_ZONE \ --tags NETWORK_TAGS
创建使用网络标记的防火墙规则以允许健康检查:
~
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:ASCS_HEALTHCHECK_PORT_NUM,tcp:ERS_HEALTHCHECK_PORT_NUM例如:
gcloud compute firewall-rules create nw-ha-cluster-health-checks \ --network=example-network \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags=allow-health-check \ --rules=tcp:60000,tcp:60010
创建 Compute Engine 实例组
您需要在包含集群节点虚拟机的每个可用区中创建一个实例组,并将该可用区中的虚拟机添加到实例组中。
在 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_VM_NAME
在 Cloud Shell 中,创建辅助实例组并向其添加辅助虚拟机:
~
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_VM_NAME
确认已创建实例组:
~
gcloud compute instance-groups unmanaged list您应该会看到类似于以下示例的输出:
NAME ZONE NETWORK NETWORK_PROJECT MANAGED INSTANCES sap-aha-primary-instance-group us-central1-b example-network-sap example-project-123456 No 1 sap-aha-secondary-instance-group us-central1-c example-network-sap example-project-123456 No 1
配置后端服务
创建两个后端服务,一个用于 ASCS,另一个用于 ERS。将两个实例组添加到每个后端服务,并将相反的实例组指定为每个后端服务中的故障切换实例组。最后,创建从 VIP 地址到后端服务的转发规则。
在 Cloud Shell 中,为 ASCS 创建后端服务和故障切换组:
为 ASCS 创建后端服务:
~
gcloud compute backend-services create ASCS_BACKEND_SERVICE_NAME \ --load-balancing-scheme internal \ --health-checks ASCS_HEALTH_CHECK_NAME \ --no-connection-drain-on-failover \ --drop-traffic-if-unhealthy \ --failover-ratio 1.0 \ --region CLUSTER_REGION \ --global-health-checks将主实例组添加到 ASCS 后端服务:
~
gcloud compute backend-services add-backend ASCS_BACKEND_SERVICE_NAME \ --instance-group PRIMARY_IG_NAME \ --instance-group-zone PRIMARY_ZONE \ --region CLUSTER_REGION将辅助实例组添加为 ASCS 后端服务的故障切换实例组:
~
gcloud compute backend-services add-backend ASCS_BACKEND_SERVICE_NAME \ --instance-group SECONDARY_IG_NAME \ --instance-group-zone SECONDARY_ZONE \ --failover \ --region CLUSTER_REGION
在 Cloud Shell 中,为 ERS 创建后端服务和故障切换组:
为 ERS 创建后端服务:
~
gcloud compute backend-services create ERS_BACKEND_SERVICE_NAME \ --load-balancing-scheme internal \ --health-checks ERS_HEALTH_CHECK_NAME \ --no-connection-drain-on-failover \ --drop-traffic-if-unhealthy \ --failover-ratio 1.0 \ --region CLUSTER_REGION \ --global-health-checks将辅助实例组添加到 ERS 后端服务:
~
gcloud compute backend-services add-backend ERS_BACKEND_SERVICE_NAME \ --instance-group SECONDARY_IG_NAME \ --instance-group-zone SECONDARY_ZONE \ --region CLUSTER_REGION将主实例组添加为 ERS 后端服务的故障切换实例组:
~
gcloud compute backend-services add-backend ERS_BACKEND_SERVICE_NAME \ --instance-group PRIMARY_IG_NAME \ --instance-group-zone PRIMARY_ZONE \ --failover \ --region CLUSTER_REGION
(可选)确认后端服务按预期包含实例组:
~
gcloud compute backend-services describe BACKEND_SERVICE_NAME \ --region=CLUSTER_REGION对于 ASCS 后端服务,您应该会看到类似以下示例的输出。对于 ERS,
failover: true
会显示在主实例组上:backends: - balancingMode: CONNECTION group: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group - balancingMode: CONNECTION failover: true group: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group connectionDraining: drainingTimeoutSec: 0 creationTimestamp: '2022-04-06T10:58:37.744-07:00' description: '' failoverPolicy: disableConnectionDrainOnFailover: true dropTrafficIfUnhealthy: true failoverRatio: 1.0 fingerprint: s4qMEAyhrV0= healthChecks: - https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/ascs-aha-health-check-name id: '6695034709671438882' kind: compute#backendService loadBalancingScheme: INTERNAL name: ascs-aha-backend-service-name protocol: TCP region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/backendServices/ascs-aha-backend-service-name sessionAffinity: NONE timeoutSec: 30
在 Cloud Shell 中,为 ASCS 和 ERS 后端服务创建转发规则:
创建从 ASCS VIP 地址到 ASCS 后端服务的转发规则:
~
gcloud compute forwarding-rules create ASCS_FORWARDING_RULE_NAME \ --load-balancing-scheme internal \ --address ASCS_VIP_ADDRESS \ --subnet CLUSTER_SUBNET \ --region CLUSTER_REGION \ --backend-service ASCS_BACKEND_SERVICE_NAME \ --ports ALL创建从 ERS VIP 到 ERS 后端服务的转发规则:
~
gcloud compute forwarding-rules create ERS_FORWARDING_RULE_NAME \ --load-balancing-scheme internal \ --address ERS_VIP_ADDRESS \ --subnet CLUSTER_SUBNET \ --region CLUSTER_REGION \ --backend-service ERS_BACKEND_SERVICE_NAME \ --ports ALL
测试负载均衡器配置
即使您的后端实例组在稍后完成相应配置之前不会被注册为运行状况良好,您仍然可以通过设置监听器响应健康检查来测试负载均衡器配置。设置监听器后,如果负载均衡器配置正确,则后端实例组的状态会变为运行状况良好。
以下部分介绍了可用于测试配置的各种不同方法。
使用 socat
实用程序测试负载均衡器
您可以使用 socat
实用程序来临时监听健康检查端口。
在两个主机虚拟机上,安装
socat
实用程序:$
sudo yum install socat在主虚拟机上,将 VIP 地址临时分配给 eth0 网络卡:
ip addr add VIP_ADDRESS dev eth0
在主虚拟机上,启动
socat
进程以监听 ASCS 健康检查端口 60 秒:$
timeout 60s socat - TCP-LISTEN:ASCS_HEALTHCHECK_PORT_NUM,fork在 Cloud Shell 中,等待几秒钟,让健康检查检测到监听器,然后检查 ASCS 后端实例组的健康状况:
~
gcloud compute backend-services get-health ASCS_BACKEND_SERVICE_NAME \ --region CLUSTER_REGION对于 ASCS,您应该会看到类似于如下示例的输出:
backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule forwardingRuleIp: 10.1.0.90 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instances/nw-ha-vm-1 ipAddress: 10.1.0.89 port: 80 kind: compute#backendServiceGroupHealth --- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule forwardingRuleIp: 10.1.0.90 healthState: UNHEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/nw-ha-vm-2 ipAddress: 10.1.0.88 port: 80 kind: compute#backendServiceGroupHealth
从 eth0 接口中移除 VIP 地址:
ip addr del VIP_ADDRESS dev eth0
对 ERS 重复上述步骤,将 ASCS 变量值替换为 ERS 值。
使用端口 22 测试负载均衡器
如果主机虚拟机上的端口 22
对于 SSH 连接是打开的,则您可以将健康检查器临时修改为使用端口 22
,该端口上具有可以响应健康检查器的监听器。
若要临时使用端口 22
,请按以下步骤操作:
在 Google Cloud 控制台中,转到 Compute Engine 健康检查页面:
点击您的健康检查名称。
点击修改。
在端口字段中,将端口号更改为 22。
点击保存,然后等待一两分钟。
在 Cloud Shell 中,等待几秒钟,让健康检查检测到监听器,然后检查后端实例组的健康状况:
~
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGION您将看到如下所示的输出:
backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instanceGroups/sap-aha-primary-instance-group status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule forwardingRuleIp: 10.1.0.85 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-b/instances/nw-ha-vm-1 ipAddress: 10.1.0.79 port: 80 kind: compute#backendServiceGroupHealth --- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/sap-aha-secondary-instance-group status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/forwardingRules/scs-aha-forwarding-rule forwardingRuleIp: 10.1.0.85 healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/nw-ha-vm-2 ipAddress: 10.1.0.78 port: 80 kind: compute#backendServiceGroupHealth
完成后,将健康检查端口号更改回原始端口号。
为健康检查安装监听器
如需配置健康检查资源,您需要先安装监听器。
负载均衡器在每个主机的健康检查端口上使用监听器来确定 SAP HANA 集群主实例的运行位置。
在集群中的每个主机上,通过完成以下步骤安装监听器:
以根用户身份安装一个简单的 TCP 监听器。这些说明将安装 HAProxy 并将其用作监听器。
#
yum install haproxy复制并重命名默认的
haproxy.cfg
配置文件,使其成为多个 haproxy 实例的模板文件:#
cp /usr/lib/systemd/system/haproxy.service \ /etc/systemd/system/haproxy@.service修改
haproxy@.service
文件的[Unit]
和[Service]
部分以包含%i
实例参数,如以下示例所示:[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
单元模板的详情,请参阅使用实例化单元。为 ASCS 实例创建
haproxy.cfg
配置文件。例如:#
vi /etc/haproxy/haproxy-SIDscs.cfg将
SID
替换为 SAP 系统 ID (SID)。所有字母均大写。例如AHA
。在
haproxy-SIDscs.cfg
ASCS 配置文件中,插入以下配置,并将ASCS_HEALTHCHECK_PORT_NUM
替换为您之前为 ASCS 创建 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 *:ASCS_HEALTHCHECK_PORT_NUM
为 ERS 实例创建
haproxy.cfg
配置文件。例如:#
vi /etc/haproxy/haproxy-SIDers.cfg在
haproxy-SIDers.cfg
ERS 配置文件中,插入以下配置并将ERS_HEALTHCHECK_PORT_NUM
替换为您之前为 ERS 创建 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 *:ERS_HEALTHCHECK_PORT_NUM
重新加载
systemd
服务:#
systemctl daemon-reload确认 haproxy 服务已正确设置:
#
systemctl start haproxy#
systemctl status haproxy#
systemctl | grep haproxy返回的状态应显示
haproxy.service
为active (running)
。● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2022-04-10 16:48:10 UTC; 2 days ago Main PID: 1079 (haproxy) Tasks: 2 (limit: 100996) Memory: 5.1M CGroup: /system.slice/haproxy.service ├─1079 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid └─1083 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid Apr 10 16:48:10 dru-hanw-ascs systemd[1]: Starting HAProxy Load Balancer... Apr 10 16:48:10 dru-hanw-ascs systemd[1]: Started HAProxy Load Balancer.
在集群中的每台主机上重复执行上述步骤。
设置 Pacemaker
以下过程将在 SAP NetWeaver 的 Compute Engine 虚拟机上配置 Pacemaker 集群的 RHEL 实现。
此过程基于用于配置高可用性集群的 Red Hat 文档,包括以下出版物(需要 Red Hat 订阅):
- 在 RHEL 7.5+ 和 RHEL 8 中使用独立资源配置 SAP NetWeaver ASCS/ERS ENSA1
- 在 Pacemaker 中使用 Standalone Enqueue Server 2 (ENSA2) 配置 SAP S/4HANA ASCS/ERS
如需了解 SAP 关于安装和配置 RHEL 的信息,请参阅:
- SAP 说明 3108316 - Red Hat Enterprise Linux 9.x:安装和配置
- SAP 说明 2772999 - Red Hat Enterprise Linux 8.x:安装和配置
- SAP 说明 2002167 - Red Hat Enterprise Linux 7.x:安装和升级
在两个主机上配置所需的集群软件包和操作系统防火墙
在主要主机和辅助主机上,以根用户身份安装和更新所需的集群软件包、配置 hacluster
并配置操作系统防火墙服务。
安装以下必需的集群软件包:
#
yum install pcs pacemaker#
yum install fence-agents-gce#
yum install resource-agents-gcp#
yum install resource-agents-sap#
yum install sap-cluster-connector更新已安装的软件包:
#
yum update -y设置
hacluster
用户的密码,该用户将作为集群软件包的一部分安装:#
passwd hacluster在系统提示时为
hacluster
指定密码。在 Google Cloud 提供的 RHEL 映像中,操作系统防火墙服务默认处于活跃状态。配置防火墙服务以允许高可用性流量:
#
firewall-cmd --permanent --add-service=high-availability#
firewall-cmd --reload启动 pcs 服务,并将其配置为在启动时启动:
#
systemctl start pcsd.service#
systemctl enable pcsd.service检查 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.
创建集群
在任一节点上以根用户身份为
hacluster
用户授权。点击 RHEL 版本的标签页以查看命令:RHEL 8 及更高版本
#
pcs host auth PRIMARY_VM_NAME SECONDARY_VM_NAMERHEL 7
#
pcs cluster auth PRIMARY_VM_NAME SECONDARY_VM_NAME在系统提示时,输入
hacluster
用户名以及您为hacluster
用户设置的密码。创建集群:
RHEL 8 及更高版本
#
pcs cluster setup CLUSTER_NAME PRIMARY_VM_NAME SECONDARY_VM_NAMERHEL 7
#
pcs cluster setup --name CLUSTER_NAME PRIMARY_VM_NAME SECONDARY_VM_NAME
更新 Corosync 配置文件
以下步骤为 Corosync 设置推荐的集群值。如果 Corosync 配置文件 /etc/corosync/corosync.conf
尚不存在或为空,则可以使用 /etc/corosync/
目录中的示例文件作为配置的基础。
打开
corosync.conf
文件进行修改:#
vi /etc/corosync/corosync.conf在
corosync.conf
文件的totem
部分中,将以下摘录的示例中的参数设置为显示的值。某些参数可能已经设置为正确的值:RHEL 8
totem { ... transport: knet token: 20000 token_retransmits_before_loss_const: 10 join: 60 max_messages: 20 ... }
RHEL 7
totem { ... transport: udpu token: 20000 token_retransmits_before_loss_const: 10 join: 60 max_messages: 20 ... }
将配置同步到您的第二个服务器:
RHEL 8 及更高版本
#
pcs cluster sync corosyncRHEL 7
#
pcs cluster sync在主虚拟机中,启用并启动集群
#
pcs cluster enable --all#
pcs cluster start --all使用 corosync-cmapctl 实用工具确认新的 corosync 设置在集群中处于活动状态:
#
corosync-cmapctl检查集群状态:
#
pcs status您应该会看到类似于以下示例的输出:
Cluster name: nwha WARNINGS: No stonith devices and stonith-enabled is not false Cluster Summary: * Stack: corosync * Current DC: nw-ha-vm-2 (version 2.0.5-9.el8_4.3-ba59be7122) - partition with quorum * 2 nodes configured * 0 resource instances configured Node List: * Online: [ nw-ha-vm-1 nw-ha-vm-2 ] Full List of Resources: * No resources Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
为基础架构配置集群资源
您需要为以下集群基础架构定义 Pacemaker 资源:
- 防护设备,用于防止脑裂情况
- 共享文件系统中的 ASCS 和 ERS 目录
- 健康检查
- VIP
- ASCS 和 ERS 组件
您需要先定义防护设备、共享文件系统、健康检查和 VIP 的资源。然后安装 SAP NetWeaver。安装 SAP NetWeaver 后,最后为 ASCS 组件和 ERS 组件定义集群资源。
设置防护功能
您可以通过使用每个主机虚拟机的 fence_gce
代理定义集群资源来设置防护功能。
为了确保执行防护操作后的事件序列正确无误,您还可以配置操作系统,以在防护虚拟机后延迟 Corosync 的重启。此外,您还需要调整 Pacemaker 的重启超时,以将该延迟考虑在内。
创建防护设备资源
对于集群中的每个虚拟机,请为防护设备创建集群资源,以使集群可以重启虚拟机。虚拟机的防护设备必须在其他虚拟机上运行,因此您需将集群资源的位置配置为在除其重启的虚拟机之外的任何其他虚拟机上运行。
在主要主机上,以根用户身份为主虚拟机的防护设备创建一个集群资源:
#
pcs stonith create FENCING_RESOURCE_PRIMARY_VM fence_gce \ port="PRIMARY_VM_NAME" \ zone="PRIMARY_ZONE" \ project="CLUSTER_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 constraint location FENCING_RESOURCE_PRIMARY_VM avoids PRIMARY_VM_NAME在辅助主机上,以根用户身份为辅助虚拟机的防护设备创建集群资源:
#
pcs stonith create FENCING_RESOURCE_SECONDARY_VM fence_gce \ port="SECONDARY_VM_NAME" \ zone="SECONDARY_ZONE" \ project="CLUSTER_PROJECT_ID" \ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s"为辅助虚拟机配置防护设备的位置,使其仅在主虚拟机上处于活跃状态:
#
pcs constraint location FENCING_RESOURCE_SECONDARY_VM avoids SECONDARY_VM_NAME
设置 Corosync 重启延迟
在两个主机上,以根用户身份创建一个
systemd
普适性文件,该文件用于延迟 Corosync 的启动,以确保在重启经过防护的虚拟机后具有正确的事件序列:systemctl edit corosync.service
将以下代码行添加到文件中:
[Service] ExecStartPre=/bin/sleep 60
保存文件并退出编辑器。
重新加载 systemd 管理器配置。
systemctl daemon-reload
确认已创建普适性文件:
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
创建文件系统资源
为共享文件系统中的 ASCS 和 ERS 目录定义集群资源。
为 ASCS 目录配置文件系统资源。
#
pcs resource create ASCS_FILE_SYSTEM_RESOURCE Filesystem \ device="NFS_PATH/usrsapSIDASCSASCS_INSTANCE_NUMBER" \ directory="/usr/sap/SID/ASCSASCS_INSTANCE_NUMBER" \ fstype=nfs force_unmount=safe \ --group ASCS_RESOURCE_GROUP \ op start interval=0 timeout=60 \ op stop interval=0 timeout=120 \ op monitor interval=200 timeout=40替换以下内容:
ASCS_FILE_SYSTEM_RESOURCE
:为 ASCS 文件系统的集群资源指定一个名称。NFS_PATH
:指定 NFS 文件系统的目录路径。SID
:指定系统 ID (SID)。所有字母均大写。ASCS_INSTANCE_NUMBER
:指定 ASCS 实例编号。ASCS_RESOURCE_GROUP
:为 ASCS 集群资源指定唯一的组名称。您可以使用“SID_ASCSinstance_number_group”等惯例来确保唯一性。例如nw8_ASCS00_group
。由于组尚不存在,因此 Pacemaker 会立即创建组。创建其他 ASCS 资源时,您可以将其添加到此组中。
为 ERS 目录配置文件系统资源。
#
pcs resource create ERS_FILE_SYSTEM_RESOURCE Filesystem \ device="NFS_PATH/usrsapSIDERSERS_INSTANCE_NUMBER" \ directory="/usr/sap/SID/ERSERS_INSTANCE_NUMBER" \ fstype=nfs force_unmount=safe \ --group ERS_RESOURCE_GROUP \ op start interval=0 timeout=60 \ op stop interval=0 timeout=120 \ op monitor interval=200 timeout=40替换以下内容:
ERS_FILE_SYSTEM_RESOURCE
:指定文件系统资源的名称。NFS_PATH
:指定 NFS 文件系统的目录路径。SID
:指定系统 ID (SID)。所有字母均大写。ERS_INSTANCE_NUMBER
:指定 ERS 实例编号。ERS_RESOURCE_GROUP
:为 ERS 集群资源指定唯一的组名称。您可以使用“SID_ERSinstance_number_group”等惯例来确保唯一性。例如nw8_ERS10_group
。由于组尚不存在,因此 Pacemaker 会立即创建组。创建其他 ERS 资源时,您可以将其添加到此组中。
创建虚拟 IP 地址资源
定义 VIP 地址的集群资源。
如果您需要查询 VIP 地址,可以使用:
gcloud compute addresses describe ASCS_VIP_NAME
--region=CLUSTER_REGION --format="value(address)"gcloud compute addresses describe ERS_VIP_NAME
--region=CLUSTER_REGION --format="value(address)"
为 ASCS 和 ERS VIP 地址创建集群资源。
#
pcs resource create ASCS_VIP_RESOURCE IPaddr2 \ ip=ASCS_VIP_ADDRESS cidr_netmask=32 nic=eth0 \ op monitor interval=3600 timeout=60 \ --group ASCS_RESOURCE_GROUP#
pcs resource create ERS_VIP_RESOURCE IPaddr2 \ ip=ERS_VIP_ADDRESS cidr_netmask=32 nic=eth0 \ op monitor interval=3600 timeout=60 \ --group ERS_RESOURCE_GROUP
创建健康检查资源
为 ASCS 健康检查配置集群资源:
#
pcs resource create _HEALTHCHECK_SCS service:haproxy@SIDascs \ op monitor interval=10s timeout=20s \ --group ASCS_RESOURCE_GROUP为 ERS 健康检查配置集群资源:
#
pcs resource create _HEALTHCHECK_ERS service:haproxy@SIDers \ op monitor interval=10s timeout=20s \ --group ERS_RESOURCE_GROUP
设置其他集群默认值
设置其他集群属性:
#
pcs resource defaults resource-stickiness=1#
pcs resource defaults migration-threshold=3
查看已定义的资源
显示目前已定义的集群资源,以确保它们正确无误。
显示集群状态:
#
pcs status您应该会看到类似于以下示例的输出:
Cluster name: nwha Cluster Summary: * Stack: corosync * Current DC: nw-ha-vm-1 (version 2.0.5-9.el8_4.3-ba59be7122) - partition with quorum * 2 nodes configured * 8 resource instances configured Node List: * Online: [ nw-ha-vm-1 nw-ha-vm-2 ] Full List of Resources: * fence-nw-ha-vm-2 (stonith:fence_gce): Started nw-ha-vm-1 * fence-nw-ha-vm-1 (stonith:fence_gce): Started nw-ha-vm-2 * Resource Group: nw8_ascs00_group: * nw8_vip_ascs00 (ocf::heartbeat:IPaddr2): Started nw-ha-vm-1 * nw8_healthcheck_scs (service:haproxy@nw8scs): Started nw-ha-vm-1 * nw8_fs_ascs00 (ocf::heartbeat:Filesystem): Started nw-ha-vm-1 * Resource Group: nw8_ers10_group: * nw8_vip_ers10 (ocf::heartbeat:IPaddr2): Started nw-ha-vm-2 * nw8_healthcheck_ers (service:haproxy@nw8ers): Started nw-ha-vm-2 * nw8_fs_ers10 (ocf::heartbeat:Filesystem): Started nw-ha-vm-2 Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
安装 ASCS 和 ERS
以下部分仅介绍特定于在 Google Cloud 上安装 SAP NetWeaver 的要求和建议。
如需了解完整的安装说明,请参阅 SAP NetWeaver 文档。
准备安装
要确保集群之间的一致性并简化安装,请在安装 SAP NetWeaver ASCS 和 ERS 组件之前定义用户、组和权限,并将辅助服务器置于待机模式。
让集群退出维护模式:
#
sudo pcs property set maintenance-mode="false"在两个服务器上,以根用户身份输入以下命令,指定适合您的环境的用户 ID 和组 ID:
#
groupadd -g GID_SAPINST sapinst#
groupadd -g GID_SAPSYS sapsys#
useradd -u UID_SIDADM SID_LCadm -g sapsys#
usermod -a -G sapinst SID_LCadm#
useradd -u UID_SAPADM sapadm -g sapinst#
chown SID_LCadm:sapsys /usr/sap/SID/SYS#
chown SID_LCadm:sapsys /sapmnt/SID -R#
chown SID_LCadm:sapsys /usr/sap/trans -R#
chown SID_LCadm:sapsys /usr/sap/SID/SYS -R#
chown SID_LCadm:sapsys /usr/sap/SID -R替换以下内容:
GID_SAPINST
:指定 SAP 预配工具的 Linux 组 ID。GID_SAPSYS
:指定 SAPSYS 用户的 Linux 组 ID。UID_SIDADM
:指定 SAP 系统管理员的 Linux 用户 ID (SID)。SID_LC
:指定系统 ID (SID)。对于任何字母,请使用小写字母。UID_SAPADM
:指定 SAP Host Agent 的用户 ID。SID
:指定系统 ID (SID)。所有字母均大写。
例如,下面显示了实际的 GID 和 UID 编号方案:
Group sapinst 1001 Group sapsys 1002 Group dbhshm 1003 User en2adm 2001 User sapadm 2002 User dbhadm 2003
安装 ASCS 组件
在辅助服务器上,输入以下命令,将辅助服务器置于备用模式:
#
pcs node standby将辅助服务器置于备用模式会将所有集群资源整合到主服务器上,从而简化安装。
确认辅助服务器处于备用模式:
#
pcs status您应该会看到类似于以下示例的输出:
Cluster name: nwha Cluster Summary: * Stack: corosync * Current DC: nw-ha-vm-1 (version 2.0.5-9.el8_4.3-ba59be7122) - partition with quorum * 2 nodes configured * 8 resource instances configured Node List: * Online: [ nw-ha-vm-1 nw-ha-vm-2 ] Full List of Resources: * fence-nw-ha-vm-2 (stonith:fence_gce): Started nw-ha-vm-1 * fence-nw-ha-vm-1 (stonith:fence_gce): Stopped * Resource Group: nw8_ascs00_group: * nw8_vip_ascs00 (ocf::heartbeat:IPaddr2): Started nw-ha-vm-1 * nw8_healthcheck_scs (service:haproxy@nw8scs): Started nw-ha-vm-1 * nw8_fs_ascs00 (ocf::heartbeat:Filesystem): Started nw-ha-vm-1 * Resource Group: nw8_ers10_group: * nw8_vip_ers10 (ocf::heartbeat:IPaddr2): Started nw-ha-vm-1 * nw8_healthcheck_ers (service:haproxy@nw8ers): Started nw-ha-vm-1 * nw8_fs_ers10 (ocf::heartbeat:Filesystem): Started nw-ha-vm-1 Daemon Status: corosync: active/enabled
在主服务器上,以根用户的身份将目录更改为临时安装目录(例如
/tmp
),以运行 SAP Software Provisioning Manager (SWPM) 来安装 ASCS 实例。要访问 SWPM 的网页界面,您需要
root
用户的密码。如果您的 IT 政策不允许 SAP 管理员访问根密码,可以使用SAPINST_REMOTE_ACCESS_USER
。启动 SWPM 时,请使用
SAPINST_USE_HOSTNAME
参数指定您在/etc/hosts
文件中为 ASCS VIP 地址定义的虚拟主机名。例如:
cd /tmp; /mnt/nfs/install/SWPM/sapinst SAPINST_USE_HOSTNAME=vh-aha-scs
在最终的 SWPM 确认页面上,确保虚拟主机名正确无误。
配置完成后,将辅助虚拟机退出备用模式:
#
pcs node unstandby
安装 ERS 组件
在主服务器上,以根用户或
SID_LCadm
身份停止 ASCS 服务。#
su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function Stop"#
su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function StopService"在主服务器上,输入以下命令,将主服务器置于备用模式:
#
pcs node standby将主服务器置于备用模式会将所有集群资源整合到辅助服务器上,从而简化安装。
确认主服务器处于备用模式:
#
pcs status在辅助服务器上,以根用户的身份将目录更改为临时安装目录(例如
/tmp
),以运行 SAP Software Provisioning Manager (SWPM) 来安装 ERS 实例。使用您在安装 ASCS 组件时使用的相同用户和密码访问 SWPM。
启动 SWPM 时,请使用
SAPINST_USE_HOSTNAME
参数指定您为/etc/hosts
文件中为 ERS VIP 地址定义的虚拟主机名。例如:
cd /tmp; /mnt/nfs/install/SWPM/sapinst SAPINST_USE_HOSTNAME=vh-aha-ers
在最终的 SWPM 确认页面上,确保虚拟主机名正确无误。
将主虚拟机退出备用状态,使两个虚拟机都处于活动状态:
#
pcs node unstandby
配置 SAP 服务
您需要确认服务已正确配置,检查 ASCS 和 ERS 配置文件中的设置,并将 SID_LCadm
用户添加到 haclient
用户组。
确认 SAP 服务条目
在两个服务器上,确认您的
/usr/sap/sapservices
文件包含 ASCS 和 ERS 服务的条目。为此,您可以使用systemV
或systemd
集成。您可以使用带有
pf=PROFILE_OF_THE_SAP_INSTANCE
和-reg
选项的sapstartsrv
命令来添加任何缺失的条目。如需详细了解这些集成,请参阅以下 SAP 说明:
systemV
以下示例展示了使用
systemV
集成时/usr/sap/sapservices
文件中的 ASCS 和 ERS 服务的条目:#
LD_LIBRARY_PATH=/usr/sap/hostctrl/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH /usr/sap/hostctrl/exe/sapstartsrv \ pf=/usr/sap/SID/SYS/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \ -D -u SID_LCadm /usr/sap/hostctrl/exe/sapstartsrv \ pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \ -D -u SID_LCadmsystemd
验证您的
/usr/sap/sapservices
文件包含 ASCS 和 ERS 服务的条目。以下示例展示了使用systemd
集成时/usr/sap/sapservices
文件中的这些条目:systemctl --no-ask-password start SAPSID_ASCS_INSTANCE_NUMBER # sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_SID_LCascs systemctl --no-ask-password start SAPSID_ERS_INSTANCE_NUMBER # sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ERSERS_INSTANCE_NUMBER_SID_LCers
在 ASCS 和 ERS 实例上停用
systemd
集成:#
systemctl disable SAPSID_ASCS_INSTANCE_NUMBER.service#
systemctl stop SAPSID_ASCS_INSTANCE_NUMBER.service#
systemctl disable SAPSID_ERS_INSTANCE_NUMBER.service#
systemctl stop SAPSID_ERS_INSTANCE_NUMBER.service验证
systemd
集成已停用:#
systemctl list-unit-files | grep sap类似于以下示例的输出表示
systemd
集成已停用。请注意,某些服务(例如saphostagent
和saptune
)已启用,某些服务已停用。SAPSID_ASCS_INSTANCE_NUMBER.service disabled SAPSID_ERS_INSTANCE_NUMBER.service disabled saphostagent.service enabled sapinit.service generated saprouter.service disabled saptune.service enabled
停止 SAP 服务
在辅助服务器上,停止 ERS 服务:
#
su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function Stop"#
su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function StopService"在每个服务器上,验证所有服务都已停止:
#
su - SID_LCadm -c "sapcontrol -nr ASCS_INSTANCE_NUMBER -function GetSystemInstanceList"#
su - SID_LCadm -c "sapcontrol -nr ERS_INSTANCE_NUMBER -function GetSystemInstanceList"您应该会看到类似于以下示例的输出:
GetSystemInstanceList FAIL: NIECONN_REFUSED (Connection refused), NiRawConnect failed in plugin_fopen()
停用 SAP 中的自动服务重启功能
由于集群软件在故障切换期间管理 SAP 服务的重启,因此为了避免冲突,请停用 SAP 软件自动重启服务的功能。
在两个节点上,修改
/usr/sap/sapservices
文件,以在 SAP 软件中停用自动重启功能,方法是在sapstartsrv
命令的开头为 ASCS 和 ERS 组件添加注释字符#
。例如:
#!/bin/sh #LD_LIBRARY_PATH=/usr/sap/SID/ASCSASCS_INSTANCE_NUMBER/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; /usr/sap/SID/ASCSASCS_INSTANCE_NUMBER/exe/sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME -D -u SID_LCadm #LD_LIBRARY_PATH=/usr/sap/SID/ERSERS_INSTANCE_NUMBER/exe:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; /usr/sap/SID/ERSERS_INSTANCE_NUMBER/exe/sapstartsrv pf=/usr/sap/SID/SYS/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME -D -u SID_LCadm
修改 ASCS 和 ERS 配置文件
在任一服务器上,使用以下任一命令切换到配置文件目录:
#
cd /usr/sap/SID/SYS/profile#
cd /sapmnt/SID/profile如有必要,您可以通过列出配置文件目录中的文件来找到 ASCS 配置文件的文件名,也可以使用以下格式:
SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME
SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME
如果您使用的是 ENSA1,请通过在 ASCS 配置文件中进行以下设置来启用 keepalive 函数:
enque/encni/set_so_keepalive = true
如需了解详情,请参阅 SAP 说明 1410736 - TCP/IP:设置 keepalive 间隔。
如有必要,请修改 ASCS 和 ERS 配置文件,以更改 Enqueue Server 和 Enqueue Replication Server 的启动行为。
ENSA1
在 ASCS 配置文件的“Start SAP enqueue server”部分,如果您看到
Restart_Program_NN
,请将“Restart
”更改为“Start
”,如以下示例所示。Start_Program_01 = local $(_EN) pf=$(_PF)
在 ERS 配置文件的“Start enqueue replication server”部分,如果您看到
Restart_Program_NN
,请将“Restart
”更改为“Start
”,如以下示例所示。Start_Program_00 = local $(_ER) pf=$(_PFL) NR=$(SCSID)
ENSA2
在 ASCS 配置文件的“Start SAP enqueue server”部分,如果您看到
Restart_Program_NN
,请将“Restart
”更改为“Start
”,如以下示例所示。Start_Program_01 = local $(_ENQ) pf=$(_PF)
在 ERS 配置文件的“Start enqueue replicator”部分,如果您看到
Restart_Program_NN
,请将“Restart
”更改为“Start
”,如以下示例所示。Start_Program_00 = local $(_ENQR) pf=$(_PF) ...
为 ASCS 和 ERS 配置集群资源
在任一服务器上,以根用户身份将集群置于维护模式:
#
pcs property set maintenance-mode="true"确认集群处于维护模式:
#
pcs status为 ASCS 和 ERS 服务创建集群资源:
ENSA1
为 ASCS 实例创建集群资源。
InstanceName
的值是您安装 ASCS 时 SWPM 生成的实例配置文件的名称。#
pcs resource create ASCS_INSTANCE_RESOURCE SAPInstance \ InstanceName=SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \ START_PROFILE=/sapmnt/SID/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \ AUTOMATIC_RECOVER=false meta resource-stickiness=5000 migration-threshold=1 \ failure-timeout=60 --group ASCS_RESOURCE_GROUP \ op monitor interval=20 on-fail=restart timeout=60 \ op start interval=0 timeout=600 \ op stop interval=0 timeout=600#
pcs resource meta ASCS_RESOURCE_GROUP resource-stickiness=3000为 ERS 实例创建集群资源。
InstanceName
的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。参数IS_ERS=true
告知 Pacemaker 在 ERS 处于活动状态的节点上将runsersSID
标志设置为1
。#
pcs resource create ERS_INSTANCE_RESOURCE SAPInstance \ InstanceName=SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \ START_PROFILE=/sapmnt/SID/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \ AUTOMATIC_RECOVER=false IS_ERS=true --group ERS_RESOURCE_GROUP \ op monitor interval=20 on-fail=restart timeout=60 \ op start interval=0 timeout=600 \ op stop interval=0 timeout=600
ENSA2
为 ASCS 实例创建集群资源。
InstanceName
的值是您安装 ASCS 时 SWPM 生成的实例配置文件的名称。#
pcs resource create ASCS_INSTANCE_RESOURCE SAPInstance \ InstanceName=SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \ START_PROFILE=/sapmnt/SID/profile/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME \ AUTOMATIC_RECOVER=false meta resource-stickiness=5000 \ --group ASCS_RESOURCE_GROUP \ op monitor interval=20 on-fail=restart timeout=60 \ op start interval=0 timeout=600 \ op stop interval=0 timeout=600#
pcs resource meta ASCS_RESOURCE_GROUP resource-stickiness=3000为 ERS 实例创建集群资源。
InstanceName
的值是您安装 ERS 时 SWPM 生成的实例配置文件的名称。#
pcs resource create ERS_INSTANCE_RESOURCE SAPInstance \ InstanceName=SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \ START_PROFILE=/sapmnt/SID/profile/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME \ AUTOMATIC_RECOVER=false IS_ERS=true --group ERS_RESOURCE_GROUP \ op monitor interval=20 on-fail=restart timeout=60 \ op start interval=0 timeout=600 \ op stop interval=0 timeout=600
配置位置和排序限制条件
您可以创建限制条件来定义哪些服务需要先启动,以及哪些服务需要在同一主机上一起运行。例如,IP 地址必须与主 SAP Central Services 实例位于同一主机上。
- 定义启动顺序限制条件:
ENSA1
创建一个主机托管限制条件,以防止 ASCS 资源与 ERS 资源在同一个服务器上运行:
#
pcs constraint colocation add ERS_RESOURCE_GROUP with \ ASCS_RESOURCE_GROUP -5000配置 ASCS,当标志
runsersSID
等于1
时,ASCS 故障切换到运行 ERS 的服务器:#
pcs constraint location ASCS_INSTANCE_RESOURCE \ rule score=2000 runs_ers_SID eq 1将 ASCS 配置为在故障切换后 ERS 移至其他服务器之前启动:
#
pcs constraint order start ASCS_RESOURCE_GROUP then \ stop ERS_RESOURCE_GROUP symmetrical=false kind=Optional
ENSA2
创建一个主机托管限制条件,以防止 ASCS 资源与 ERS 资源在同一个服务器上运行:
#
pcs constraint colocation add ERS_RESOURCE_GROUP with \ ASCS_RESOURCE_GROUP -5000将 ASCS 配置为在故障切换后 ERS 移至其他服务器之前启动:
#
pcs constraint order start ASCS_RESOURCE_GROUP then \ stop ERS_RESOURCE_GROUP symmetrical=false kind=Optional
检查限制条件:
#
pcs constraint您将看到如下所示的输出:
Location Constraints: Resource: ascs-aha-instance Constraint: location-ascs-instance Rule: score=2000 Expression: runs_ers_HKN eq 1 Resource: fence-nw-ha-vm-1 Disabled on: nw-ha-vm-1 (score:-INFINITY) Resource: fence-nw-ha-vm-2 Disabled on: nw-ha-vm-2 (score:-INFINITY) Ordering Constraints: start ascs-group then stop ers-group (kind:Optional) (non-symmetrical) Colocation Constraints: ascs-group with ers-group (score:-5000) Ticket Constraints:
在任一服务器上,以根用户身份停用集群维护模式:
#
pcs property set maintenance-mode="false"
为 SAP 配置 Red Hat 集群连接器
在集群中的每个主机上,配置 SAP 启动服务 sapstartsrv
以通过高可用性接口与 Pacemaker 集群软件通信。
将 SAP 管理员用户添加到
haclient
群组:usermod -a -G haclient SID_LCadm
修改 SAP 实例配置文件,将以下几行代码添加到每个配置文件的末尾。您可以在
/sapmnt/SID/profiles
目录中找到配置文件。service/halib = $(DIR_CT_RUN)/saphascriptco.so service/halib_cluster_connector = /usr/bin/sap_cluster_connector
如果 ASCS 和 ERS 实例资源当前正在集群中运行,请停用它们:
pcs resource disable ERS_INSTANCE_RESOURCE pcs resource disable ASCS_INSTANCE_RESOURCE
停止 ASCS 主机上的服务:
sapcontrol -nr ASCS_INSTANCE_NUMBER -function StopService
停止 ERS 主机上的服务:
sapcontrol -nr ERS_INSTANCE_NUMBER -function StopService
启用资源:
pcs resource enable ERS_INSTANCE_RESOURCE pcs resource enable ASCS_INSTANCE_RESOURCE
在集群中的每台主机上重复执行上述步骤。
如需了解来自 Red Hat 的详情,请参阅如何为 RHEL 7 和 8 上的 SAPInstance
资源配置 SAP halib
。
在集群外部的主机上安装数据库和应用服务器
在高可用性配置中,我们建议您在与集群中的 ASCS 主机和 ERS 主机不同的主机上安装数据库和应用服务器。
通过为每台服务器使用单独的主机,您可以降低复杂性以及对多台服务器造成影响的故障风险,还可以根据每种服务器类型调整每个 Compute Engine 的大小。
这样,您就可以选择合适的认证机器大小、避免故障并降低复杂性。
本指南不介绍如何安装数据库和应用服务器。
如需了解如何安装数据库服务器,请参阅以下内容:
- SAP HANA on Google Cloud
- SAP ASE on Google Cloud
- SAP MaxDB on Google Cloud
- IBM Db2 for SAP on Google Cloud
验证和测试集群
本部分介绍如何运行以下测试:
- 检查配置错误
- 确认 ASCS 和 ERS 资源在故障切换期间正确切换服务器
- 确认锁定被保留
- 模拟 Compute Engine 维护事件,以确保实时迁移不会触发故障切换
检查集群配置
在任一服务器上,以根用户身份查看您的资源在哪些节点上运行:
#
pcs status在以下示例中,ASCS 资源在
nw-ha-vm-2
服务器上运行,ERS 资源在nw-ha-vm-1
服务器上运行。Stack: corosync Current DC: nw-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum Last updated: Wed Apr 13 05:21:21 2022 Last change: Wed Apr 13 05:21:18 2022 by hacluster via crmd on nw-ha-vm-2 2 nodes configured 10 resource instances configured Online: [ nw-ha-vm-1 nw-ha-vm-2 ] Full list of resources: fence-nw-ha-vm-1 (stonith:fence_gce): Started nw-ha-vm-2 fence-nw-ha-vm-2 (stonith:fence_gce): Started nw-ha-vm-1 Resource Group: ascs-group ascs-file-system (ocf::heartbeat:Filesystem): Started nw-ha-vm-2 ascs-vip (ocf::heartbeat:IPaddr2): Started nw-ha-vm-2 ascs-healthcheck (service:haproxy@AHAascs): Started nw-ha-vm-2 ascs-aha-instance (ocf::heartbeat:SAPInstance): Started nw-ha-vm-2 Resource Group: ers-group ers-file-system (ocf::heartbeat:Filesystem): Started nw-ha-vm-1 ers-vip (ocf::heartbeat:IPaddr2): Started nw-ha-vm-1 ers-healthcheck (service:haproxy@AHAers): Started nw-ha-vm-1 ers-aha-instance (ocf::heartbeat:SAPInstance): Started nw-ha-vm-1 Migration Summary: * Node nw-ha-vm-1: * Node nw-ha-vm-2:
切换到
SID_LCadm
用户:#
su - SID_LCadm检查集群配置。对于
INSTANCE_NUMBER
,请指定您输入以下命令的服务器上处于活跃状态的 ASCS 或 ERS 实例的编号:>
sapcontrol -nr INSTANCE_NUMBER -function HAGetFailoverConfigHAActive
应为TRUE
,如以下示例所示:HAGetFailoverConfig 14.04.2022 17:25:45 HAGetFailoverConfig OK HAActive: TRUE HAProductVersion: Pacemaker HASAPInterfaceVersion: sap_cluster_connector HADocumentation: https://github.com/ClusterLabs/sap_cluster_connector HAActiveNode: HANodes:
以
SID_LCadm
身份,检查配置中的错误:>
sapcontrol -nr INSTANCE_NUMBER -function HACheckConfig您应该会看到类似于以下示例的输出:
14.04.2022 21:43:39 HACheckConfig OK state, category, description, comment SUCCESS, SAP CONFIGURATION, Redundant ABAP instance configuration, 0 ABAP instances detected SUCCESS, SAP CONFIGURATION, Enqueue separation, All Enqueue server separated from application server SUCCESS, SAP CONFIGURATION, MessageServer separation, All MessageServer separated from application server SUCCESS, SAP STATE, SCS instance running, SCS instance status ok SUCCESS, SAP CONFIGURATION, SAPInstance RA sufficient version (vip-ascs_NWT_00), SAPInstance includes is-ers patch SUCCESS, SAP CONFIGURATION, Enqueue replication (vip-ascs_NWT_00), Enqueue replication enabled SUCCESS, SAP STATE, Enqueue replication state (vip-ascs_NWT_00), Enqueue replication active SUCCESS, SAP CONFIGURATION, SAPInstance RA sufficient version (vip-ers_NWT_10), SAPInstance includes is-ers patch
在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份模拟故障切换:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function HAFailoverToNode ""如果您以根用户身份使用
crm_mon
跟踪故障切换,应该会看到 ASCS 迁移到另一个服务器,ERS 在该服务器上停止,然后 ERS 迁移到 ASCS 之前运行的服务器。
模拟故障切换
通过在主要主机上模拟故障来测试集群。在发布系统以供使用之前,请使用测试系统或在生产系统上运行测试。
您可以通过多种方式模拟故障,包括:
shutdown -r
(活跃节点上)ip link set eth0 down
echo c > /proc/sysrq-trigger
这里的说明使用 ip link set eth0 down
来将网络接口设为离线,因为它将同时验证故障切换和防护。
备份您的系统。
在具有活跃 SCS 实例的主机上,以根用户身份让网络接口离线:
$
ip link set eth0 down使用 SSH 重新连接到任一主机并切换到根用户。
输入
pcs status
以确认主要主机在辅助主机以前所在的虚拟机上当前处于活跃状态。集群中已启用自动重启,因此已停止的主机将重启并担任辅助主机的角色,如以下示例所示。Stack: corosync Current DC: nw-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum Last updated: Wed Apr 13 05:21:21 2022 Last change: Wed Apr 13 05:21:18 2022 by hacluster via crmd on nw-ha-vm-2 2 nodes configured 10 resource instances configured Online: [ nw-ha-vm-1 nw-ha-vm-2 ] Full list of resources: fence-nw-ha-vm-1 (stonith:fence_gce): Started nw-ha-vm-2 fence-nw-ha-vm-2 (stonith:fence_gce): Started nw-ha-vm-1 Resource Group: ascs-group ascs-file-system (ocf::heartbeat:Filesystem): Started nw-ha-vm-1 ascs-vip (ocf::heartbeat:IPaddr2): Started nw-ha-vm-1 ascs-healthcheck (service:haproxy@AHAascs): Started nw-ha-vm-1 ascs-aha-instance (ocf::heartbeat:SAPInstance): Started nw-ha-vm-1 Resource Group: ers-group ers-file-system (ocf::heartbeat:Filesystem): Started nw-ha-vm-2 ers-vip (ocf::heartbeat:IPaddr2): Started nw-ha-vm-2 ers-healthcheck (service:haproxy@AHAers): Started nw-ha-vm-2 ers-aha-instance (ocf::heartbeat:SAPInstance): Started nw-ha-vm-2 Migration Summary: * Node nw-ha-vm-1: * Node nw-ha-vm-2:
确认锁定条目被保留
如需确认锁定条目在故障切换中被保留,首先选择您的 Enqueue Server 版本对应的标签页,然后按照步骤生成锁定条目、模拟故障切换并确认锁定条目在 ASCS 激活后保留。
ENSA1
在 ERS 处于活动状态的服务器上,以
SID_LCadm
身份使用enqt
程序生成锁定条目:>
enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 11 NUMBER_OF_LOCKS在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份验证锁定条目已注册:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now如果您创建了 10 个锁定,应该会看到类似于以下示例的输出:
locks_now: 10
在 ERS 处于活动状态的服务器上,以
SID_LCadm
身份启动enqt
程序的监控函数OpCode=20
:>
enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 20 1 1 9999例如:
>
enqt pf=/sapmnt/AHA/profile/AHA_ERS10_vh-ers-aha 20 1 1 9999重新启动 ASCS 处于活跃状态的服务器。
在监控服务器上,当 Pacemaker 停止 ERS 以将其移动到其他服务器时,您应该会看到类似如下所示的输出。
Number of selected entries: 10 Number of selected entries: 10 Number of selected entries: 10 Number of selected entries: 10 Number of selected entries: 10
当
enqt
监控程序停止时,输入Ctrl + c
退出监控程序。(可选)在任一服务器上以根用户身份监控集群故障切换:
#
crm_mon以
SID_LCadm
身份,在确认锁定被保留后,释放锁定:>
enqt pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME 12 NUMBER_OF_LOCKS在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份验证锁定条目已移除:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now
ENSA2
在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份使用enq_adm
程序生成锁定条目:>
enq_admin --set_locks=NUMBER_OF_LOCKS:X:DIAG::TAB:%u pf=/PATH_TO_PROFILE/SID_ASCSASCS_INSTANCE_NUMBER_ASCS_VIRTUAL_HOST_NAME在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份验证锁定条目已注册:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now如果您创建了 10 个锁定,应该会看到类似于以下示例的输出:
locks_now: 10
在 ERS 处于活跃状态时,确认锁定条目已复制:
>
sapcontrol -nr ERS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now返回的锁定数应与 ASCS 实例上的锁定数相同。
重新启动 ASCS 处于活跃状态的服务器。
(可选)在任一服务器上以根用户身份监控集群故障切换:
#
crm_mon在重启 ASCS 的服务器上,以
SID_LCadm
身份验证锁定条目被保留:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now确认锁定被保留后,在 ERS 处于活动状态的服务器上,以
SID_LCadm
身份释放锁定:>
enq_admin --release_locks=NUMBER_OF_LOCKS:X:DIAG::TAB:%u pf=/PATH_TO_PROFILE/SID_ERSERS_INSTANCE_NUMBER_ERS_VIRTUAL_HOST_NAME在 ASCS 处于活跃状态的服务器上,以
SID_LCadm
身份验证锁定条目已移除:>
sapcontrol -nr ASCS_INSTANCE_NUMBER -function EnqGetStatistic | grep locks_now您应该会看到类似于以下示例的输出:
locks_now: 0
模拟 Compute Engine 维护事件
模拟 Compute Engine 维护事件,以确保实时迁移不会触发故障切换。
在这些说明中使用的超时和间隔值考虑了实时迁移的时长。如果您在集群配置中使用较短的值,则实时迁移可能触发故障切换的风险会比较大。
如需测试集群对实时迁移的容忍度,请执行以下操作:
在主节点上,使用以下 gcloud CLI 命令触发模拟维护事件:
$
gcloud compute instances simulate-maintenance-event PRIMARY_VM_NAME确认主节点没有发生变化:
$
pcs status
评估 SAP NetWeaver 工作负载
如需对 Google Cloud 上运行的 SAP NetWeaver 高可用性工作负载自动执行持续验证检查,您可以使用 Workload Manager。
借助 Workload Manager,您可以根据 SAP、Google Cloud 和操作系统供应商的最佳实践自动扫描和评估 SAP NetWeaver 高可用性工作负载。这有助于提高工作负载的质量、性能和可靠性。
如需了解 Workload Manager 支持用于评估 Google Cloud 上运行的 SAP NetWeaver 高可用性工作负载的最佳实践,请参阅适用于 SAP 的 Workload Manager 最佳实践。如需了解如何使用 Workload Manager 创建和运行评估,请参阅创建和运行评估。
问题排查
如需排查 SAP NetWeaver 的高可用性配置问题,请参阅排查 SAP 高可用性配置问题。
收集 SAP NetWeaver 高可用性集群的诊断信息
如果您在解决 SAP NetWeaver 高可用性集群问题时需要帮助,请收集必要的诊断信息并与 Cloud Customer Care 联系。
如需收集诊断信息,请参阅 RHEL 上的高可用性集群诊断信息。支持
如有 Google Cloud 基础架构或服务方面的问题,请与 Customer Care 联系。您可以在 Google Cloud 控制台中的“支持概览”页面上找到联系信息。如果 Customer Care 确定问题在于您的 SAP 系统,会将您引荐给 SAP 支持。
对于与 SAP 产品有关的问题,请通过 SAP 支持记录您的支持请求。
SAP 会评估支持服务工单,如果该问题似乎是 Google Cloud 基础架构问题,则 SAP 会将工单转移到其系统中的相应 Google Cloud 组成团队:BC-OP-LNX-GOOGLE
或 BC-OP-NT-GOOGLE
。
支持要求
您必须满足最低支持方案要求,才能获得对 SAP 系统及其使用的 Google Cloud 基础架构和服务的支持。
如需详细了解 Google Cloud 上的 SAP 的最低支持要求,请参阅:
执行部署后任务
在使用 SAP NetWeaver 系统之前,建议您备份新的 SAP NetWeaver 高可用性系统。
如需了解详情,请参阅 SAP NetWeaver 操作指南。
后续步骤
如需详细了解高可用性、SAP NetWeaver 和 Google Cloud,请参阅以下资源:
如需详细了解虚拟机管理和监控,请参阅 SAP NetWeaver 运维指南