你当前正在访问 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 系统副本 (replica)
- 通用 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 隔离代理。
以下各项带有前缀:
- [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 或更高版本使用最新版本的隔离代理包。
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 围栏代理,并且使用的是自定义角色,请确保更新自定义角色以包括操作 powerOff。 有关详细信息,请参阅 为围栏代理创建自定义角色。
如果要在 RHEL 9 上部署,请安装用于云部署的资源代理。
sudo yum install -y resource-agents-cloud
[A] 设置主机名解析。
可以使用 DNS 服务器,或修改所有节点上的
/etc/hosts
文件。 此示例演示如何使用/etc/hosts
文件。 请替换以下命令中的 IP 地址和主机名。重要
如果在群集配置中使用主机名,则必须进行可靠的主机名解析。 如果名称不可用,群集通信将失败,这可能会导致群集故障转移延迟。
使用
/etc/hosts
的好处是群集独立于 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
订阅的 ID,并将其 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 隔离 从 SPN 更改为 PACEmaker 群集的 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 sudo pcs resource clone health-azure-events allow-unhealthy-nodes=true
使 Pacemaker 群集脱离维护模式。
sudo pcs property set maintenance-mode=false
清除启用期间出现的任何错误,并验证
health-azure-events
资源是否已在所有群集节点上成功启动。sudo pcs resource cleanup
计划事件的 首次查询执行最多可能需要两分钟。 使用计划事件的 Pacemaker 测试可以使用群集 VM 的重新启动或重新部署操作。 有关详细信息,请参阅计划事件。
可选隔离配置
提示
仅当想要配置特殊隔离设备 fence_kdump
时,本部分才适用。
如果需要在 VM 中收集诊断信息,则根据围栏代理 fence_kdump
配置另一个隔离设备可能很有用。 代理 fence_kdump
可以检测到节点已进入 kdump 故障恢复,并允许故障恢复服务在调用其他隔离方法之前完成。 请注意, fence_kdump
使用 Azure VM 时,不是传统围栏机制(如 Azure 隔离代理)的替代。
重要
请注意,当配置为第一级隔离设备时 fence_kdump
,它会在隔离操作中引入延迟,以及应用程序资源故障转移的延迟。
如果成功检测到故障转储,则会延迟隔离,直到崩溃恢复服务完成。 如果失败的节点无法访问或它未响应,则隔离按确定的时间、配置的迭代次数和 fence_kdump
超时时间延迟。 有关详细信息,请参阅如何实现在 Red Hat Pacemaker 群集中配置fence_kdump?
建议的 fence_kdump
超时可能需要适应特定环境。
建议仅在需要时才配置fence_kdump
隔离,以收集 VM 中的诊断,并且始终与传统的围栏方法(例如 Azure 隔离代理)结合使用。
以下 Red Hat 知识库(KB)文章包含有关配置fence_kdump
隔离的重要信息:
- 请参阅如何实现在 Red Hat Pacemaker 群集中配置fence_kdump?
- 请参阅 如何使用 Pacemaker 在 RHEL 群集中配置/管理隔离级别。
- 请参阅 RHEL 6 或 7 HA 群集中的“X 秒后超时”失败fence_kdump,其中 kexec-tools 早于 2.0.14。
- 有关如何更改默认超时的信息,请参阅如何实现配置 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] 执行
fence_kdump_nodes
配置/etc/kdump.conf
以避免fence_kdump
某些版本的超时kexec-tools
失败。 有关详细信息,请参阅未使用 kexec-tools 版本 2.0.15 或更高版本指定fence_kdump_nodes时fence_kdump超时,fence_kdump RHEL 6 或 7 高可用性群集中的“x 秒后超时”失败,其中 kexec-tools 版本低于 2.0.14。 此处提供了双节点群集的示例配置。 进行更改/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 上建立 HA 并规划 SAP HANA 灾难恢复,请参阅 Azure 虚拟机上的 SAP HANA 高可用性。