Red Hat Training

A Red Hat training course is available for RHEL 8

10.4. 隔离延迟

当集群通信在双节点集群中丢失时,一个节点可能首先检测到此节点,并隔离其他节点。但是,如果两个节点同时检测到这个,则每个节点都可以启动其他节点的隔离,使两个节点关闭或重置。通过设置隔离延迟,您可以降低两个集群节点相互隔离的可能性。您可以在具有超过两个节点的集群中设置延迟,但这通常不会有任何好处,因为只有具有仲裁的分区将启动隔离。

您可以根据系统要求设置不同类型的隔离延迟。

  • 静态隔离延迟

    静态隔离延迟是一个固定的、预先确定的延迟。在一个节点上设置静态延迟使该节点更有可能被隔离,因为它增加了检测到丢失的通信后,其他节点首先启动隔离的机会。在主动/被动集群中,在被动节点上设置一个延迟,使得在通信中断时,被动节点将更有可能被隔离。您可以使用 pcs_delay_base 集群属性配置静态延迟。当将单独的隔离设备用于每个节点时,或者在将单个隔离设备用于所有节点时(从 RHEL 8.6 开始)设置此属性。

  • 动态隔离延迟

    动态隔离延迟是随机的。它可能会有所不同,并在需要隔离时确定。您可以配置一个随机延迟,并使用 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 的值。

从 Red Hat Enterprise Linux 8.6 开始,您可以使用 pcmk_delay_base 参数为不同的节点指定不同的值。这允许在双节点集群中使用单个隔离设备,每个节点有不同的延迟。您不需要配置两个单独的设备来使用单独的延迟。要为不同的节点指定不同的值,您可以使用类似于 pcmk_host_map 的语法将主机名映射为该节点的延迟值。例如,node1:0;node2:10s 在隔离 node1 时使用无延迟,在隔离 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 集群属性

(RHEL 8.3 及更高版本)设置 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_* 属性配置的延迟。如果同时配置了这些延迟,它们会被加在一起,通常不会一起使用。