4.4. 在 Red Hat High Availability 集群中配置隔离功能
如果与集群中某个节点通信失败,那么集群中的其他节点必须能够限制或释放对故障集群节点可访问的资源的访问。这无法通过通过联系集群节点本身来实现,因为集群节点可能没有响应。反之,必须提供一个外部的方法来实现。这个方法为称为隔离(fencing)。隔离设备是一个外部设备,集群使用它用来限制错误节点对共享资源的访问,或对集群的节点执行硬重启。
如果没有配置隔离设备,您就无法知道以前被出现问题的集群节点使用的资源已被释放,这可能会阻止服务在集群的其他节点中运行。因此,该系统可能会错误地假设集群节点释放了它的资源,从而可能导致数据崩溃和数据丢失。没有隔离设备配置的数据完整性就无法保证,集群配置将不被支持。
当隔离进行时,不允许执行其他集群操作。在隔离完成前,或集群节点重启后重新加入集群前,集群的正常操作不能恢复。有关隔离及其在红帽高可用性集群中重要性的更多信息,请参阅红帽知识库解决方案 红帽高可用性集群中的隔离。
4.4.1. 显示可用的隔离代理及其选项 复制链接链接已复制到粘贴板!
以下命令可用于查看可用的隔离代理和特定隔离代理的可用选项。
您的系统硬件决定了用于集群的隔离设备的类型。有关支持的平台和架构,以及不同的隔离设备,请参阅红帽知识库文章 RHEL 高可用性集群的支持策略 中的 集群平台和架构 部分。
运行以下命令列出所有可用的隔离代理。当您指定过滤器时,这个命令只会显示与过滤器匹配的隔离代理。
pcs stonith list [filter]
pcs stonith list [filter]
运行以下命令以显示指定隔离代理的选项。
pcs stonith describe [stonith_agent]
pcs stonith describe [stonith_agent]
例如:以下命令显示 APC 通过 telnet/SSH 的隔离代理的选项。
对于提供 method
选项的隔离代理,fence_sbd
代理除外,cycle
值不被支持,不应被指定,因为它可能导致数据损坏。但是,即使是 fence_sbd
,您不应指定一个方法,而是使用默认值。
4.4.2. 创建隔离设备 复制链接链接已复制到粘贴板!
创建隔离设备的命令格式如下。有关可用隔离设备创建选项的列表,请参阅 pcs stonith -h
显示。
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]
以下命令为单一节点创建一个隔离设备。
pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
有些隔离设备只能隔离一个节点,其他设备则可能隔离多个节点。您创建隔离设备时指定的参数取决于您的隔离设备的支持和要求。
- 有些隔离设备可自动决定它们可以隔离哪些节点。
-
您可以在创建隔离设备时使用
pcmk_host_list
参数,以指定由该隔离设备控制的所有机器。 -
有些隔离设备需要主机名与隔离设备可识别的规格映射。在创建隔离设备时,您可以使用
pcmk_host_map
参数来映射主机名。
有关 pcmk_host_list
和 pcmk_host_map
参数的详情,请参考 隔离设备的常规属性。
配置隔离设备后,您必须测试该设备以保证其可以正常工作。有关测试隔离设备的详情,请参考 测试隔离设备。
4.4.3. 隔离设备的常规属性 复制链接链接已复制到粘贴板!
您可以为隔离设备设置很多常规属性,以及决定隔离行为的各种集群属性。
任何集群节点都可以使用任何隔离设备隔离保护其它集群节点,无论隔离资源是启动还是停止。资源是否启动只控制设备的重复监控,而不控制是否使用资源,但以下情况除外:
-
您可以通过运行
pcs stonith disable stonith_id
命令来禁用隔离设备。这将阻止任何节点使用该设备。 -
要防止特定节点使用隔离设备,您可以使用
pcs constraint location … avoids
命令为隔离资源配置位置约束。 -
配置
stonith-enabled=false
将完全禁用隔离。但请注意,红帽不支持隔离功能被禁用的集群,因为它不适用于生产环境。
下表描述了您可以为隔离设备设置的一般属性。
项 | 类型 | Default(默认) | 描述 |
---|---|---|---|
| 字符串 |
用于不支持主机名的设备的主机名到端口号的映射。例如: | |
| 字符串 |
此设备控制的机器列表(可选,除非 | |
| 字符串 |
如果设置了
* 否则,
* 否则,
* 否则, |
如何确定被设备控制的机器。允许的值: |
下表总结了您可以为隔离设备设置的其他属性。请注意,这些属性仅适用于高级使用。
项 | 类型 | Default(默认) | 描述 |
---|---|---|---|
| 字符串 | port |
提供端口的一个替代参数。有些设备不支持标准端口参数,或者可能会提供额外的端口。使用这个参数指定一个替代的、针对于具体设备的参数,它代表要被隔离的机器。值 |
| 字符串 | reboot |
要运行的一个替代命令,而不是 |
| time | 60s |
指定用于重新启动操作的替代超时,而不是 |
| 整数 | 2 |
在超时时间内重试 |
| 字符串 | off |
要运行的一个替代命令,而不是 |
| time | 60s |
指定用于 off 操作的替代超时,而不是 |
| 整数 | 2 | 在超时时间内重试 off 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前重试操作的次数。 |
| 字符串 | list |
要运行的一个替代命令,而不是 |
| time | 60s | 指定 list 操作使用的特代的超时时间。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、list 操作使用的、特定于设备的超时时间。 |
| 整数 | 2 |
在超时时间内重试 |
| 字符串 | monitor |
要运行的一个替代命令,而不是 |
| time | 60s |
指定用于 monitor 操作的替代超时,而不是 |
| 整数 | 2 |
在超时时间内重试 |
| 字符串 | status |
要运行的一个替代命令,而不是 |
| time | 60s |
指定用于 status 操作的替代超时,而不是 |
| 整数 | 2 | 在超时时间内重试 status 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 status 操作的次数。 |
| 字符串 | 0s |
为隔离操作启用基本延迟,并指定基本延迟值。您可以使用 |
| time | 0s |
为隔离操作启用一个随机延迟,并指定最大延迟,即组合基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且 |
| 整数 | 1 |
在这个设备上可并行执行的最大操作数量。需要首先配置集群属性 |
| 字符串 | on |
仅供高级使用:要运行的一个替代命令,而不是 |
| time | 60s |
仅供高级使用:指定用于 |
| 整数 | 2 |
仅供高级使用:超时时间内重试 |
除了可以为单独的隔离设备设置的属性外,您还可以设置用来决定隔离行为的集群属性,如下表所述。
选项 | 默认 | 描述 |
---|---|---|
| true |
表示失败的节点以及带有资源无法停止的节点应该被隔离。保护数据需要将此设置为
如果为
红帽只支持将这个值设置为 |
| reboot |
发送到隔离设备的操作。允许的值: |
| 60s | 等待 STONITH 操作完成的时间。 |
| 10 | 在集群不再立即重新尝试之前,隔离可以失败的次数。 |
| 在认为某个节点被硬件 wathcdog 终止前等待的最长时间。建议将此值设置为硬件 watchdog 超时值的两倍。只有在使用 watchdog-only SBD 配置进行隔离时才需要这个选项。 | |
| true | 允许并行执行隔离操作。 |
| stop |
决定集群节点在收到其自身隔离通知时应如何响应。如果错误配置了隔离,或者使用 fabric 隔离方式当没有中断集群的通信,集群节点可能会收到其自身隔离的通知信息。允许的值为
虽然此属性的默认值是 |
| 0(禁用) | 设置一个允许您配置双节点集群的隔离延迟,以便在脑裂情况下,运行最少或最不重要资源的节点是被隔离的节点。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟。 |
4.4.4. 隔离延迟 复制链接链接已复制到粘贴板!
当集群通信在双节点集群中丢失时,一个节点可能首先检测到此节点,并隔离其他节点。但是,如果两个节点同时检测到这个,则每个节点都可以启动其他节点的隔离,使两个节点关闭或重置。通过设置隔离延迟,您可以降低两个集群节点相互隔离的可能性。您可以在具有超过两个节点的集群中设置延迟,但这通常不会有任何好处,因为只有具有仲裁的分区将启动隔离。
您可以根据系统要求设置不同类型的隔离延迟。
静态隔离延迟
静态隔离延迟是一个固定的、预先确定的延迟。在一个节点上设置静态延迟使该节点更有可能被隔离,因为它增加了检测到丢失的通信后,其他节点首先启动隔离的机会。在主动/被动集群中,在被动节点上设置一个延迟,使得在通信中断时,被动节点将更有可能被隔离。您可以使用
pcs_delay_base
集群属性配置静态延迟。当单独的隔离设备用于每个节点时,或者一个隔离设备用于所有节点时,您可以设置此属性。动态隔离延迟
动态隔离延迟是随机的。它可能会有所不同,并在需要隔离时确定。您可以配置一个随机延迟,并使用
pcs_delay_max
集群属性为组合的基本延迟和随机延迟指定最大值。当每个节点的隔离延迟是随机的时,被隔离的节点也是随机的。如果您的集群被配置为在主动/主动设计中具有所有节点的单个隔离设备,则可能会发现此功能很有用。优先级隔离延迟
优先级隔离延迟基于活跃的资源优先级。如果所有资源具有相同的优先级,则运行最少资源的节点是被隔离的节点。在大多数情况下,您只使用一个与延迟相关的参数,但可以组合它们。合并与延迟相关的参数,将资源的优先级值加在一起,以创建总延迟。您可以使用
priority-fencing-delay
集群属性配置优先级隔离延迟。您可以在主动/主动集群设计中发现此功能,因为它可以在节点之间的通信丢失时让运行最少资源的节点更有可能被隔离。
pcmk_delay_base
集群属性
设置 pcmk_delay_base
集群属性为隔离启用了基本延迟,并指定了基本延迟值。
当您除了设置 pcmk_delay_base
属性,又设置了 pcmk_delay_max
集群属性时,整个延迟会从添加到此静态延迟的随机延迟值中派生,以便总和保持在最大延迟之下。当您设置了 pcmk_delay_base
,但没有设置 pcmk_delay_max
时,延迟没有随机的组件,它将是 pcmk_delay_base
的值。
您可以使用 pcmk_delay_base
参数为不同的节点指定不同的值。这允许在双节点集群中使用单个隔离设备,每个节点有不同的延迟。您不需要配置两个单独的设备来使用单独的延迟。要为不同的节点指定不同的值,您可以使用与 pcmk_host_map
类似的语法,将主机名映射到该节点的延迟值。例如,在隔离 node1
时,node1:0;node2:10s
将不会使用延迟,在隔离 node2
时使用 10 秒的延迟。
pcmk_delay_max
集群属性设置
pcmk_delay_max
集群属性启用了隔离操作的随机延迟,并指定了最大延迟,这是组合的基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且pcmk_delay_max
为 10,则随机延迟将在 3 和 10 之间。当您除了设置
pcmk_delay_max
属性外,还设置了pcmk_delay_base
集群属性时,整个延迟是从添加到此静态延迟的随机延迟值中派生的,以便总和保持在最大延迟之下。当您设置pcmk_delay_max
,但没有设置pcmk_delay_base
时,这个延迟没有静态组件。
priority-fencing-delay
集群属性
设置 priority-fencing-delay
集群属性允许您配置一个双节点集群,以便在脑裂的情况下,运行最少或最不重要资源的节点是被隔离的节点。
priority-fencing-delay
属性可以设置为持续时间。这个属性的默认值为 0(禁用)。如果将此属性被设置为非零值,并且优先级 meta-attribute 为至少一个资源进行了配置,那么在脑裂的情况下,在其上运行的具有所有资源的最高组合优先级的节点将更有可能保持正常运行。例如,如果您设置了 pcs resource defaults update priority=1
和 pcs property set priority-fencing-delay=15s
,且没有设置其他优先级,那么运行最多资源的节点将更有可能保持正常运行,因为其他节点在启动隔离前将等待 15 秒。如果特定资源比其他资源更重要,您可以赋予它更高的优先权。
如果为该克隆配置了优先级,运行可升级的克隆 master 角色的节点会得到额外的 1 点。
隔离延迟的交互
设置多种类型的隔离延迟会产生以下结果:
-
使用
priority-fencing-delay
属性设置的任何延迟都被添加到pcmk_delay_base
和pcmk_delay_max
隔离设备属性中的任何延迟中。当两个节点具有相等的优先级时,或者两个节点因为节点丢失以外的原因需要隔离时,这种行为允许一些延迟,例如当为资源监控器操作设置了on-fail=fencing
时。当设置这些延迟的组合时,将priority-fencing-delay
属性设置为一个明显大于pcmk_delay_base
和pcmk_delay_max
中的最大延迟的值,以确保优先级的节点是首选的。将此属性设置为此值的两倍通常是安全的。 -
只有 Pacemaker 本身调度的隔离才能观察到隔离延迟。由外部代码(如
dlm_controld
)调度的隔离和由pcs stonith fence
命令实现的隔离不会向隔离设备提供必要信息。 -
有些单独的隔离代理实现一个延迟参数,其名称由代理决定,并且其独立于使用
pcmk_delay_
* 属性配置的延迟。如果同时配置了这些延迟,它们会被加在一起,通常不会一起使用。
4.4.5. 测试隔离设备 复制链接链接已复制到粘贴板!
隔离(fencing)是红帽集群基础结构的基本部分,对于验证或测试隔离是否正常运行至关重要。
当 Pacemaker 集群节点或 Pacemaker 远程节点被隔离时,应该发生硬终止,而不是操作系统的安全关闭。如果您的系统隔离节点时发生安全关闭,请在 /etc/systemd/logind.conf
文件中禁用 ACPI 软关闭,以便您的系统会忽略任何按电源按钮的信号。有关在 logind.conf
文件中禁用 ACPI soft-off 的说明,请参阅在 logind.conf 文件中禁用 ACPI soft-off
使用以下步骤测隔离护设备。
流程
使用 SSH、Telnet、HTTP 或者用来连接到设备的任何远程协议,来手动登录并测试隔离设备,或者查看给出的输出。例如,如果您要为启用了 IPMI 的设备配置隔离,则尝试使用
ipmitool
远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。如果您无法登录到隔离设备,请确定设备是可以被 ping 到的,没有因为如防火墙等配置限制对隔离设备的访问,在隔离设备中启用了远程访问,且有正确的凭证。
使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。
注意这些示例将为 iLO 设备使用
fence_ipmilan
隔离代理脚本。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。以下示例显示了使用
-o status
参数运行fence_ipmilan
隔离代理脚本的格式,来检查另一个节点上的隔离设备接口的状态,而实际上并没有对该节点进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个命令时,您可以为 iLO 设备指定打开和关闭权限的 iLO 用户的名称和密码。fence_ipmilan -a ipaddress -l username -p password -o status
# fence_ipmilan -a ipaddress -l username -p password -o status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了使用
-o reboot
参数运行fence_ipmilan
隔离代理脚本的格式。在一个节点上运行此命令可重新引导此 iLO 设备管理的节点。fence_ipmilan -a ipaddress -l username -p password -o reboot
# fence_ipmilan -a ipaddress -l username -p password -o reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果隔离代理无法正确地执行 status、off、on 或 reboot 操作,您应该检查硬件、隔离设备的配置以及命令的语法。另外,您可以运行启用了 debug 输出的隔离代理脚本。调试输出会记录隔离设备时失败的事件,对于一些隔离代理,这个信息可能非常有用。
fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当诊断发生的故障时,您应该确定手动登录到隔离设备时指定的选项与您使用隔离代理传递给隔离代理的操作相同。
对于支持加密连接的隔离代理,您可能会因为证书验证失败而看到一个错误,这需要您信任主机或使用隔离代理的
ssl-insecure
参数。同样,如果在目标设备上禁用了 SSL/TLS,可能需要在为隔离代理设置 SSL 参数时考虑此事项。注意如果正在测试的隔离代理是
fence_drac
、fence_ilo
或系统管理设备的其他一些隔离代理,并且一直出现故障,则返回尝试fence_ipmilan
。大多数系统管理卡支持 IPMI 远程登录,唯一支持的隔离代理是fence_ipmilan
。一旦隔离设备在集群中配置了与手动操作相同的选项,并且集群已经启动,则可以从任何节点(或者多次从不同的节点)使用
pcs stonith fence
命令来测试隔离,如下例所示。pcs stonith fence
命令从 CIB 中读取集群配置,并调用配置的隔离代理来执行隔离操作。这会验证集群配置是否正确。pcs stonith fence node_name
# pcs stonith fence node_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
pcs stonith fence
命令正常工作,这意味着发生隔离事件时集群的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。- 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
- 检查该设备的密码和用户名是否包含 bash shell 可能会错误解析的特殊字符。请确定,使用引号来包括您输入的密码和用户名是否可以解决这个问题。
-
检查是否可以使用您在
pcs stonith
命令中指定的 IP 地址或主机名连接到设备。例如:如果您在 stonith 命令中给出主机名,但使用 IP 地址进行测试,则这不是一个有效的测试。 如果您可以访问您的隔离设备使用的协议,使用那个协议尝试连接该设备。例如,很多代理都使用 ssh 或者 telnet。您应该尝试使用您在配置该设备时提供的凭证连接到该设备,查看是否收到有效提示符并登录该设备。
如果您确定所有参数都正确,但仍无法连接到隔离设备,则可以查看隔离设备的日志信息(如果隔离设备提供了日志)。这会显示该用户是否已连接以及该用户发出什么命令。您还可以在
/var/log/messages
文件中搜索 stonith 实例和错误 ,这可以了解发生了什么,但有些代理可以提供额外的信息。
隔离设备测试正常工作并启动并运行集群后,测试实际故障。要做到这一点,在集群中执行应启动令牌丢失的操作。
关闭网络。如何关闭网络取决于您的具体配置。在很多情况下,您可以从主机中物理拔掉网线或电源电缆。有关模拟网络故障的详情,请查看红帽知识库解决方案 模拟 RHEL 集群上网络故障的正确方法是什么?
注意不推荐通过在本地主机中禁用网络接口而不是物理断开网线或者电源电缆的方法进行测试,因为这无法准确模拟典型的实际失败。
使用本地防火墙的阻塞 corosync 的入站和出站网络流落。
以下示例会阻止 corosync,假设使用默认的 corosync 端口,
firewalld
用作本地防火墙,corosync 使用的网络接口位于默认防火墙区内:firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
sysrq-trigger
模拟崩溃,并使您的机器死机。请注意,触发内核 panic 可能会导致数据丢失 ; 建议首先禁用集群资源。echo c > /proc/sysrq-trigger
# echo c > /proc/sysrq-trigger
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.6. 配置隔离级别 复制链接链接已复制到粘贴板!
Pacemaker 通过一个称为隔离拓扑的功能实现有多个设备的节点的隔离。要实现拓扑结构,根据常规创建独立设备,然后在配置中的隔离拓扑部分定义一个或多个隔离级别。
Pacemaker 会按如下方式处理隔离级别:
- 级别以整数形式递增,从 1 开始。
- 如果设备失败,对当前级别的处理会中断。不会执行该级别的其他设备,而是尝试下一个级别。
- 如果所有设备被成功隔离,那么该级别已成功,且不会尝试其他级别。
- 当一个级别被通过(success)或所有级别都已经被尝试(failed)后,操作就会完成。
使用以下命令为节点添加隔离级别。这些设备以逗号分开的 stonith
id 列表形式提供,对该级别的节点尝试使用这些设备。
pcs stonith level add level node devices
pcs stonith level add level node devices
以下示例设置了隔离级别,以便在设备 my_ilo
失败且无法隔离节点时,Pacemaker 会尝试使用设备 my_apc
。
先决条件
-
您已为节点
rh7-2
配置了名为my_ilo
的 ilo 隔离设备。 -
您已为节点
rh7-2
配置了名为my_apc
的 apc 隔离设备。
流程
为节点
rh7-2
上的隔离设备my_ilo
添加隔离级别 1。pcs stonith level add 1 rh7-2 my_ilo
# pcs stonith level add 1 rh7-2 my_ilo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为节点
rh7-2
上的隔离设备my_apc
添加隔离级别 2。pcs stonith level add 2 rh7-2 my_apc
# pcs stonith level add 2 rh7-2 my_apc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出当前配置的隔离级别。
pcs stonith level
# pcs stonith level Node: rh7-2 Level 1 - my_ilo Level 2 - my_apc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.7. 删除隔离级别 复制链接链接已复制到粘贴板!
您可以删除指定节点和设备的隔离级别。如果没有指定节点或设备,则您指定的隔离级别会从所有节点中删除。
流程
删除指定节点和设备的隔离级别:
pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
# pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.8. 清除隔离级别 复制链接链接已复制到粘贴板!
您可以清除指定节点或 stonith id 上的隔离级别。如果您没有指定节点或 stonith id,则会清除所有隔离级别。
流程
清除指定节点或 stinith id 上的隔离级别:
pcs stonith level clear [node]|stonith_id(s)]
# pcs stonith level clear [node]|stonith_id(s)]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您指定一个以上的 stonith id,则必须用逗号分开(不要有空格),如下例所示。
pcs stonith level clear dev_a,dev_b
# pcs stonith level clear dev_a,dev_b
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.9. 验证隔离级别中的节点和设备 复制链接链接已复制到粘贴板!
您可以验证所有在隔离级别指定的隔离设备和节点都存在。
流程
使用以下命令验证在隔离级别中指定的所有隔离设备和节点是否存在:
pcs stonith level verify
# pcs stonith level verify
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.10. 在隔离拓扑中指定节点 复制链接链接已复制到粘贴板!
您可以在隔离拓扑中通过在节点名称上应用的正则表达式、节点属性及其值来指定节点。
流程
以下命令将节点 node1、
node
2node3
配置为使用隔离设备apc1
和apc2
,节点node4
、node5
和node6
使用隔离设备apc3
和apc4
:pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
# pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 # pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令使用节点属性匹配得到相同的结果:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.11. 配置冗余电源的隔离 复制链接链接已复制到粘贴板!
当为冗余电源配置隔离时,集群必须确保在尝试重启主机时,在恢复电源前两个电源都关闭。
如果节点永远无法完全断电,则该节点可能无法释放其资源。这可能会导致同时访问这些资源,并导致节点崩溃的问题。
您只需要定义每个设备一次,并指定需要两者来隔离节点。
流程
创建第一个隔离设备。
pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
# pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建第二个隔离设备。
pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
# pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定需要这两个设备来隔离节点。
pcs stonith level add 1 node1.example.com apc1,apc2 pcs stonith level add 1 node2.example.com apc1,apc2
# pcs stonith level add 1 node1.example.com apc1,apc2 # pcs stonith level add 1 node2.example.com apc1,apc2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4.12. 管理隔离设备 复制链接链接已复制到粘贴板!
pcs
命令行界面提供各种命令,您可以用来在配置后管理隔离设备。
4.4.12.1. 显示配置的隔离设备 复制链接链接已复制到粘贴板!
以下命令显示所有目前配置的隔离设备。如果指定了 stonith_id,命令仅显示那个配置的隔离设备的选项。如果指定了 --full
选项,则会显示所有配置的隔离选项。
pcs stonith config [stonith_id] [--full]
pcs stonith config [stonith_id] [--full]
4.4.12.2. 使用 pcs 命令导出隔离设备 复制链接链接已复制到粘贴板!
您可以使用 pcs stonith config
命令的 --output-format=cmd
选项显示可用于在不同系统上重新创建配置的隔离设备的 pcs
命令。
以下命令创建一个 fence_apc_snmp
隔离设备,并显示您可以用来重新创建该设备的 pcs
命令。
4.4.12.3. 导出隔离级别配置 复制链接链接已复制到粘贴板!
pcs stonith config
和 pcs stonith level config
命令支持 --output-format=
选项,来以 JSON 格式和作为 pcs
命令隔离级别配置。
-
指定
--output-format=cmd
会显示从当前集群配置中创建的配置隔离级别的pcs
命令。您可以使用这些命令在不同系统上重新创建配置的隔离级别。 -
指定
--output-format=json
显示 JSON 格式的隔离级别配置,它适用于机器解析。
4.4.12.4. 修改和删除隔离设备 复制链接链接已复制到粘贴板!
使用以下命令向当前配置的隔离设备修改或添加选项。
pcs stonith update stonith_id [stonith_device_options]
pcs stonith update stonith_id [stonith_device_options]
使用 pcs stonith update
命令更新 SCSI 隔离设备会导致在隔离资源运行的同一节点上运行的所有资源重启。您可以使用以下命令的任一版本来更新 SCSI 设备,而不会重启其他集群资源。SCSI 隔离设备可被配置为多路径设备。
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2 pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
使用以下命令从当前的配置中删除隔离设备。
pcs stonith delete stonith_id
pcs stonith delete stonith_id
4.4.12.5. 手动隔离一个集群节点 复制链接链接已复制到粘贴板!
您可以使用以下命令手动隔离节点。如果您指定了 --off
选项,这将使用 off
API 调用 stonith,这将关闭节点,而不是重启它。
pcs stonith fence node [--off]
pcs stonith fence node [--off]
如果隔离设备无法隔离节点,即使它不再活跃,集群可能无法恢复节点上的资源。如果发生了这种情况,在手动确定该节点已关闭后,您可以输入以下命令向集群确认节点已关闭,并释放其资源以用于恢复。
如果您指定的节点实际上没有关闭,但运行通常由集群控制的集群软件或服务,则会发生数据损坏和集群故障。
pcs stonith confirm node
pcs stonith confirm node
4.4.12.6. 禁用隔离设备 复制链接链接已复制到粘贴板!
要禁用隔离设备,请运行 pcs stonith disable
命令。
以下命令禁用隔离设备 myapc
。
pcs stonith disable myapc
# pcs stonith disable myapc
4.4.12.7. 防止节点使用隔离设备 复制链接链接已复制到粘贴板!
要防止特定节点使用隔离设备,您可以为隔离资源配置位置限制。
以下示例阻止隔离设备 node1-ipmi
在 node1
上运行。
pcs constraint location node1-ipmi avoids node1
# pcs constraint location node1-ipmi avoids node1
4.4.13. 配置 ACPI 以用于集成的隔离设备 复制链接链接已复制到粘贴板!
如果您的集群使用集成的隔离设备,必须配置 ACPI(高级配置和电源界面)以保证迅速和完全的隔离。
如果将集群节点配置为使用集成的隔离设备保护,则为该节点禁用 ACPI Soft-Off。禁用 ACPI Soft-Off 允许集成的隔离设备立即并完全关闭节点,而不是尝试彻底关闭(例如,shutdown -h now
)。否则,如果启用了 ACPI Soft-Off,集成的隔离设备可能需要 4 秒以上的时间来关闭节点(请参阅下面的备注)。另外,如果启用了 ACPI Soft-Off,且在关闭过程中有一个节点 panic 或停滞,则集成的保护设备可能无法关闭该节点。在这些情况下,隔离会被延迟或者失败。因此,当使用集成隔离设备隔离节点并启用 ACPI Soft-Off时,集群恢复会很慢,或者需要管理员进行干预才能恢复。
保护节点所需时间取决于所使用的集成的保护设备。有些集成的保护设备性能与按住电源按钮相当,因此隔离设备可在 4-5 秒内关闭该节点。其他集成的隔离设备性能与按电源开关一致,依靠操作系统关闭该节点,因此隔离设备关闭该节点的时间要大大超过 4-5 秒。
- 禁用 ACPI Soft-Off 的首选方法是将 BIOS 设置改为 "instant-off" 或无延迟关闭该节点的对等设置,如 禁用 ACPI Soft-Off 中所述。
使用 BIOS 禁用 ACPI Soft-Off 可能不适用于某些系统。如果无法使用 BIOS 禁用 ACPI Soft-Off,您可以使用以下备选方法之一禁用 ACPI Soft-Off:
-
在
/etc/systemd/logind.conf
文件中设置HandlePowerKey=ignore
,并在隔离时验证节点节点是否立即关闭,如 logind.conf 文件中禁用 ACPI 软关闭 中所述。这是禁用 ACPI Soft-Off 的第一个替代方法。 在内核引导命令行中附加
acpi=off
,如 在 GRUB 2 文件中完全禁用 ACPI 中所述。这是禁用 ACPI Soft-Off 的第二个替代方法,如果首选方法或第一个替代方法不可用。重要这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
4.4.13.1. 使用 BIOS 禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
您可以按照以下步骤配置每个集群节点的 BIOS 来禁用 ACPI Soft-Off。
使用 BIOS 禁用 ACPI Soft-Off 的步骤可能因服务器系统而异。您应该在您的硬件文档中验证此步骤。
流程
-
重启节点,并启动
BIOS CMOS 设置工具
程序。 - 进入 Power 菜单(或者对等的电源管理菜单)。
在 Power 菜单中,将
Soft-Off by PWR-BTTN
功能(或等效的功能)设置为Instant-Off
(或使用无延迟电源按钮关闭节点的对等设置)。以下BIOS CMOS Setup Utiliy
示例显示ACPI Function
设置为Enabled
,Soft-Off by PWR-BTTN
设置为Instant-Off
。注意与
ACPI Function
等效,Soft-Off by PWR-BTTN
和Instant-Off
可能因计算机而异。但这个过程的目的是配置 BIOS,以便计算机能无延迟地关闭电源按钮。-
退出
BIOS CMOS 设置工具
程序,保存 BIOS 配置。 - 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
BIOS CMOS 设置实用程序
:
`Soft-Off by PWR-BTTN` set to `Instant-Off`
`Soft-Off by PWR-BTTN` set to
`Instant-Off`
本例展示了 ACPI Function
设置为 Enabled
,Soft-Off by PWR-BTTN
设置为 Instant-Off
。
4.4.13.2. 在 logind.conf 文件中禁用 ACPI Soft-Off 复制链接链接已复制到粘贴板!
要禁用 /etc/systemd/logind.conf
文件中的 电源密钥处理,请使用以下流程。
流程
在
/etc/systemd/logind.conf
文件中定义以下配置:HandlePowerKey=ignore
HandlePowerKey=ignore
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
systemd-logind
服务:systemctl restart systemd-logind.service
# systemctl restart systemd-logind.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备。
4.4.13.3. 在 GRUB 2 文件中完全禁用 ACPI 复制链接链接已复制到粘贴板!
您可以通过在内核的 GRUB 菜单条目中添加 acpi=off
来禁用 ACPI Soft-Off。
这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。
流程
将
--args
选项与grubby
工具的--update-kernel
选项结合使用,来更改每个集群节点的grub.cfg
文件,如下所示:grubby --args=acpi=off --update-kernel=ALL
# grubby --args=acpi=off --update-kernel=ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重新引导节点。
验证
- 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备