4.4. 在 Red Hat High Availability 集群中配置隔离功能


如果与集群中某个节点通信失败,那么集群中的其他节点必须能够限制或释放对故障集群节点可访问的资源的访问。这无法通过通过联系集群节点本身来实现,因为集群节点可能没有响应。反之,必须提供一个外部的方法来实现。这个方法为称为隔离(fencing)。隔离设备是一个外部设备,集群使用它用来限制错误节点对共享资源的访问,或对集群的节点执行硬重启。

如果没有配置隔离设备,您就无法知道以前被出现问题的集群节点使用的资源已被释放,这可能会阻止服务在集群的其他节点中运行。因此,该系统可能会错误地假设集群节点释放了它的资源,从而可能导致数据崩溃和数据丢失。没有隔离设备配置的数据完整性就无法保证,集群配置将不被支持。

当隔离进行时,不允许执行其他集群操作。在隔离完成前,或集群节点重启后重新加入集群前,集群的正常操作不能恢复。有关隔离及其在红帽高可用性集群中重要性的更多信息,请参阅红帽知识库解决方案 红帽高可用性集群中的隔离

4.4.1. 显示可用的隔离代理及其选项

以下命令可用于查看可用的隔离代理和特定隔离代理的可用选项。

注意

您的系统硬件决定了用于集群的隔离设备的类型。有关支持的平台和架构,以及不同的隔离设备,请参阅红帽知识库文章 RHEL 高可用性集群的支持策略 中的 集群平台和架构 部分。

运行以下命令列出所有可用的隔离代理。当您指定过滤器时,这个命令只会显示与过滤器匹配的隔离代理。

pcs stonith list [filter]
Copy to Clipboard Toggle word wrap

运行以下命令以显示指定隔离代理的选项。

pcs stonith describe [stonith_agent]
Copy to Clipboard Toggle word wrap

例如:以下命令显示 APC 通过 telnet/SSH 的隔离代理的选项。

# pcs stonith describe fence_apc
Stonith options for: fence_apc
  ipaddr (required): IP Address or Hostname
  login (required): Login Name
  passwd: Login password or passphrase
  passwd_script: Script to retrieve password
  cmd_prompt: Force command prompt
  secure: SSH connection
  port (required): Physical plug number or name of virtual machine
  identity_file: Identity file for ssh
  switch: Physical switch number on device
  inet4_only: Forces agent to use IPv4 addresses only
  inet6_only: Forces agent to use IPv6 addresses only
  ipport: TCP port to use for connection with device
  action (required): Fencing Action
  verbose: Verbose mode
  debug: Write debug information to given file
  version: Display version information and exit
  help: Display help and exit
  separator: Separator for CSV created by operation list
  power_timeout: Test X seconds for status change after ON/OFF
  shell_timeout: Wait X seconds for cmd prompt after issuing command
  login_timeout: Wait X seconds for cmd prompt after login
  power_wait: Wait X seconds after issuing ON/OFF
  delay: Wait X seconds before fencing is started
  retry_on: Count of attempts to retry power on
Copy to Clipboard Toggle word wrap
警告

对于提供 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]
Copy to Clipboard Toggle word wrap

以下命令为单一节点创建一个隔离设备。

# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s
Copy to Clipboard Toggle word wrap

有些隔离设备只能隔离一个节点,其他设备则可能隔离多个节点。您创建隔离设备时指定的参数取决于您的隔离设备的支持和要求。

  • 有些隔离设备可自动决定它们可以隔离哪些节点。
  • 您可以在创建隔离设备时使用 pcmk_host_list 参数,以指定由该隔离设备控制的所有机器。
  • 有些隔离设备需要主机名与隔离设备可识别的规格映射。在创建隔离设备时,您可以使用 pcmk_host_map 参数来映射主机名。

有关 pcmk_host_listpcmk_host_map 参数的详情,请参考 隔离设备的常规属性

配置隔离设备后,您必须测试该设备以保证其可以正常工作。有关测试隔离设备的详情,请参考 测试隔离设备

4.4.3. 隔离设备的常规属性

您可以为隔离设备设置很多常规属性,以及决定隔离行为的各种集群属性。

