本指南介绍了如何在使用内部直通式网络负载均衡器管理虚拟 IP (VIP) 地址的 Red Hat Enterprise Linux (RHEL) 或 SUSE Linux Enterprise Server (SLES) 高可用性 (HA) 集群中自动部署 SAP HANA。
本指南使用 Cloud Deployment Manager 来部署两个 Compute Engine 虚拟机 (VM)、两个 SAP HANA 纵向扩容系统、一个实现了内部直通式网络负载均衡器的虚拟 IP 地址 (VIP) 和一个基于操作系统的高可用性集群,部署时全都遵循 Google Cloud、SAP 和操作系统供应商的最佳实践。
如需使用 Terraform 自动部署适用于 SAP HANA 的高可用性集群,请参阅 Terraform:SAP HANA 高可用性集群配置指南。
其中一个 SAP HANA 系统用作活跃主系统,另一个用作辅助备用系统。可以在同一区域中部署两个 SAP HANA 系统,最好位于不同可用区。
部署的集群包括以下功能和特性:
- Pacemaker 高可用性集群资源管理器。
- Google Cloud 防护机制。
- 使用 4 级 TCP 内部负载均衡器实现的虚拟 IP (VIP),包括:
- 预留为 VIP 选择的 IP 地址
- 两个 Compute Engine 实例组
- TCP 内部负载均衡器
- Compute Engine 健康检查
- 在 RHEL 高可用性集群中:
- Red Hat 高可用性模式
- Red Hat 资源代理和防护软件包
- 在 SLES 高可用性集群中:
- SUSE 高可用性模式。
- SUSE SAPHanaSR 资源代理软件包。
- 同步系统复制。
- 内存预加载。
- 自动重启失败的实例,将其用作新的辅助实例。
如需部署不包含 Linux 高可用性集群或备用主机的 SAP HANA 系统,请参阅 SAP HANA 部署指南。
本指南适用于熟悉 SAP HANA 的 Linux 高可用性配置的 SAP HANA 高级用户。
前提条件
在创建 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
变量的值必须为GlobalOnly
或ZonalPreferred
,才能支持跨可用区解析节点名称。vmDnsSetting
的默认设置为ZonalOnly
。如需了解详情,请参阅以下主题:
创建网络
出于安全考虑,建议您创建一个新的网络。您可以通过添加防火墙规则或使用其他访问权限控制方法来控制哪些人有权访问该网络。
如果您的项目具有默认 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 地址的情况下安全地访问互联网。
添加防火墙规则
默认情况下,隐式防火墙规则会阻止从 Virtual Private Cloud (VPC) 网络外部传入的连接。如需允许传入的连接,请为您的虚拟机设置防火墙规则。在与虚拟机建立传入的连接后,防火墙会允许通过此连接的双向流量。
SAP HANA 的高可用性集群至少需要两个防火墙规则:一个规则允许 Compute Engine 健康检查对集群节点健康状况进行检查,另一个规则允许集群节点相互通信。如果您未使用共享 VPC 网络,则需要为节点之间的通信创建防火墙规则,而不需要为健康检查创建防火墙规则。Deployment Manager 模板为健康检查创建防火墙规则,您可以在部署完成后根据需要修改这些规则。
如果您使用的是共享 VPC 网络,则网络管理员需要在宿主项目中创建两个防火墙规则。
您还可以创建防火墙规则,允许对指定端口进行外部访问,或限制同一网络中各虚拟机之间的访问。如果使用 default
VPC 网络类型,则系统还会应用一些其他默认规则(例如 default-allow-internal
规则),以允许在同一网络中所有端口上的各虚拟机之间建立连接。
您可能需要通过创建防火墙规则来隔离或限制与数据库主机的连接,具体取决于适用于您的环境的 IT 政策。
根据您的使用场景,您可以创建防火墙规则来允许下列各项中的访问:
- 所有 SAP 产品的 TCP/IP 中列出的默认 SAP 端口。
- 从您的计算机或公司网络环境到 Compute Engine 虚拟机实例的连接。如果您不确定使用哪个 IP 地址,请与您公司的网络管理员联系。
- 与虚拟机实例的 SSH 连接,包括浏览器中的 SSH。
- 使用 Linux 中的第三方工具与虚拟机建立的连接。可创建一条规则以允许该工具通过您的防火墙进行访问。
如需创建防火墙规则,请执行以下操作:
控制台
在 Google Cloud 控制台中,进入 VPC 网络防火墙页面。
点击页面顶部的创建防火墙规则。
- 在网络字段中,选择虚拟机所在的网络。
- 在目标字段中,指定要应用此规则的 Google Cloud 资源。例如,指定网络中的所有实例。或者,若要将规则限制为仅应用于 Google Cloud 上的特定实例,请在指定的目标标记中输入标记。
- 在来源过滤条件字段中,选择下列选项之一:
- IP 地址范围:用于允许从特定 IP 地址传入的流量。 请在来源 IP 地址范围字段中指定相应 IP 地址范围。
- 子网:用于允许从特定子网传入的流量。请在下面的子网字段中指定相应子网名称。此选项可用于允许 3 层式或横向扩缩式配置中的各虚拟机之间互相访问。
- 在协议和端口部分,选择指定的协议和端口并输入
tcp:PORT_NUMBER
。
点击创建以创建防火墙规则。
gcloud
使用以下命令创建防火墙规则:
$
gcloud compute firewall-rules create FIREWALL_NAME
--direction=INGRESS --priority=1000 \
--network=NETWORK_NAME --action=ALLOW --rules=PROTOCOL:PORT \
--source-ranges IP_RANGE --target-tags=NETWORK_TAGS
创建安装了 SAP HANA 的高可用性 Linux 集群
以下说明使用 Cloud Deployment Manager 创建一个具有两个 SAP HANA 系统的 RHEL 或 SLES 集群,其中一个 SAP HANA 系统为单主机主要系统,位于一个虚拟机实例上,另一个 SAP HANA 系统为备用系统,位于同一 Compute Engine 区域中的另一个虚拟机实例上。SAP HANA 系统使用同步系统复制,备用系统会预加载复制的数据。
您可以在 Deployment Manager 配置文件模板中为 SAP HANA 高可用性集群定义配置选项。
以下说明使用的是 Cloud Shell,但一般也适用于 Google Cloud CLI。
确认资源(例如永久性磁盘和 CPU)的当前配额是否满足您要安装的 SAP HANA 系统的要求。如果配额不足,则部署将失败。如需了解 SAP HANA 配额要求,请参阅有关 SAP HANA 的价格和配额考虑因素。
打开 Cloud Shell;如果已在本地工作站上安装了 Google Cloud CLI,则打开一个终端。
在 Cloud Shell 或 gcloud CLI 中输入以下命令,将用于 SAP HANA 高可用性集群的
template.yaml
配置文件模板下载到您的工作目录中:$
wget https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana_ha_ilb/template.yaml(可选)重命名
template.yaml
文件以标识其定义的配置。在 Cloud Shell 代码编辑器中打开
template.yaml
文件,如果您使用的是 gcloud CLI,则使用您选择的文本编辑器。如需打开 Cloud Shell 代码编辑器,请点击 Cloud Shell 终端窗口右上角的铅笔图标。
在
template.yaml
文件中,更新属性值,方法是将方括号及其中的内容替换为安装所需的值。下表介绍了这些属性。如需在不安装 SAP HANA 的情况下创建虚拟机实例,请删除或注释掉以
sap_hana_
开头的所有行。属性 数据类型 说明 type
字符串 指定要在部署期间使用的 Deployment Manager 模板的位置、类型和版本。
YAML 文件包含两个
type
规范,其中一个被注释掉。默认处于活跃状态的type
规范将模板版本指定为latest
。注释掉的type
规范使用时间戳指定特定模板版本。如果您需要所有部署都使用相同的模板版本,请使用包含时间戳的
type
规范。primaryInstanceName
字符串 主要 SAP HANA 系统的虚拟机实例的名称。 请使用小写字母、数字或连字符指定该名称。 secondaryInstanceName
字符串 辅助 SAP HANA 系统的虚拟机实例的名称。 请使用小写字母、数字或连字符指定该名称。 primaryZone
字符串 需要在其中部署主要 SAP HANA 系统的可用区。主要可用区和次要可用区必须位于同一区域。 secondaryZone
字符串 需要在其中部署辅助 SAP HANA 系统的可用区。主要可用区和次要可用区必须位于同一区域。 instanceType
字符串 需要运行 SAP HANA 的 Compute Engine 虚拟机的类型。如果您需要自定义虚拟机类型,请指定一个预定义虚拟机类型,其中 vCPU 的数量最接近但仍大于所需的数量。部署完成后,修改 vCPU 数量和内存量。 network
字符串 网络的名称,要在该网络中创建用于管理 VIP 的负载均衡器。 如果您使用的是共享 VPC 网络,则必须将宿主项目的 ID 添加为网络名称的父目录。例如:
host-project-id/network-name
subnetwork
字符串 用于高可用性集群的子网的名称。 如果您使用的是共享 VPC 网络,则必须将宿主项目的 ID 添加为子网名称的父目录。例如:
host-project-id/subnetwork-name
linuxImage
字符串 您用于 SAP HANA 的 Linux 操作系统映像或映像系列的名称。如需指定映像系列,请将前缀 family/
添加到系列名称中,例如family/rhel-8-2-sap-ha
或family/sles-15-sp2-sap
。如需指定某一特定映像,请仅指定该映像的名称。如需查看可用映像系列的列表,请参阅 Cloud 控制台中的映像页面。linuxImageProject
字符串 您要使用的映像所属的 Google Cloud 项目。此项目可以是您自己的项目,也可以是某个 Google Cloud 映像项目。对于 RHEL,请指定 rhel-sap-cloud
。对于 SLES,请指定suse-sap-cloud
。如需查看 Google Cloud 映像项目的列表,请参阅 Compute Engine 文档中的映像页面。sap_hana_deployment_bucket
字符串 您在上一步中上传的 SAP HANA 安装文件所属项目中的 Cloud Storage 存储桶的名称。 sap_hana_sid
字符串 SAP HANA 系统 ID。此 ID 必须由 3 个字母数字字符组成,并以字母开头。所有字母必须大写。 sap_hana_instance_number
整数 SAP HANA 系统的实例编号(0 到 99)。默认值为 0。 sap_hana_sidadm_password
字符串 操作系统管理员在部署期间要使用的临时密码。部署完成后,更改该密码。密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。 sap_hana_system_password
字符串 数据库超级用户的临时密码。部署完成后,更改该密码。密码必须至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。 sap_vip
字符串 要用于 VIP 的 IP 地址。此 IP 地址必须在分配给子网的 IP 地址的范围内。Deployment Manager 模板会为您预留此 IP 地址。在活跃的高可用性集群中,此 IP 地址始终分配给活跃的 SAP HANA 实例。 primaryInstanceGroupName
字符串 定义主节点的非代管式实例组的名称。如果省略此参数,则默认名称为 ig-primaryInstanceName
。secondaryInstanceGroupName
字符串 定义辅助节点的非代管式实例组的名称。如果省略此参数,则默认名称为 ig-secondaryInstanceName
。loadBalancerName
字符串 定义 TCP 内部负载均衡器的名称。 nic_type
字符串 可选,但建议使用(如果适用于目标机器和操作系统版本)。指定要用于虚拟机实例的网络接口。您可以指定值 GVNIC
或VIRTIO_NET
。如需使用 Google 虚拟 NIC (gVNIC),您需要指定一个支持 gVNIC 的操作系统映像作为linuxImage
属性的值。如需查看操作系统映像列表,请参阅操作系统详细信息。如果您没有为此属性指定值,则系统会根据您为
此参数在 Deployment Manager 模板版本instanceType
属性指定的机器类型自动选择网络接口。202302060649
或更高版本中提供。以下示例展示了一个已完成的配置文件模板,该模板为 SAP HANA 定义了高可用性集群。该集群使用内部直通式网络负载均衡器来管理 VIP。
Deployment Manager 部署配置文件中定义的 Google Cloud 资源,然后脚本接管以配置操作系统、安装 SAP HANA、配置复制并配置 Linux 高可用性集群。
点击
RHEL
或SLES
查看特定于您的操作系统的示例。RHEL
resources: - name: sap_hana_ha type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana_ha_ilb/sap_hana_ha.py # # By default, this configuration file uses the latest release of the deployment # scripts for SAP on Google Cloud. To fix your deployments to a specific release # of the scripts, comment out the type property above and uncomment the type property below. # # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana_ha_ilb/sap_hana_ha.py # properties: primaryInstanceName: example-ha-vm1 secondaryInstanceName: example-ha-vm2 primaryZone: us-central1-a secondaryZone: us-central1-c instanceType: n2-highmem-32 network: example-network subnetwork: example-subnet-us-central1 linuxImage: family/rhel-8-1-sap-ha linuxImageProject: rhel-sap-cloud # SAP HANA parameters sap_hana_deployment_bucket: my-hana-bucket sap_hana_sid: HA1 sap_hana_instance_number: 00 sap_hana_sidadm_password: TempPa55word sap_hana_system_password: TempPa55word # VIP parameters sap_vip: 10.0.0.100 primaryInstanceGroupName: ig-example-ha-vm1 secondaryInstanceGroupName: ig-example-ha-vm2 loadBalancerName: lb-ha1 # Additional optional properties networkTag: hana-ha-ntwk-tag serviceAccount: sap-deploy-example@example-project-123456.iam.gserviceaccount.com
SLES
resources: - name: sap_hana_ha type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/latest/dm-templates/sap_hana_ha_ilb/sap_hana_ha.py # # By default, this configuration file uses the latest release of the deployment # scripts for SAP on Google Cloud. To fix your deployments to a specific release # of the scripts, comment out the type property above and uncomment the type property below. # # type: https://storage.googleapis.com/cloudsapdeploy/deploymentmanager/yyyymmddhhmm/dm-templates/sap_hana_ha_ilb/sap_hana_ha.py # properties: primaryInstanceName: example-ha-vm1 secondaryInstanceName: example-ha-vm2 primaryZone: us-central1-a secondaryZone: us-central1-c instanceType: n2-highmem-32 network: example-network subnetwork: example-subnet-us-central1 linuxImage: family/sles-15-sp1-sap linuxImageProject: suse-sap-cloud # SAP HANA parameters sap_hana_deployment_bucket: my-hana-bucket sap_hana_sid: HA1 sap_hana_instance_number: 00 sap_hana_sidadm_password: TempPa55word sap_hana_system_password: TempPa55word # VIP parameters sap_vip: 10.0.0.100 primaryInstanceGroupName: ig-example-ha-vm1 secondaryInstanceGroupName: ig-example-ha-vm2 loadBalancerName: lb-ha1 # Additional optional properties networkTag: hana-ha-ntwk-tag serviceAccount: sap-deploy-example@example-project-123456.iam.gserviceaccount.com
创建实例:
$
gcloud deployment-manager deployments create deployment-name --config template-name.yaml上述命令会调用 Deployment Manager,后者会设置 Google Cloud 基础架构,然后将控制权转交给安装并配置 SAP HANA 和高可用性集群的脚本。
当 Deployment Manager 拥有控制权时,状态消息将写入 Cloud Shell。调用脚本后,状态消息将写入 Logging,并可在 Google Cloud 控制台中查看,如检查日志中所述。
完成时间可能有所不同,但整个流程通常可在 30 分钟内完成。
验证 HANA 高可用性系统的部署
验证 SAP HANA 高可用性集群涉及多个不同的流程,包括:
- 检查日志记录
- 检查虚拟机和 SAP HANA 安装的配置
- 检查集群配置
- 检查负载均衡器和实例组的运行状况
- 使用 SAP HANA Studio 检查 SAP HANA 系统
- 执行故障切换测试
查看日志
在 Google Cloud 控制台中,打开 Cloud Logging 以监控安装进度并检查错误。
过滤日志:
日志浏览器
在日志浏览器页面中,转到查询窗格。
从资源下拉菜单中选择全局,然后点击添加。
如果您没有看到全局选项,请在查询编辑器中输入以下查询:
resource.type="global" "Deployment"
点击运行查询。
旧式日志查看器
- 在旧版日志查看器页面中,从基本选择器菜单选择全局作为日志记录资源。
分析过滤后的日志:
- 如果显示
"--- Finished"
,则表示部署已完成处理,您可以继续执行下一步。 如果出现配额错误,请执行以下步骤:
对于任何不符合 SAP HANA 规划指南中列出的 SAP HANA 要求的配额,请在“IAM 和管理”的配额页面上提高配额。
在 Deployment Manager 的部署页面上,删除部署以清理失败安装中的虚拟机和永久性磁盘。
重新运行部署。
- 如果显示
检查虚拟机和 SAP HANA 安装的配置
部署 SAP HANA 系统后(没有出现错误),使用 SSH 连接到每个虚拟机。您可以在 Compute Engine 的虚拟机实例页面中点击每个虚拟机实例对应的 SSH 按钮,也可以使用自己偏好的 SSH 方法。
切换到根用户。
sudo su -
在命令提示符处,输入
df -h
。确保您看到包含/hana
目录的输出,例如/hana/data
。RHEL
[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
SLES
example-ha-vm1:~ # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 126G 8.0K 126G 1% /dev tmpfs 189G 54M 189G 1% /dev/shm tmpfs 126G 34M 126G 1% /run tmpfs 126G 0 126G 0% /sys/fs/cgroup /dev/sda3 30G 5.4G 25G 18% / /dev/sda2 20M 2.9M 18M 15% /boot/efi /dev/mapper/vg_hana-shared 251G 50G 202G 20% /hana/shared /dev/mapper/vg_hana-sap 32G 281M 32G 1% /usr/sap /dev/mapper/vg_hana-data 426G 8.0G 418G 2% /hana/data /dev/mapper/vg_hana-log 125G 4.3G 121G 4% /hana/log /dev/mapper/vg_hanabackup-backup 512G 6.4G 506G 2% /hanabackup tmpfs 26G 0 26G 0% /run/user/473 tmpfs 26G 0 26G 0% /run/user/900 tmpfs 26G 0 26G 0% /run/user/0 tmpfs 26G 0 26G 0% /run/user/1003
通过输入特定于您的操作系统的状态命令,检查新集群的状态:
RHEL
pcs status
SLES
crm status
您应该会看到类似如下示例的结果,其中两个虚拟机实例已启动,且
example-ha-vm1
为活跃的主实例:RHEL
[root@example-ha-vm1 ~]# pcs status Cluster name: hacluster Cluster Summary: * Stack: corosync * Current DC: example-ha-vm1 (version 2.0.3-5.el8_2.4-4b1f869f0f) - partition with quorum * Last updated: Wed Jul 7 23:05:11 2021 * Last change: Wed Jul 7 23:04:43 2021 by root via crm_attribute on example-ha-vm2 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ example-ha-vm1 example-ha-vm2 ] Full List of Resources: * STONITH-example-ha-vm1 (stonith:fence_gce): Started example-ha-vm2 * STONITH-example-ha-vm2 (stonith:fence_gce): Started example-ha-vm1 * Resource Group: g-primary: * rsc_healthcheck_HA1 (service:haproxy): Started example-ha-vm2 * rsc_vip_HA1_00 (ocf::heartbeat:IPaddr2): Started example-ha-vm2 * Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]: * Started: [ example-ha-vm1 example-ha-vm2 ] * Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00] (promotable): * Masters: [ example-ha-vm2 ] * Slaves: [ example-ha-vm1 ] Failed Resource Actions: * rsc_healthcheck_HA1_start_0 on example-ha-vm1 'error' (1): call=29, status='complete', exitreason='', last-rc-change='2021-07-07 21:07:35Z', queued=0ms, exec=2097ms * SAPHana_HA1_00_monitor_61000 on example-ha-vm1 'not running' (7): call=44, status='complete', exitreason='', last-rc-change='2021-07-07 21:09:49Z', queued=0ms, exec=0ms Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
SLES
example-ha-vm1:~ # crm status Cluster Summary: * Stack: corosync * Current DC: example-ha-vm1 (version 2.0.4+20200616.2deceaa3a-3.9.1-2.0.4+20200616.2deceaa3a) - partition with quorum * Last updated: Wed Jul 7 22:57:59 2021 * Last change: Wed Jul 7 22:57:03 2021 by root via crm_attribute on example-ha-vm1 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ example-ha-vm1 example-ha-vm2 ] Full List of Resources: * STONITH-example-ha-vm1 (stonith:external/gcpstonith): Started example-ha-vm2 * STONITH-example-ha-vm2 (stonith:external/gcpstonith): Started example-ha-vm1 * Resource Group: g-primary: * rsc_vip_int-primary (ocf::heartbeat:IPaddr2): Started example-ha-vm1 * rsc_vip_hc-primary (ocf::heartbeat:anything): Started example-ha-vm1 * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]: * Started: [ example-ha-vm1 example-ha-vm2 ] * Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable): * Masters: [ example-ha-vm1 ] * Slaves: [ example-ha-vm2 ]
在以下命令中,将
SID_LC
替换为您在配置文件模板中指定的 SID 值,以切换到 SAP 管理员用户。对于任何字母,请使用小写字母。su - SID_LCadm
输入以下命令,确保 SAP HANA 服务(例如
hdbnameserver
、hdbindexserver
及其他服务)正在实例上运行:HDB info
如果您使用的是 RHEL for SAP 9.0 或更高版本,请确保将虚拟机实例
chkconfig
和compat-openssl11
安装在虚拟机实例上。如需查看 SAP 提供的详细信息,请参阅 SAP 说明 3108316 - Red Hat Enterprise Linux 9.x:安装和配置。
检查集群配置
检查集群的参数设置。检查集群软件显示的设置以及集群配置文件中的参数设置。将您的设置与以下示例中的设置进行比较,这些示例是由本指南中使用的自动化脚本创建的。
点击与您的操作系统对应的标签页:
RHEL
显示集群资源配置:
pcs config show
以下示例显示了 RHEL 8.1 及更高版本上自动化脚本创建的资源配置。
如果您运行的是 RHEL 7.7 或更早版本,则资源定义
Clone: SAPHana_HA1_00-clone
不会包含Meta Attrs: promotable=true
。Cluster Name: hacluster Corosync Nodes: example-rha-vm1 example-rha-vm2 Pacemaker Nodes: example-rha-vm1 example-rha-vm2 Resources: Group: g-primary Resource: rsc_healthcheck_HA1 (class=service type=haproxy) Operations: monitor interval=10s timeout=20s (rsc_healthcheck_HA1-monitor-interval-10s) start interval=0s timeout=100 (rsc_healthcheck_HA1-start-interval-0s) stop interval=0s timeout=100 (rsc_healthcheck_HA1-stop-interval-0s) Resource: rsc_vip_HA1_00 (class=ocf provider=heartbeat type=IPaddr2) Attributes: cidr_netmask=32 ip=10.128.15.100 nic=eth0 Operations: monitor interval=3600s timeout=60s (rsc_vip_HA1_00-monitor-interval-3600s) start interval=0s timeout=20s (rsc_vip_HA1_00-start-interval-0s) stop interval=0s timeout=20s (rsc_vip_HA1_00-stop-interval-0s) Clone: SAPHanaTopology_HA1_00-clone Meta Attrs: clone-max=2 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) reload interval=0s timeout=5 (SAPHanaTopology_HA1_00-reload-interval-0s) start interval=0s timeout=600 (SAPHanaTopology_HA1_00-start-interval-0s) stop interval=0s timeout=300 (SAPHanaTopology_HA1_00-stop-interval-0s) Clone: SAPHana_HA1_00-clone Meta Attrs: promotable=true Resource: SAPHana_HA1_00 (class=ocf provider=heartbeat type=SAPHana) Attributes: AUTOMATED_REGISTER=true DUPLICATE_PRIMARY_TIMEOUT=7200 InstanceNumber=00 PREFER_SITE_TAKEOVER=true SID=HA1 Meta Attrs: clone-max=2 clone-node-max=1 interleave=true notify=true Operations: demote interval=0s timeout=3600 (SAPHana_HA1_00-demote-interval-0s) methods interval=0s timeout=5 (SAPHana_HA1_00-methods-interval-0s) monitor interval=61 role=Slave timeout=700 (SAPHana_HA1_00-monitor-interval-61) monitor interval=59 role=Master timeout=700 (SAPHana_HA1_00-monitor-interval-59) promote interval=0s timeout=3600 (SAPHana_HA1_00-promote-interval-0s) reload interval=0s timeout=5 (SAPHana_HA1_00-reload-interval-0s) start interval=0s timeout=3600 (SAPHana_HA1_00-start-interval-0s) stop interval=0s timeout=3600 (SAPHana_HA1_00-stop-interval-0s) Stonith Devices: Resource: STONITH-example-rha-vm1 (class=stonith type=fence_gce) Attributes: pcmk_delay_max=30 pcmk_monitor_retries=4 pcmk_reboot_timeout=300 port=example-rha-vm1 project=sap-certification-env zone=us-central1-a Operations: monitor interval=300s timeout=120s (STONITH-example-rha-vm1-monitor-interval-300s) start interval=0 timeout=60s (STONITH-example-rha-vm1-start-interval-0) Resource: STONITH-example-rha-vm2 (class=stonith type=fence_gce) Attributes: pcmk_monitor_retries=4 pcmk_reboot_timeout=300 port=example-rha-vm2 project=sap-certification-env zone=us-central1-c Operations: monitor interval=300s timeout=120s (STONITH-example-rha-vm2-monitor-interval-300s) start interval=0 timeout=60s (STONITH-example-rha-vm2-start-interval-0) Fencing Levels: Location Constraints: Resource: STONITH-example-rha-vm1 Disabled on: example-rha-vm1 (score:-INFINITY) (id:location-STONITH-example-rha-vm1-example-rha-vm1--INFINITY) Resource: STONITH-example-rha-vm2 Disabled on: example-rha-vm2 (score:-INFINITY) (id:location-STONITH-example-rha-vm2-example-rha-vm2--INFINITY) Ordering Constraints: start SAPHanaTopology_HA1_00-clone then start SAPHana_HA1_00-clone (kind:Mandatory) (non-symmetrical) (id:order-SAPHanaTopology_HA1_00-clone-SAPHana_HA1_00-clone-mandatory) Colocation Constraints: g-primary with SAPHana_HA1_00-clone (score:4000) (rsc-role:Started) (with-rsc-role:Master) (id:colocation-g-primary-SAPHana_HA1_00-clone-4000) Ticket Constraints: Alerts: No alerts defined Resources Defaults: migration-threshold=5000 resource-stickiness=1000 Operations Defaults: timeout=600s Cluster Properties: cluster-infrastructure: corosync cluster-name: hacluster dc-version: 2.0.2-3.el8_1.2-744a30d655 have-watchdog: false stonith-enabled: true stonith-timeout: 300s Quorum: Options:
显示集群配置文件
corosync.conf
:cat /etc/corosync/corosync.conf
以下示例展示了自动化脚本为 RHEL 8.1 及更高版本设置的参数。
如果您使用的是 RHEL 7.7 或更早版本,则
transport:
的值为udpu
,而不是knet
:totem { version: 2 cluster_name: hacluster transport: knet join: 60 max_messages: 20 token: 20000 token_retransmits_before_loss_const: 10 crypto_cipher: aes256 crypto_hash: sha256 } nodelist { node { ring0_addr: example-rha-vm1 name: example-rha-vm1 nodeid: 1 } node { ring0_addr: example-rha-vm2 name: example-rha-vm2 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes timestamp: on }
SLES
显示集群资源配置:
crm config show
本指南使用的自动化脚本会创建资源配置,如以下示例所示:
node 1: example-ha-vm1 \ attributes hana_ha1_op_mode=logreplay lpa_ha1_lpt=1635380335 hana_ha1_srmode=syncmem hana_ha1_vhost=example-ha-vm1 hana_ha1_remoteHost=example-ha-vm2 hana_ha1_site=example-ha-vm1 node 2: example-ha-vm2 \ attributes lpa_ha1_lpt=30 hana_ha1_op_mode=logreplay hana_ha1_vhost=example-ha-vm2 hana_ha1_site=example-ha-vm2 hana_ha1_srmode=syncmem hana_ha1_remoteHost=example-ha-vm1 primitive STONITH-example-ha-vm1 stonith:external/gcpstonith \ op monitor interval=300s timeout=120s \ op start interval=0 timeout=60s \ params instance_name=example-ha-vm1 gcloud_path="/usr/bin/gcloud" logging=yes pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 primitive STONITH-example-ha-vm2 stonith:external/gcpstonith \ op monitor interval=300s timeout=120s \ op start interval=0 timeout=60s \ params instance_name=example-ha-vm2 gcloud_path="/usr/bin/gcloud" logging=yes pcmk_reboot_timeout=300 pcmk_monitor_retries=4 primitive rsc_SAPHanaTopology_HA1_HDB00 ocf:suse:SAPHanaTopology \ operations $id=rsc_sap2_HA1_HDB00-operations \ op monitor interval=10 timeout=600 \ op start interval=0 timeout=600 \ op stop interval=0 timeout=300 \ params SID=HA1 InstanceNumber=00 primitive rsc_SAPHana_HA1_HDB00 ocf:suse:SAPHana \ operations $id=rsc_sap_HA1_HDB00-operations \ op start interval=0 timeout=3600 \ op stop interval=0 timeout=3600 \ op promote interval=0 timeout=3600 \ op demote interval=0 timeout=3600 \ op monitor interval=60 role=Master timeout=700 \ op monitor interval=61 role=Slave timeout=700 \ params SID=HA1 InstanceNumber=00 PREFER_SITE_TAKEOVER=true DUPLICATE_PRIMARY_TIMEOUT=7200 AUTOMATED_REGISTER=true primitive rsc_vip_hc-primary anything \ params binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:60000,backlog=10,fork,reuseaddr /dev/null" \ op monitor timeout=20s interval=10s \ op_params depth=0 primitive rsc_vip_int-primary IPaddr2 \ params ip=10.128.15.101 cidr_netmask=32 nic=eth0 \ op monitor interval=3600s timeout=60s group g-primary rsc_vip_int-primary rsc_vip_hc-primary ms msl_SAPHana_HA1_HDB00 rsc_SAPHana_HA1_HDB00 \ meta notify=true clone-max=2 clone-node-max=1 target-role=Started interleave=true clone cln_SAPHanaTopology_HA1_HDB00 rsc_SAPHanaTopology_HA1_HDB00 \ meta clone-node-max=1 target-role=Started interleave=true location LOC_STONITH_example-ha-vm1 STONITH-example-ha-vm1 -inf: example-ha-vm1 location LOC_STONITH_example-ha-vm2 STONITH-example-ha-vm2 -inf: example-ha-vm2 colocation col_saphana_ip_HA1_HDB00 4000: g-primary:Started msl_SAPHana_HA1_HDB00:Master order ord_SAPHana_HA1_HDB00 Optional: cln_SAPHanaTopology_HA1_HDB00 msl_SAPHana_HA1_HDB00 property cib-bootstrap-options: \ have-watchdog=false \ dc-version="1.1.24+20210811.f5abda0ee-3.18.1-1.1.24+20210811.f5abda0ee" \ cluster-infrastructure=corosync \ cluster-name=hacluster \ maintenance-mode=false \ stonith-timeout=300s \ stonith-enabled=true rsc_defaults rsc-options: \ resource-stickiness=1000 \ migration-threshold=5000 op_defaults op-options: \ timeout=600
显示集群配置文件
corosync.conf
:cat /etc/corosync/corosync.conf
本指南使用的自动化脚本在
corosync.conf
文件中指定参数设置,如以下示例所示:totem { version: 2 secauth: off crypto_hash: sha1 crypto_cipher: aes256 cluster_name: hacluster clear_node_high_bit: yes token: 20000 token_retransmits_before_loss_const: 10 join: 60 max_messages: 20 transport: udpu interface { ringnumber: 0 bindnetaddr: 10.128.1.63 mcastport: 5405 ttl: 1 } } logging { fileline: off to_stderr: no to_logfile: no logfile: /var/log/cluster/corosync.log to_syslog: yes debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } nodelist { node { ring0_addr: example-ha-vm1 nodeid: 1 } node { ring0_addr: example-ha-vm2 nodeid: 2 } } quorum { provider: corosync_votequorum expected_votes: 2 two_node: 1 }
检查负载均衡器和实例组的运行状况
如需确认负载均衡器和健康检查是否已正确设置,请检查 Google Cloud 控制台中的负载均衡器和实例组。
打开 Google Cloud 控制台中的负载环均衡页面:
在负载均衡器列表中,确认已经为您的高可用性集群创建负载均衡器。
在负载均衡器详情页面上,在后端部分中实例组下面的运行状况良好列中,确认其中一个实例组显示“1/1”,另一个实例组显示“0/1”。在故障切换后,健康状况良好指标“1/1”会切换到新的活跃实例组。
使用 SAP HANA Studio 检查 SAP HANA 系统
您可以使用 SAP HANA Cockpit 或 SAP HANA Studio 来监控和管理高可用性集群中的 SAP HANA 系统。
使用 SAP HANA Studio 连接到 HANA 系统。定义连接时,请指定以下值:
- 在“Specify System”面板上,将浮动 IP 地址指定为主机名。
- 在“Connection Properties”面板上,对于数据库用户身份验证,请指定数据库超级用户名和密码(该密码是您在 template.yaml 文件中为 sap_hana_system_password 属性指定的密码)。
如需了解 SAP 提供的关于安装 SAP HANA Studio 的信息,请参阅 SAP HANA Studio 安装和更新指南。
将 SAP HANA Studio 连接到您的 HANA 高可用性系统后,双击窗口左侧导航窗格中的系统名称以显示系统概览。
在“Overview”标签页的“General Information”下,确认以下内容:
- “Operational Status”显示“All services started”。
- “System Replication Status”显示“All services are active and in sync”。
点击“一般信息”下的系统复制状态链接,确认复制模式。“系统复制”标签页上的“REPLICATION_MODE”列中的
SYNCMEM
表示同步复制。
如果任何验证步骤显示安装失败,请执行以下操作:
执行故障切换测试
如需执行故障切换测试,请执行以下操作:
使用 SSH 连接到主虚拟机。您可以在 Compute Engine 的虚拟机实例页面中点击每个虚拟机实例对应的 SSH 按钮进行连接,也可以使用自己偏好的 SSH 方法。
在命令提示符处,输入以下命令:
sudo ip link set eth0 down
ip link set eth0 down
命令断开与主要主机的通信从而触发故障切换。使用 SSH 重新连接到任一主机并切换到根用户。
确认在辅助主机所属的虚拟机上,主要主机目前处于活跃状态。集群启用了自动重启,因此已停止的主机将重启并作为辅助主机。
RHEL
pcs status
SLES
crm status
以下示例展示了每个主机上的角色已交换。
RHEL
[root@example-ha-vm1 ~]# pcs status Cluster name: hacluster Cluster Summary: * Stack: corosync * Current DC: example-ha-vm1 (version 2.0.3-5.el8_2.3-4b1f869f0f) - partition with quorum * Last updated: Fri Mar 19 21:22:07 2021 * Last change: Fri Mar 19 21:21:28 2021 by root via crm_attribute on example-ha-vm2 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ example-ha-vm1 example-ha-vm2 ] Full List of Resources: * STONITH-example-ha-vm1 (stonith:fence_gce): Started example-ha-vm2 * STONITH-example-ha-vm2 (stonith:fence_gce): Started example-ha-vm1 * Resource Group: g-primary: * rsc_healthcheck_HA1 (service:haproxy): Started example-ha-vm2 * rsc_vip_HA1_00 (ocf::heartbeat:IPaddr2): Started example-ha-vm2 * Clone Set: SAPHanaTopology_HA1_00-clone [SAPHanaTopology_HA1_00]: * Started: [ example-ha-vm1 example-ha-vm2 ] * Clone Set: SAPHana_HA1_00-clone [SAPHana_HA1_00] (promotable): * Masters: [ example-ha-vm2 ] * Slaves: [ example-ha-vm1 ]
SLES
example-ha-vm2:~ # Cluster Summary: * Stack: corosync * Current DC: example-ha-vm2 (version 2.0.4+20200616.2deceaa3a-3.9.1-2.0.4+20200616.2deceaa3a) - partition with quorum * Last updated: Thu Jul 8 17:33:44 2021 * Last change: Thu Jul 8 17:33:07 2021 by root via crm_attribute on example-ha-vm2 * 2 nodes configured * 8 resource instances configured Node List: * Online: [ example-ha-vm1 example-ha-vm2 ] Full List of Resources: * STONITH-example-ha-vm1 (stonith:external/gcpstonith): Started example-ha-vm2 * STONITH-example-ha-vm2 (stonith:external/gcpstonith): Started example-ha-vm1 * Resource Group: g-primary: * rsc_vip_int-primary (ocf::heartbeat:IPaddr2): Started example-ha-vm2 * rsc_vip_hc-primary (ocf::heartbeat:anything): Started example-ha-vm2 * Clone Set: cln_SAPHanaTopology_HA1_HDB00 [rsc_SAPHanaTopology_HA1_HDB00]: * Started: [ example-ha-vm1 example-ha-vm2 ] * Clone Set: msl_SAPHana_HA1_HDB00 [rsc_SAPHana_HA1_HDB00] (promotable): * Masters: [ example-ha-vm2 ] * Slaves: [ example-ha-vm1 ]
在控制台的负载均衡器详情页面上,确认新的活跃主实例在健康状况良好列中显示“1/1”。如有必要,请刷新页面。
例如:
在 SAP HANA Studio 中,双击导航窗格中的系统条目以刷新系统信息,确认您与系统仍处于连接状态。
点击 System Replication Status 链接以确认主要主机和辅助主机已交换主机,并且均处于活跃状态。
验证 Google Cloud 的 Agent for SAP 的安装
部署虚拟机并安装您的 SAP 系统后,请验证 Google Cloud's Agent for SAP 是否正常运行。
验证 Google Cloud 的 Agent for SAP 是否正在运行
如需验证代理是否正在运行,请按照以下步骤操作:
与主机虚拟机实例建立 SSH 连接。
运行以下命令:
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,请按照以下步骤操作:
- 在您的 SAP 系统中,输入事务
ST06
。 在概览窗格中,检查以下字段的可用性和内容,以确保 SAP 与 Google 监控基础架构的端到端设置正确无误:
- Cloud Provider:
Google Cloud Platform
- Enhanced Monitoring Access:
TRUE
- Enhanced Monitoring Details:
ACTIVE
- Cloud Provider:
为 SAP HANA 设置监控
(可选)您可以使用 Google Cloud 的 Agent for SAP 来监控 SAP HANA 实例。从 2.0 版开始,您可以将代理配置为收集 SAP HANA 监控指标并将其发送到 Cloud Monitoring。借助 Cloud Monitoring,您可以创建信息中心以直观呈现这些指标,并根据指标阈值设置提醒等。
如需使用 Google Cloud 的 Agent for SAP 监控高可用性集群,请务必遵循代理的高可用性配置中提供的指导。如需详细了解如何使用 Google Cloud 的 Agent for SAP 收集 SAP HANA 监控指标,请参阅 SAP HANA 监控指标收集。
启用 SAP HANA 快速重启
Google Cloud 强烈建议为 SAP HANA 的每个实例(尤其是较大的实例)启用 SAP HANA 快速重启。当 SAP HANA 终止但操作系统保持运行时,SAP HANA 快速重启可以减少重启时间。
Google Cloud 提供的自动化脚本会代您将操作系统和内核设置配置为支持 SAP HANA 快速重启。您只需定义 tmpfs
文件系统并配置 SAP HANA。
如需定义 tmpfs
文件系统并配置 SAP HANA,您可以按照手动步骤进行操作,也可以使用 Google Cloud 提供的自动化脚本来启用 SAP HANA 快速重启。如需了解详情,请参阅:
如需了解 SAP HANA 快速重启的完整权威说明,请参阅 SAP HANA 快速重启选项文档。
手动步骤
配置 tmpfs
文件系统
成功部署主机虚拟机和基本 SAP HANA 系统后,您需要在 tmpfs
文件系统中创建和装载 NUMA 节点的目录。
显示虚拟机的 NUMA 拓扑
在映射所需的 tmpfs
文件系统之前,您需要知道虚拟机有多少 NUMA 节点。如需显示 Compute Engine 虚拟机上的可用 NUMA 节点,请输入以下命令:
lscpu | grep NUMA
例如,m2-ultramem-208
虚拟机类型有四个 NUMA 节点(编号为 0-3),如以下示例所示:
NUMA node(s): 4 NUMA node0 CPU(s): 0-25,104-129 NUMA node1 CPU(s): 26-51,130-155 NUMA node2 CPU(s): 52-77,156-181 NUMA node3 CPU(s): 78-103,182-207
创建 NUMA 节点目录
为虚拟机中的每个 NUMA 节点创建一个目录,并设置权限。
例如,对于编号为 0-3 的四个 NUMA 节点:
mkdir -pv /hana/tmpfs{0..3}/SID chown -R SID_LCadm:sapsys /hana/tmpfs*/SID chmod 777 -R /hana/tmpfs*/SID
将 NUMA 节点目录装载到 tmpfs
装载 tmpfs
文件系统目录,并使用 mpol=prefer
为每个目录指定 NUMA 节点首选设置:
SID 使用大写字母指定 SID。
mount tmpfsSID0 -t tmpfs -o mpol=prefer:0 /hana/tmpfs0/SID mount tmpfsSID1 -t tmpfs -o mpol=prefer:1 /hana/tmpfs1/SID mount tmpfsSID2 -t tmpfs -o mpol=prefer:2 /hana/tmpfs2/SID mount tmpfsSID3 -t tmpfs -o mpol=prefer:3 /hana/tmpfs3/SID
更新/etc/fstab
为了确保装载点在操作系统重新启动后可用,请将条目添加到文件系统表 /etc/fstab
中:
tmpfsSID0 /hana/tmpfs0/SID tmpfs rw,relatime,mpol=prefer:0 tmpfsSID1 /hana/tmpfs1/SID tmpfs rw,relatime,mpol=prefer:1 tmpfsSID1 /hana/tmpfs2/SID tmpfs rw,relatime,mpol=prefer:2 tmpfsSID1 /hana/tmpfs3/SID tmpfs rw,relatime,mpol=prefer:3
可选:设置内存用量限制
tmpfs
文件系统可以动态扩缩。
如需限制 tmpfs
文件系统使用的内存,您可以使用 size
选项设置 NUMA 节点卷的大小限制。例如:
mount tmpfsSID0 -t tmpfs -o mpol=prefer:0,size=250G /hana/tmpfs0/SID
您还可以通过设置 global.ini
文件的 [memorymanager]
部分中的 persistent_memory_global_allocation_limit
参数,限制给定 SAP HANA 实例和给定服务器节点的所有 NUMA 节点的总 tmpfs
内存用量。
快速重启的 SAP HANA 配置
要配置 SAP HANA 以使用快速重启,请更新 global.ini
文件并指定要存储在永久性内存中的表。
更新 global.ini
文件中的 [persistence]
部分
配置 SAP HANA global.ini
文件中的 [persistence]
部分以引用 tmpfs
位置。用英文分号分隔每个 tmpfs
位置:
[persistence] basepath_datavolumes = /hana/data basepath_logvolumes = /hana/log basepath_persistent_memory_volumes = /hana/tmpfs0/SID;/hana/tmpfs1/SID;/hana/tmpfs2/SID;/hana/tmpfs3/SID
上述示例为 4 个 NUMA 节点指定了 4 个内存卷,对应于 m2-ultramem-208
。如果您是在 m2-ultramem-416
上运行,则需要配置 8 个内存卷 (0..7)。
修改 global.ini
文件后,重启 SAP HANA。
SAP HANA 现在可以将 tmpfs
位置用作永久性内存空间。
指定要存储在永久性内存中的表
指定要存储在永久性内存中的特定列表或分区。
例如,如需为现有表启用永久性内存,请执行 SQL 查询:
ALTER TABLE exampletable persistent memory ON immediate CASCADE
如需更改新表的默认设置,请在 indexserver.ini
文件中添加参数 table_default
。例如:
[persistent_memory] table_default = ON
如需详细了解如何控制列、表以及哪些监控视图提供详细信息,请参阅 SAP HANA 永久性内存。
自动步骤
Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本会更改目录 /hana/tmpfs*
、文件 /etc/fstab
和 SAP HANA 配置。运行脚本时,您可能需要执行其他步骤,具体取决于这是 SAP HANA 系统的初始部署,还是需要将机器大小调整为其他 NUMA 大小。
对于 SAP HANA 系统的初始部署或调整机器大小以增加 NUMA 节点的数量,请确保在执行 Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本期间正在运行 SAP HANA。
当您调整机器大小以减少 NUMA 节点的数量时,请确保在执行 Google Cloud 提供的用于启用 SAP HANA 快速重启的自动化脚本期间已停止 SAP HANA。执行脚本后,您需要手动更新 SAP HANA 配置以完成 SAP HANA 快速重启设置。如需了解详情,请参阅用于快速重启的 SAP HANA 配置。
如需启用 SAP HANA 快速重启,请按照以下步骤操作:
与主机虚拟机建立 SSH 连接。
切换到根用户:
sudo su -
下载
sap_lib_hdbfr.sh
脚本:wget https://storage.googleapis.com/cloudsapdeploy/terraform/latest/terraform/lib/sap_lib_hdbfr.sh
让该文件可执行:
chmod +x sap_lib_hdbfr.sh
验证脚本没有错误:
vi sap_lib_hdbfr.sh ./sap_lib_hdbfr.sh -help
如果该命令返回错误,请与 Cloud Customer Care 团队联系。如需详细了解如何与 Customer Care 团队联系,请参阅获取 Google Cloud 上的 SAP 支持。
在替换 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)
为 SAP HANA 设置 Google 监控代理
(可选)您可以为 SAP HANA 设置 Google 监控代理,该代理会从 SAP HANA 中收集指标并将其发送到 Monitoring。借助 Monitoring,您可以为指标创建信息中心,并根据指标阈值设置自定义提醒等。
如需监控高可用性集群,请在集群外部的虚拟机实例上安装监控代理。指定集群的浮动 IP 地址作为要监控的主机实例的 IP 地址。
如需详细了解如何为 SAP HANA 设置和配置 Google 监控代理,请参阅 SAP HANA 监控代理用户指南。
连接到 SAP HANA
请注意,由于此处的说明不使用 SAP HANA 的外部 IP 地址,因此您只能使用 SSH 通过堡垒实例连接到 SAP HANA 实例,或使用 SAP HANA Studio 通过 Windows 服务器进行连接。
如需通过堡垒实例连接到 SAP HANA,请使用您选择的 SSH 客户端连接到堡垒主机,然后再连接到 SAP HANA 实例。
如需通过 SAP HANA Studio 连接到 SAP HANA 数据库,请使用远程桌面客户端连接到 Windows Server 实例。连接后,手动安装 SAP HANA Studio 并访问 SAP HANA 数据库。
配置 HANA 主动/主动(启用读取)
从 SAP HANA 2.0 SPS1 开始,您可以在 Pacemaker 集群中配置 HANA 主动/主动(启用读取)。如需查看相关说明,请参阅以下内容:
执行部署后任务
在使用 SAP HANA 实例之前,我们建议您执行以下几个部署后步骤。如需了解详情,请参阅 SAP HANA 安装和更新指南。
更改 SAP HANA 系统管理员和数据库超级用户的临时密码。
使用最新补丁程序更新 SAP HANA 软件。
安装任何其他组件,如应用函数库 (AFL) 或智能数据访问 (SDA)。
配置和备份新的 SAP HANA 数据库。如需了解详情,请参阅 SAP HANA 操作指南。
后续步骤
- 如需详细了解虚拟机管理和监控,请参阅 SAP HANA 操作指南。