你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在 Azure 中的 Red Hat Enterprise Linux 上设置 Pacemaker
本文介绍如何在 Red Hat Enterprise Server (RHEL) 上配置基本 Pacemaker 群集。 这些说明涵盖 RHEL 7、RHEL 8 和 RHEL 9。
先决条件
请先阅读以下 SAP 说明和文档:
- SAP 说明 1928533,其中包含:
- 支持部署 SAP 软件的 Azure 虚拟机 (VM) 大小的列表。
- Azure VM 大小的重要容量信息。
- 支持的 SAP 软件、操作系统 (OS) 和数据库组合。
- Microsoft Azure 上 Windows 和 Linux 所需的 SAP 内核版本。
- SAP 说明 2015553 列出了在 Azure 中 SAP 支持的 SAP 软件部署的先决条件。
- SAP 说明 2002167 推荐了一些适用于 Red Hat Enterprise Linux 的 OS 设置。
- SAP 说明 3108316 推荐了一些适用于 Red Hat Enterprise Linux 9.x 的 OS 设置。
- SAP 说明 2009879 包含适用于 Red Hat Enterprise Linux 的 SAP HANA 指南。
- SAP 说明 3108302 包含适用于 Red Hat Enterprise Linux 9.x 的 SAP HANA 指南。
- SAP 说明 2178632 包含为 Azure 中的 SAP 报告的所有监控指标的详细信息。
- SAP 说明 2191498 包含 Azure 中的 Linux 所需的 SAP 主机代理版本。
- SAP 说明 2243692 包含 Azure 中的 Linux 上的 SAP 许可的相关信息。
- SAP 说明 1999351 包含适用于 SAP 的 Azure 增强型监视扩展的更多故障排除信息。
- SAP Community WIKI 包含适用于 Linux 的所有必需 SAP 说明。
- 适用于 Linux 上的 SAP 的 Azure 虚拟机规划和实施
- 适用于 Linux 上的 SAP 的 Azure 虚拟机部署(本文)
- 适用于 Linux 上的 SAP 的 Azure 虚拟机 DBMS 部署
- Pacemaker 群集中的 SAP HANA 系统复制
- 通用 RHEL 文档:
- Azure 特定的 RHEL 文档:
- RHEL 高可用性群集的支持策略 - Microsoft Azure 虚拟机作为群集成员
- Installing and Configuring a Red Hat Enterprise Linux 7.4 (and later) High-Availability Cluster on Microsoft Azure(在 Microsoft Azure 上安装和配置 Red Hat Enterprise Linux 7.4 [及更高版本] 高可用性群集)
- 采用 RHEL 8 的注意事项 - 高可用性和群集
- 在 RHEL 7.6 的 Pacemaker 中将 SAP S/4HANA ASCS/ERS 配置为 Standalone Enqueue Server 2 (ENSA2)
- Azure 上的 RHEL for SAP 产品/服务
群集安装
注意
Red Hat 不支持软件仿真的监视程序。 Red Hat 不支持云平台上的 SBD。 有关详细信息,请参阅 RHEL 高可用性群集的支持策略 - sbd 和 fence_sbd。
Azure 上 Pacemaker RHEL 群集唯一支持的隔离机制是 Azure 隔离代理。
重要
标准支持策略未涵盖跨多个虚拟网络 (VNets)/子网的 Pacemaker 群集。
以下各项带有前缀:
- [A] :适用于所有节点
- [1]:仅适用于节点 1
- [2]:仅适用于节点 2
文档中标记了 RHEL 7 和 RHEL 8/RHEL 9 之间有关命令或配置的差异。
[A] 注册。 此步骤是可选的。 如果使用的是启用了 RHEL SAP HA 的映像,则不需要执行此步骤。
例如,如果要在 RHEL 7 上部署,请注册 VM 并将其附加到包含 RHEL 7 存储库的池中。
sudo subscription-manager register # List the available pools sudo subscription-manager list --available --matches '*SAP*' sudo subscription-manager attach --pool=<pool id>
将池附加到 Azure 市场即用即付 RHEL 映像时,实际上要为 RHEL 的使用支付双倍费用。 不仅要为即用即付映像付费一次,还要为池中附加的 RHEL 权利付费一次。 为了缓解这种情况,Azure 现在提供了自带订阅 RHEL 映像。 有关详细信息,请参阅 Red Hat Enterprise Linux 自带订阅 Azure 映像。
[A] 启用 RHEL for SAP 存储库。 此步骤是可选的。 如果使用的是启用了 RHEL SAP HA 的映像,则不需要执行此步骤。
若要在 RHEL 7 上安装所需的包,请启用以下存储库:
sudo subscription-manager repos --disable "*" sudo subscription-manager repos --enable=rhel-7-server-rpms sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms sudo subscription-manager repos --enable=rhel-sap-for-rhel-7-server-rpms sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-eus-rpms
[A] 安装 RHEL HA 附加产品。
sudo yum install -y pcs pacemaker fence-agents-azure-arm nmap-ncat
重要
如果资源停止故障或者群集节点无法互相通信,我们建议客户使用以下 Azure 隔离代理版本(或更高版本)以获取更快的故障转移时间:
RHEL 7.7 或更高版本使用最新可用版本的 fence-agents 包。
RHEL 7.6:fence-agents-4.2.1-11.el7_6.8
RHEL 7.5:fence-agents-4.0.11-86.el7_5.8
RHEL 7.4:fence-agents-4.0.11-66.el7_4.12
有关详细信息,请参阅隔离作为 RHEL 高可用性群集成员运行的 Azure VM 需要很长时间,或者在 VM 关闭之前隔离失败/超时。
重要
对于希望将 Azure 资源托管标识而不是服务主体名称用于隔离代理的客户,建议使用以下版本的 Azure 隔离代理(或更高版本):
RHEL 8.4:fence-agents-4.2.1-54.el8。
RHEL 8.2:fence-agents-4.2.1-41.el8_2.4
RHEL 8.1:fence-agents-4.2.1-30.el8_1.4
RHEL 7.9:fence-agents-4.2.1-41.el7_9.4。
重要
在 RHEL 9 上,建议使用以下包版本(或更高版本),以避免 Azure 隔离代理出现问题:
fence-agents-4.10.0-20.el9_0.7
fence-agents-common-4.10.0-20.el9_0.6
ha-cloud-support-4.10.0-20.el9_0.6.x86_64.rpm
检查 Azure 隔离代理的版本。 如有必要,请将其更新为所需的最低版本或更高版本。
# Check the version of the Azure Fence Agent sudo yum info fence-agents-azure-arm
重要
如果需要使用自定义角色更新 Azure 隔离代理,请确保更新自定义角色来将关闭操作包含在内。 有关详细信息,请参阅为围栏代理创建自定义角色。
如果要在 RHEL 9 上部署,还需安装用于云部署的资源代理。
sudo yum install -y resource-agents-cloud
[A] 设置主机名解析。
可以使用 DNS 服务器,或修改所有节点上的
/etc/hosts
文件。 此示例演示如何使用/etc/hosts
文件。 请替换以下命令中的 IP 地址和主机名。重要
如果在群集配置中使用主机名,则必须具有可靠的主机名解析。 如果名称不可用,群集通信就会失败,这可能会导致群集故障转移延迟。
使用
/etc/hosts
的好处是群集可以不受 DNS 影响,DNS 也可能会成为单一故障点。sudo vi /etc/hosts
将以下行插入
/etc/hosts
中。 根据环境更改 IP 地址和主机名。# IP address of the first cluster node 10.0.0.6 prod-cl1-0 # IP address of the second cluster node 10.0.0.7 prod-cl1-1
[A] 将
hacluster
密码更改为同一密码。sudo passwd hacluster
[A] 为 Pacemaker 添加防火墙规则。
向群集节点之间的所有群集通信添加以下防火墙规则。
sudo firewall-cmd --add-service=high-availability --permanent sudo firewall-cmd --add-service=high-availability
[A] 启用基本群集服务。
运行以下命令以启用并启动 Pacemaker 服务。
sudo systemctl start pcsd.service sudo systemctl enable pcsd.service
[1] 创建 Pacemaker 群集。
运行以下命令以验证节点并创建群集。 将令牌设置为 30000,以允许内存保留维护。 有关详细信息,请参阅这篇适用于 Linux 的文章。
如果在 RHEL 7.x 上构建群集,请使用以下命令:
sudo pcs cluster auth prod-cl1-0 prod-cl1-1 -u hacluster sudo pcs cluster setup --name nw1-azr prod-cl1-0 prod-cl1-1 --token 30000 sudo pcs cluster start --all
如果在 RHEL 8.x/RHEL 9.x 上构建群集,请使用以下命令:
sudo pcs host auth prod-cl1-0 prod-cl1-1 -u hacluster sudo pcs cluster setup nw1-azr prod-cl1-0 prod-cl1-1 totem token=30000 sudo pcs cluster start --all
运行以下命令验证群集状态:
# Run the following command until the status of both nodes is online sudo pcs status # Cluster name: nw1-azr # WARNING: no stonith devices and stonith-enabled is not false # Stack: corosync # Current DC: prod-cl1-1 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum # Last updated: Fri Aug 17 09:18:24 2018 # Last change: Fri Aug 17 09:17:46 2018 by hacluster via crmd on prod-cl1-1 # # 2 nodes configured # 0 resources configured # # Online: [ prod-cl1-0 prod-cl1-1 ] # # No resources # # Daemon Status: # corosync: active/disabled # pacemaker: active/disabled # pcsd: active/enabled
[A] 设置预期投票。
# Check the quorum votes pcs quorum status # If the quorum votes are not set to 2, execute the next command sudo pcs quorum expected-votes 2
提示
如果要构建多节点群集(即节点数超过两个的群集),请不要将投票数设置为 2。
[1] 允许并发隔离操作。
sudo pcs property set concurrent-fencing=true
创建隔离设备
隔离设备使用 Azure 资源托管标识或服务主体来对 Azure 授权。
若要创建托管标识 (MSI),请为群集中的每个 VM 创建系统分配的托管标识。 如果已存在系统分配的托管标识,则使用该标识。 目前,请勿将用户分配的托管标识与 Pacemaker 一起使用。 RHEL 7.9 和 RHEL 8.x/RHEL 9.x 支持基于托管标识的隔离设备。
[1] 为隔离代理创建自定义角色
默认情况下,托管标识和服务主体都无权访问 Azure 资源。 需要为托管标识或服务主体授予启动和停止(关闭)群集所有 VM 的权限。 如果尚未创建自定义角色,可以使用 PowerShell 或 Azure CLI 创建。
将以下内容用于输入文件。 你需要根据订阅调整内容,即将 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
和 yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
替换为订阅的 ID。 如果只有一个订阅,请删除 AssignableScopes
中的第二个条目。
{
"Name": "Linux Fence Agent Role",
"description": "Allows to power-off and start virtual machines",
"assignableScopes": [
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"/subscriptions/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
],
"actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
[A] 分配自定义角色
使用托管标识或服务主体。
将上一部分中创建的自定义角色 Linux Fence Agent Role
分配给群集 VM 的每个托管标识。 每个 VM 系统分配的托管标识都需要为每个群集 VM 资源分配的角色。 有关详细信息,请参阅使用 Azure 门户为托管标识分配对资源的访问权限。 验证每个 VM 的托管标识角色分配是否包含所有群集 VM。
重要
请注意,使用托管标识分配和删除授权可能会延迟,直到生效。
[1] 创建隔离设备
编辑 VM 的权限后,可以在群集中配置隔离设备。
sudo pcs property set stonith-timeout=900
注意
如果 RHEL 主机名和 Azure VM 名称不相同,则命令中仅需要选项 pcmk_host_map
。 以 hostname:vm-name 格式指定映射。
请参阅命令中的粗体部分。 有关详细信息,请参阅应使用哪种格式在 pcmk_host_map 中指定节点到隔离设备的映射?。
对于 RHEL 7.x,请使用以下命令配置隔离设备:
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600
对于 RHEL 8.x/9.x,请使用以下命令配置隔离设备:
# Run following command if you are setting up fence agent on (two-node cluster and pacemaker version greater than 2.0.4-6.el8) OR (HANA scale out)
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 \
op monitor interval=3600
# Run following command if you are setting up fence agent on (two-node cluster and pacemaker version less than 2.0.4-6.el8)
sudo pcs stonith create rsc_st_azure fence_azure_arm msi=true resourceGroup="resource group" \
subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600
如果使用的是基于服务主体配置的隔离设备,请阅读使用 Azure 隔离将 Pacemaker 群集从 SPN 更改为 MSI,并了解如何转换为托管标识配置。
提示
- 若要避免双节点 Pacemaker 群集内的隔离争用,可以配置
priority-fencing-delay
群集属性。 当发生分脑方案时,此属性会在隔离具有较高总资源优先级的节点时引入额外的延迟。 有关详细信息,请参阅 Pacemaker 是否可以隔离运行最少资源的群集节点?。 - 属性
priority-fencing-delay
适用于 Pacemaker 版本 2.0.4-6.el8 或更高版本,并且适用于双节点群集。 如果配置priority-fencing-delay
群集属性,则无需设置pcmk_delay_max
属性。 但是,如果 Pacemaker 版本低于 2.0.4-6.el8,则需要设置pcmk_delay_max
属性。 - 有关如何设置
priority-fencing-delay
群集属性的说明,请参阅相应的 SAP ASCS/ERS 和 SAP HANA 纵向扩展 HA 文档。
对监视和隔离操作进行反序列化。 因此,如果存在运行时间较长的监视操作和同时发生的隔离事件,则群集故障转移不会延迟,因为监视操作已经在运行。
[1] 启用隔离设备
sudo pcs property set stonith-enabled=true
提示
Azure 隔离代理需要与公共终结点建立出站连接。 有关详细信息以及可能的解决方案,请参阅使用标准 ILB 的 VM 的公共终结点连接。
为 Azure 计划事件配置 Pacemaker
Azure 提供计划事件。 计划事件通过元数据服务发送,并可为应用程序留出时间为此类事件做准备。
Pacemaker 资源代理 azure-events-az
可监视计划的 Azure 事件。 如果检测到事件并且资源代理确定有另一个群集节点可用,则会设置群集运行状况属性。
为节点设置群集健康状况属性后,会触发位置约束,并且所有名称不以 health-
开头的资源将从具有计划事件的节点迁移走。 在受影响的群集节点没有正在运行的群集资源后,计划事件会得到确认,并且可以执行其操作(例如重启)。
[A] 确保已安装
azure-events-az
代理的程序包,并且其版本是最新的。RHEL 8.x: sudo dnf info resource-agents RHEL 9.x: sudo dnf info resource-agents-cloud
最低版本要求:
- RHEL 8.4:
resource-agents-4.1.1-90.13
- RHEL 8.6:
resource-agents-4.9.0-16.9
- RHEL 8.8:
resource-agents-4.9.0-40.1
- RHEL 9.0:
resource-agents-cloud-4.10.0-9.6
- RHEL 9.2 及更新版本:
resource-agents-cloud-4.10.0-34.1
- RHEL 8.4:
[1] 配置 Pacemaker 中的资源。
#Place the cluster in maintenance mode sudo pcs property set maintenance-mode=true
[1] 设置 Pacemaker 群集健康状况节点策略和约束。
sudo pcs property set node-health-strategy=custom sudo pcs constraint location 'regexp%!health-.*' \ rule score-attribute='#health-azure' \ defined '#uname'
重要
除了后续步骤中所述的资源之外,不要定义群集中以
health-
开头的任何其他资源。[1] 设置群集属性的初始值。 针对每个群集节点和横向扩展环境(包括多数制造商 VM)运行。
sudo crm_attribute --node prod-cl1-0 --name '#health-azure' --update 0 sudo crm_attribute --node prod-cl1-1 --name '#health-azure' --update 0
[1] 配置 Pacemaker 中的资源。 确保资源以
health-azure
开头。sudo pcs resource create health-azure-events \ ocf:heartbeat:azure-events-az \ op monitor interval=10s timeout=240s \ op start timeout=10s start-delay=90s sudo pcs resource clone health-azure-events allow-unhealthy-nodes=true failure-timeout=120s
使 Pacemaker 群集退出维护模式。
sudo pcs property set maintenance-mode=false
清除启用期间出现的任何错误,并验证
health-azure-events
资源是否已在所有群集节点上成功启动。sudo pcs resource cleanup
首次执行计划事件的查询最多可能需要 2 分钟。 计划事件的 Pacemaker 测试可以使用群集 VM 的重新启动或重新部署操作。 有关详细信息,请参阅计划事件。
可选隔离配置
提示
本部分仅适用于想要配置特殊隔离设备 fence_kdump
的情况。
如果需要在 VM 中收集诊断信息,则根据隔离代理 fence_kdump
配置额外的隔离设备可能很有用。 fence_kdump
代理可检测到节点进入了 kdump 故障恢复,并在调用其他隔离方法之前允许故障恢复服务完成。 请注意,在使用 Azure VM 时,fence_kdump
无法替代传统的隔离机制,例如 Azure 隔离代理。
重要
请注意,当 fence_kdump
被配置为第一级隔离设备时,它将分别引入隔离操作延迟和应用程序资源故障转移延迟。
如果成功检测到故障转储,隔离会延迟到故障恢复服务完成。 如果故障节点无法访问或未响应,则将按确定的时间、配置的迭代次数和 fence_kdump
超时时间延迟隔离。 有关详细信息,请参阅如何在 Red Hat Pacemaker 群集中配置 fence_kdump?。
建议的 fence_kdump
超时时间可能需要根据具体环境进行调整。
建议仅在需要收集 VM 内的诊断信息时才配置 fence_kdump
隔离,并且始终与 Azure 隔离代理等传统隔离方法结合使用。
以下 Red Hat 知识库文章包含有关如何配置 fence_kdump
隔离的重要信息:
- 请参阅如何在 Red Hat Pacemaker 群集中配置 fence_kdump?。
- 如何使用 Pacemaker 在 RHEL 群集中配置/管理隔离级别。
- 在 kexec-tools 版本低于 2.0.14 的 RHEL 6 或 7 HA 群集中,fence_kdump 失败并显示“X 秒后超时”。
- 若要了解如何更改默认超时,请参阅如何配置 kdump 以与 RHEL 6、7、8 HA 附加产品一起使用?。
- 若要了解如何在使用
fence_kdump
时减少故障转移延迟,请参阅添加 fence_kdump 配置时是否可减少故障转移的预期延迟?。
除了 Azure 隔离代理配置,还可运行以下可选步骤来添加 fence_kdump
作为第一级隔离配置。
[A] 验证
kdump
是否处于活动状态并已配置。systemctl is-active kdump # Expected result # active
[A] 安装
fence_kdump
隔离代理。yum install fence-agents-kdump
[1] 在群集中创建
fence_kdump
隔离设备。pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" timeout=30
[1] 配置隔离级别,以便先启用
fence_kdump
隔离机制。pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" pcs stonith level add 1 prod-cl1-0 rsc_st_kdump pcs stonith level add 1 prod-cl1-1 rsc_st_kdump pcs stonith level add 2 prod-cl1-0 rsc_st_azure pcs stonith level add 2 prod-cl1-1 rsc_st_azure # Check the fencing level configuration pcs stonith level # Example output # Target: prod-cl1-0 # Level 1 - rsc_st_kdump # Level 2 - rsc_st_azure # Target: prod-cl1-1 # Level 1 - rsc_st_kdump # Level 2 - rsc_st_azure
[A] 允许
fence_kdump
所需的端口通过防火墙。firewall-cmd --add-port=7410/udp firewall-cmd --add-port=7410/udp --permanent
[A] 确保
initramfs
映像文件包含fence_kdump
和hosts
文件。 有关详细信息,请参阅如何在 Red Hat Pacemaker 群集中配置 fence_kdump?。lsinitrd /boot/initramfs-$(uname -r)kdump.img | egrep "fence|hosts" # Example output # -rw-r--r-- 1 root root 208 Jun 7 21:42 etc/hosts # -rwxr-xr-x 1 root root 15560 Jun 17 14:59 usr/libexec/fence_kdump_send
[A] 在
/etc/kdump.conf
中执行fence_kdump_nodes
配置,避免在某些kexec-tools
版本中fence_kdump
失败并显示超时。 有关详细信息,请参阅 kexec-tools 2.0.15 或更高版本没有指定 fence_kdump_nodes 时,fence_kdump 超时和在 kexec-tools 版本低于 2.0.14 的 RHEL 6 或 7 高可用性群集中,fence_kdump 失败并显示“X 秒后超时”。 此处提供了双节点群集的示例配置。 在/etc/kdump.conf
中进行更改后,必须重新生成 kdump 映像。 若要重新生成,请重启kdump
服务。vi /etc/kdump.conf # On node prod-cl1-0 make sure the following line is added fence_kdump_nodes prod-cl1-1 # On node prod-cl1-1 make sure the following line is added fence_kdump_nodes prod-cl1-0 # Restart the service on each node systemctl restart kdump
通过使节点故障来测试配置。 有关详细信息,请参阅如何在 Red Hat Pacemaker 群集中配置 fence_kdump?。
重要
如果群集已在生产环境中投入使用,请相应地计划测试,因为节点故障会影响应用程序。
echo c > /proc/sysrq-trigger
后续步骤
- 请参阅适用于 SAP 的 Azure 虚拟机规划和实施。
- 请参阅适用于 SAP 的 Azure 虚拟机部署。
- 请参阅适用于 SAP 的 Azure 虚拟机 DBMS 部署。
- 若要了解如何为 Azure VM 上的 SAP HANA 建立 HA 并规划灾难恢复,请参阅 Azure 虚拟机上的 SAP HANA 的高可用性。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