任何集群节点都可以使用任何隔离设备隔离保护其它集群节点,无论隔离资源是启动还是停止。资源是否启动只控制设备的重复监控,而不控制是否使用资源,但以下情况除外:

  • 您可以通过运行 pcs stonith disable stonith_id 命令来禁用隔离设备。这将阻止任何节点使用该设备。
  • 要防止特定节点使用隔离设备,您可以使用 pcs constraint location …​ avoids 命令为隔离资源配置位置约束。
  • 配置 stonith-enabled=false 将完全禁用隔离。但请注意,红帽不支持隔离功能被禁用的集群,因为它不适用于生产环境。

下表描述了您可以为隔离设备设置的一般属性。

Expand
表 4.1. 隔离设备的常规属性
类型Default(默认)描述

pcmk_host_map

字符串

 

用于不支持主机名的设备的主机名到端口号的映射。例如:node1:1;node2:2,3 告知集群 node1 使用端口 1 ,对 node2 使用端口 2 和端口 3。pcmk_host_map 属性支持在 pcmk_host_map 值里在值前面使用反斜杠的特殊字符。例如,您可以指定 pcmk_host_map="node3:plug\ 1",来在主机别名中包含一个空格。

pcmk_host_list

字符串

 

此设备控制的机器列表(可选,除非 pcmk_host_check=static-list)。

pcmk_host_check

字符串

如果设置了 pcmk_host_listpcmk_host_map,则为 * static-list

* 否则,dynamic-list(如果隔离设备支持 list 操作)

* 否则,status(如果隔离设备支持 status 操作)

* 否则,none.

如何确定被设备控制的机器。允许的值: dynamic-list (查询设备)、static-list (检查 pcmk_host_list 属性)、none(假设每个设备都可以隔离每台机器)

下表总结了您可以为隔离设备设置的其他属性。请注意,这些属性仅适用于高级使用。

Expand
表 4.2. 隔离设备的高级属性
类型Default(默认)描述

pcmk_host_argument

字符串

port

提供端口的一个替代参数。有些设备不支持标准端口参数,或者可能会提供额外的端口。使用这个参数指定一个替代的、针对于具体设备的参数,它代表要被隔离的机器。值 none 可用于告之集群不要提供任何额外的参数。

pcmk_reboot_action

字符串

reboot

要运行的一个替代命令,而不是 reboot 。有些设备不支持标准命令或者可能需要提供额外的命令。使用这个选项指定可执行 reboot 操作的替代的、特定于具体设备的命令。

pcmk_reboot_timeout

time

60s

指定用于重新启动操作的替代超时,而不是 stonith-timeout。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、重启操作使用的、特定于设备的超时时间。

pcmk_reboot_retries

整数

2

在超时时间内重试 reboot 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前重试重启动作的次数。

pcmk_off_action

字符串

off

要运行的一个替代命令,而不是 off。有些设备不支持标准命令或者可能需要提供额外的命令。使用这个选项指定可执行 off 操作的替代的、特定于具体设备的命令。

pcmk_off_timeout

time

60s

指定用于 off 操作的替代超时,而不是 stonith-timeout。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、off 操作使用的、特定于设备的超时时间。

pcmk_off_retries

整数

2

在超时时间内重试 off 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前重试操作的次数。

pcmk_list_action

字符串

list

要运行的一个替代命令,而不是 list。有些设备不支持标准命令或者可能需要提供额外的命令。使用这个选项指定可执行 list 操作的替代的、特定于具体设备的命令。

pcmk_list_timeout

time

60s

指定 list 操作使用的特代的超时时间。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、list 操作使用的、特定于设备的超时时间。

pcmk_list_retries

整数

2

在超时时间内重试 list 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 list 操作的次数。

pcmk_monitor_action

字符串

monitor

要运行的一个替代命令,而不是 monitor。有些设备不支持标准命令或者可能需要提供额外的命令。使用这个选项指定可执行 monitor 操作的替代的、特定于具体设备的命令。

pcmk_monitor_timeout

time

60s

指定用于 monitor 操作的替代超时,而不是 stonith-timeout。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、monitor 操作使用的、特定于设备的超时时间。

pcmk_monitor_retries

整数

2

在超时时间内重试 monitor 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 monitor 操作的次数。

pcmk_status_action

字符串

status

要运行的一个替代命令,而不是 status。有些设备不支持标准命令或者可能需要提供额外的命令。使用这个选项指定可执行 status 操作的替代的、特定于具体设备的命令。

pcmk_status_timeout

time

60s

指定用于 status 操作的替代超时,而不是 stonith-timeout。和一般的设备相比,有些设备需要更长或更短的时间完成。使用此选项指定替代的、status 操作使用的、特定于设备的超时时间。

pcmk_status_retries

整数

2

在超时时间内重试 status 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项更改 Pacemaker 在放弃前 status 操作的次数。

pcmk_delay_base

字符串

0s

为隔离操作启用基本延迟,并指定基本延迟值。您可以使用 pcmk_delay_base 参数为不同的节点指定不同的值。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟

pcmk_delay_max

time

0s

为隔离操作启用一个随机延迟,并指定最大延迟,即组合基本延迟和随机延迟的最大值。例如,如果基本延迟为 3,并且 pcmk_delay_max 为 10,则随机延迟将在 3 和 10 之间。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟

pcmk_action_limit

整数

1

在这个设备上可并行执行的最大操作数量。需要首先配置集群属性 concurrent-fencing=true (这是默认值)。值为 -1 代表没有限制。

pcmk_on_action

字符串

on

仅供高级使用:要运行的一个替代命令,而不是 on。有些设备不支持标准命令或者可能需要提供额外的命令。使用它来指定一个执行 on 操作的替代的、特定于设备的命令。

pcmk_on_timeout

time

60s

仅供高级使用:指定用于 on 操作的替代超时, 而不是 stonith-timeout。和一般的设备相比,有些设备需要更长或更短的时间完成。使用它来为 on 操作指定一个替代的、特定于设备的超时。

pcmk_on_retries

整数

2

仅供高级使用:超时时间内重试 on 命令的次数上限。有些设备不支持多个连接。如果设备忙碌了处理另一个任务,操作可能会失败,因此如果还有剩余时间,Pacemaker 会自动重试操作。使用这个选项来更改 Pacemaker 在放弃前重试 on 操作的次数。

除了可以为单独的隔离设备设置的属性外,您还可以设置用来决定隔离行为的集群属性,如下表所述。

Expand
表 4.3. 确定隔离行为的集群属性
选项默认描述

stonith-enabled

true

表示失败的节点以及带有资源无法停止的节点应该被隔离。保护数据需要将此设置为 true

如果为 true 或未设置,集群将拒绝启动资源,除非也配置了一个或多个 STONITH 资源。

红帽只支持将这个值设置为 true 的集群。

stonith-action

reboot

发送到隔离设备的操作。允许的值: rebootoff 。也允许使用值 poweroff,但只适用于旧的设备。

stonith-timeout

60s

等待 STONITH 操作完成的时间。

stonith-max-attempts

10

在集群不再立即重新尝试之前,隔离可以失败的次数。

stonith-watchdog-timeout

 

在认为某个节点被硬件 wathcdog 终止前等待的最长时间。建议将此值设置为硬件 watchdog 超时值的两倍。只有在使用 watchdog-only SBD 配置进行隔离时才需要这个选项。

concurrent-fencing

true

允许并行执行隔离操作。

fence-reaction

stop

决定集群节点在收到其自身隔离通知时应如何响应。如果错误配置了隔离,或者使用 fabric 隔离方式当没有中断集群的通信,集群节点可能会收到其自身隔离的通知信息。允许的值为 stop,来尝试立即停止 Pacemaker 并保持停止状态,或者为 panic ,来尝试立即重启本地节点,并在失败时退回到停止状态。

虽然此属性的默认值是 stop,但这个值的最安全选择是 panic,它尝试立即重启本地节点。如果您希望使用 stop(通常是使用 fabric 隔离方式时),建议对这个参数进行明确设定。

priority-fencing-delay

0(禁用)

设置一个允许您配置双节点集群的隔离延迟,以便在脑裂情况下,运行最少或最不重要资源的节点是被隔离的节点。有关隔离延迟参数及其相互作用的一般信息,请查看 隔离延迟

有关设置集群属性的详情,请参考 https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_high_availability_clusters/index#setting-cluster-properties

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=1pcs property set priority-fencing-delay=15s,且没有设置其他优先级,那么运行最多资源的节点将更有可能保持正常运行,因为其他节点在启动隔离前将等待 15 秒。如果特定资源比其他资源更重要,您可以赋予它更高的优先权。

如果为该克隆配置了优先级,运行可升级的克隆 master 角色的节点会得到额外的 1 点。

隔离延迟的交互

设置多种类型的隔离延迟会产生以下结果:

  • 使用 priority-fencing-delay 属性设置的任何延迟都被添加到 pcmk_delay_basepcmk_delay_max 隔离设备属性中的任何延迟中。当两个节点具有相等的优先级时,或者两个节点因为节点丢失以外的原因需要隔离时,这种行为允许一些延迟,例如当为资源监控器操作设置了 on-fail=fencing 时。当设置这些延迟的组合时,将 priority-fencing-delay 属性设置为一个明显大于pcmk_delay_basepcmk_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

使用以下步骤测隔离护设备。

流程

  1. 使用 SSH、Telnet、HTTP 或者用来连接到设备的任何远程协议,来手动登录并测试隔离设备,或者查看给出的输出。例如,如果您要为启用了 IPMI 的设备配置隔离,则尝试使用 ipmitool 远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。

    如果您无法登录到隔离设备,请确定设备是可以被 ping 到的,没有因为如防火墙等配置限制对隔离设备的访问,在隔离设备中启用了远程访问,且有正确的凭证。

  2. 使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。

    注意

    这些示例将为 iLO 设备使用 fence_ipmilan 隔离代理脚本。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。

    以下示例显示了使用 -o status 参数运行 fence_ipmilan 隔离代理脚本的格式,来检查另一个节点上的隔离设备接口的状态,而实际上并没有对该节点进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个命令时,您可以为 iLO 设备指定打开和关闭权限的 iLO 用户的名称和密码。

    # fence_ipmilan -a ipaddress -l username -p password -o status
    Copy to Clipboard Toggle word wrap

    以下示例显示了使用 -o reboot 参数运行 fence_ipmilan 隔离代理脚本的格式。在一个节点上运行此命令可重新引导此 iLO 设备管理的节点。

    # fence_ipmilan -a ipaddress -l username -p password -o reboot
    Copy to Clipboard Toggle word wrap

    如果隔离代理无法正确地执行 status、off、on 或 reboot 操作,您应该检查硬件、隔离设备的配置以及命令的语法。另外,您可以运行启用了 debug 输出的隔离代理脚本。调试输出会记录隔离设备时失败的事件,对于一些隔离代理,这个信息可能非常有用。

    # fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
    Copy to Clipboard Toggle word wrap

    当诊断发生的故障时,您应该确定手动登录到隔离设备时指定的选项与您使用隔离代理传递给隔离代理的操作相同。

    对于支持加密连接的隔离代理,您可能会因为证书验证失败而看到一个错误,这需要您信任主机或使用隔离代理的 ssl-insecure 参数。同样,如果在目标设备上禁用了 SSL/TLS,可能需要在为隔离代理设置 SSL 参数时考虑此事项。

    注意

    如果正在测试的隔离代理是 fence_dracfence_ilo 或系统管理设备的其他一些隔离代理,并且一直出现故障,则返回尝试 fence_ipmilan。大多数系统管理卡支持 IPMI 远程登录,唯一支持的隔离代理是 fence_ipmilan

  3. 一旦隔离设备在集群中配置了与手动操作相同的选项,并且集群已经启动,则可以从任何节点(或者多次从不同的节点)使用 pcs stonith fence 命令来测试隔离,如下例所示。pcs stonith fence 命令从 CIB 中读取集群配置,并调用配置的隔离代理来执行隔离操作。这会验证集群配置是否正确。

    # pcs stonith fence node_name
    Copy to Clipboard Toggle word wrap

    如果 pcs stonith fence 命令正常工作,这意味着发生隔离事件时集群的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。

    • 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
    • 检查该设备的密码和用户名是否包含 bash shell 可能会错误解析的特殊字符。请确定,使用引号来包括您输入的密码和用户名是否可以解决这个问题。
    • 检查是否可以使用您在 pcs stonith 命令中指定的 IP 地址或主机名连接到设备。例如:如果您在 stonith 命令中给出主机名,但使用 IP 地址进行测试,则这不是一个有效的测试。
    • 如果您可以访问您的隔离设备使用的协议,使用那个协议尝试连接该设备。例如,很多代理都使用 ssh 或者 telnet。您应该尝试使用您在配置该设备时提供的凭证连接到该设备,查看是否收到有效提示符并登录该设备。

      如果您确定所有参数都正确,但仍无法连接到隔离设备,则可以查看隔离设备的日志信息(如果隔离设备提供了日志)。这会显示该用户是否已连接以及该用户发出什么命令。您还可以在 /var/log/messages 文件中搜索 stonith 实例和错误 ,这可以了解发生了什么,但有些代理可以提供额外的信息。

  4. 隔离设备测试正常工作并启动并运行集群后,测试实际故障。要做到这一点,在集群中执行应启动令牌丢失的操作。

    • 关闭网络。如何关闭网络取决于您的具体配置。在很多情况下,您可以从主机中物理拔掉网线或电源电缆。有关模拟网络故障的详情,请查看红帽知识库解决方案 模拟 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
      Copy to Clipboard Toggle word wrap
    • 使用 sysrq-trigger 模拟崩溃,并使您的机器死机。请注意,触发内核 panic 可能会导致数据丢失 ; 建议首先禁用集群资源。

      # echo c > /proc/sysrq-trigger
      Copy to Clipboard Toggle word wrap

4.4.6. 配置隔离级别

Pacemaker 通过一个称为隔离拓扑的功能实现有多个设备的节点的隔离。要实现拓扑结构,根据常规创建独立设备,然后在配置中的隔离拓扑部分定义一个或多个隔离级别。

Pacemaker 会按如下方式处理隔离级别:

  • 级别以整数形式递增,从 1 开始。
  • 如果设备失败,对当前级别的处理会中断。不会执行该级别的其他设备,而是尝试下一个级别。
  • 如果所有设备被成功隔离,那么该级别已成功,且不会尝试其他级别。
  • 当一个级别被通过(success)或所有级别都已经被尝试(failed)后,操作就会完成。

使用以下命令为节点添加隔离级别。这些设备以逗号分开的 stonith id 列表形式提供,对该级别的节点尝试使用这些设备。

pcs stonith level add level node devices
Copy to Clipboard Toggle word wrap

以下示例设置了隔离级别,以便在设备 my_ilo 失败且无法隔离节点时,Pacemaker 会尝试使用设备 my_apc

先决条件

  • 您已为节点 rh7-2 配置了名为 my_ilo 的 ilo 隔离设备。
  • 您已为节点 rh7-2 配置了名为 my_apc 的 apc 隔离设备。

流程

  1. 为节点 rh7-2 上的隔离设备 my_ilo 添加隔离级别 1。

    # pcs stonith level add 1 rh7-2 my_ilo
    Copy to Clipboard Toggle word wrap
  2. 为节点 rh7-2 上的隔离设备 my_apc 添加隔离级别 2。

    # pcs stonith level add 2 rh7-2 my_apc
    Copy to Clipboard Toggle word wrap
  3. 列出当前配置的隔离级别。

    # pcs stonith level
     Node: rh7-2
      Level 1 - my_ilo
      Level 2 - my_apc
    Copy to Clipboard Toggle word wrap

有关节点属性的详情,请参考 https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html-single/configuring_and_managing_high_availability_clusters/index#node-attributes

4.4.7. 删除隔离级别

您可以删除指定节点和设备的隔离级别。如果没有指定节点或设备,则您指定的隔离级别会从所有节点中删除。

流程

  • 删除指定节点和设备的隔离级别:

    # pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
    Copy to Clipboard Toggle word wrap

4.4.8. 清除隔离级别

您可以清除指定节点或 stonith id 上的隔离级别。如果您没有指定节点或 stonith id,则会清除所有隔离级别。

流程

  • 清除指定节点或 stinith id 上的隔离级别:

    # pcs stonith level clear [node]|stonith_id(s)]
    Copy to Clipboard Toggle word wrap
  • 如果您指定一个以上的 stonith id,则必须用逗号分开(不要有空格),如下例所示。

    # pcs stonith level clear dev_a,dev_b
    Copy to Clipboard Toggle word wrap

4.4.9. 验证隔离级别中的节点和设备

您可以验证所有在隔离级别指定的隔离设备和节点都存在。

流程

  • 使用以下命令验证在隔离级别中指定的所有隔离设备和节点是否存在:

    # pcs stonith level verify
    Copy to Clipboard Toggle word wrap

4.4.10. 在隔离拓扑中指定节点

您可以在隔离拓扑中通过在节点名称上应用的正则表达式、节点属性及其值来指定节点。

流程

  • 以下命令将节点 node1、 node 2node3 配置为使用隔离设备 apc1apc2,节点 node4node5node6 使用隔离设备 apc3apc4

    # 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 Toggle word wrap
  • 以下命令使用节点属性匹配得到相同的结果:

    # pcs node attribute node1 rack=1
    # pcs node attribute node2 rack=1
    # pcs node attribute node3 rack=1
    # pcs node attribute node4 rack=2
    # pcs node attribute node5 rack=2
    # pcs node attribute node6 rack=2
    # pcs stonith level add 1 attrib%rack=1 apc1,apc2
    # pcs stonith level add 1 attrib%rack=2 apc3,apc4
    Copy to Clipboard Toggle word wrap

4.4.11. 配置冗余电源的隔离

当为冗余电源配置隔离时,集群必须确保在尝试重启主机时,在恢复电源前两个电源都关闭。

如果节点永远无法完全断电,则该节点可能无法释放其资源。这可能会导致同时访问这些资源,并导致节点崩溃的问题。

您只需要定义每个设备一次,并指定需要两者来隔离节点。

流程

  1. 创建第一个隔离设备。

    # 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 Toggle word wrap
  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 Toggle word wrap
  3. 指定需要这两个设备来隔离节点。

    # pcs stonith level add 1 node1.example.com apc1,apc2
    # pcs stonith level add 1 node2.example.com apc1,apc2
    Copy to Clipboard Toggle word wrap

4.4.12. 管理隔离设备

pcs 命令行界面提供各种命令,您可以用来在配置后管理隔离设备。

4.4.12.1. 显示配置的隔离设备

以下命令显示所有目前配置的隔离设备。如果指定了 stonith_id,命令仅显示那个配置的隔离设备的选项。如果指定了 --full 选项,则会显示所有配置的隔离选项。

pcs stonith config [stonith_id] [--full]
Copy to Clipboard Toggle word wrap

4.4.12.2. 使用 pcs 命令导出隔离设备

您可以使用 pcs stonith config 命令的 --output-format=cmd 选项显示可用于在不同系统上重新创建配置的隔离设备的 pcs 命令。

以下命令创建一个 fence_apc_snmp 隔离设备,并显示您可以用来重新创建该设备的 pcs 命令。

# pcs stonith create myapc fence_apc_snmp ip="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" username="apc" password="apc"
# pcs stonith config --output-format=cmd
Warning: Only 'text' output format is supported for stonith levels
pcs stonith create --no-default-ops --force -- myapc fence_apc_snmp \
  ip=zapc.example.com password=apc 'pcmk_host_map=z1.example.com:1;z2.example.com:2' username=apc \
  op \
    monitor interval=60s id=myapc-monitor-interval-60s
Copy to Clipboard Toggle word wrap

4.4.12.3. 导出隔离级别配置

pcs stonith configpcs 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]
Copy to Clipboard Toggle word wrap

使用 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
Copy to Clipboard Toggle word wrap

使用以下命令从当前的配置中删除隔离设备。

pcs stonith delete stonith_id
Copy to Clipboard Toggle word wrap

4.4.12.5. 手动隔离一个集群节点

您可以使用以下命令手动隔离节点。如果您指定了 --off 选项,这将使用 off API 调用 stonith,这将关闭节点,而不是重启它。

pcs stonith fence node [--off]
Copy to Clipboard Toggle word wrap

如果隔离设备无法隔离节点,即使它不再活跃,集群可能无法恢复节点上的资源。如果发生了这种情况,在手动确定该节点已关闭后,您可以输入以下命令向集群确认节点已关闭,并释放其资源以用于恢复。

警告

如果您指定的节点实际上没有关闭,但运行通常由集群控制的集群软件或服务,则会发生数据损坏和集群故障。

pcs stonith confirm node
Copy to Clipboard Toggle word wrap

4.4.12.6. 禁用隔离设备

要禁用隔离设备,请运行 pcs stonith disable 命令。

以下命令禁用隔离设备 myapc

# pcs stonith disable myapc
Copy to Clipboard Toggle word wrap

4.4.12.7. 防止节点使用隔离设备

要防止特定节点使用隔离设备,您可以为隔离资源配置位置限制。

以下示例阻止隔离设备 node1-ipminode1 上运行。

# pcs constraint location node1-ipmi avoids node1
Copy to Clipboard Toggle word wrap

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 的步骤可能因服务器系统而异。您应该在您的硬件文档中验证此步骤。

流程

  1. 重启节点,并启动 BIOS CMOS 设置工具 程序。
  2. 进入 Power 菜单(或者对等的电源管理菜单)。
  3. 在 Power 菜单中,将 Soft-Off by PWR-BTTN 功能(或等效的功能)设置为 Instant-Off(或使用无延迟电源按钮关闭节点的对等设置)。以下 BIOS CMOS Setup Utiliy 示例显示 ACPI Function 设置为 EnabledSoft-Off by PWR-BTTN 设置为 Instant-Off

    注意

    ACPI Function 等效,Soft-Off by PWR-BTTNInstant-Off 可能因计算机而异。但这个过程的目的是配置 BIOS,以便计算机能无延迟地关闭电源按钮。

  4. 退出 BIOS CMOS 设置工具 程序,保存 BIOS 配置。
  5. 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备

BIOS CMOS 设置实用程序

`Soft-Off by PWR-BTTN` set to
`Instant-Off`
Copy to Clipboard Toggle word wrap

+---------------------------------------------|-------------------+
|    ACPI Function             [Enabled]      |    Item Help      |
|    ACPI Suspend Type         [S1(POS)]      |-------------------|
|  x Run VGABIOS if S3 Resume   Auto          |   Menu Level   *  |
|    Suspend Mode              [Disabled]     |                   |
|    HDD Power Down            [Disabled]     |                   |
|    Soft-Off by PWR-BTTN      [Instant-Off   |                   |
|    CPU THRM-Throttling       [50.0%]        |                   |
|    Wake-Up by PCI card       [Enabled]      |                   |
|    Power On by Ring          [Enabled]      |                   |
|    Wake Up On LAN            [Enabled]      |                   |
|  x USB KB Wake-Up From S3     Disabled      |                   |
|    Resume by Alarm           [Disabled]     |                   |
|  x  Date(of Month) Alarm       0            |                   |
|  x  Time(hh:mm:ss) Alarm       0 :  0 :     |                   |
|    POWER ON Function         [BUTTON ONLY   |                   |
|  x KB Power ON Password       Enter         |                   |
|  x Hot Key Power ON           Ctrl-F1       |                   |
|                                             |                   |
|                                             |                   |
+---------------------------------------------|-------------------+
Copy to Clipboard Toggle word wrap

本例展示了 ACPI Function 设置为 Enabled Soft-Off by PWR-BTTN 设置为 Instant-Off

4.4.13.2. 在 logind.conf 文件中禁用 ACPI Soft-Off

要禁用 /etc/systemd/logind.conf 文件中的 电源密钥处理,请使用以下流程。

流程

  1. /etc/systemd/logind.conf 文件中定义以下配置:

    HandlePowerKey=ignore
    Copy to Clipboard Toggle word wrap
  2. 重启 systemd-logind 服务:

    # systemctl restart systemd-logind.service
    Copy to Clipboard Toggle word wrap

验证

  1. 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备

4.4.13.3. 在 GRUB 2 文件中完全禁用 ACPI

您可以通过在内核的 GRUB 菜单条目中添加 acpi=off 来禁用 ACPI Soft-Off。

重要

这个方法可完全禁用 ACPI。当 ACPI 被完全禁用时,以下计算机可能无法正确引导。只有在其他方法无法在您的集群中使用时,才使用这个方法。

流程

  1. --args 选项与 grubby 工具的 --update-kernel 选项结合使用,来更改每个集群节点的 grub.cfg 文件,如下所示:

    # grubby --args=acpi=off --update-kernel=ALL
    Copy to Clipboard Toggle word wrap
  2. 重新引导节点。

验证

  1. 验证在隔离时该节点是否立即关闭。有关测试隔离设备的详情,请参考 测试隔离设备
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat