适用于 SUSE Linux Enterprise High Availability Extension 12 SP5

10 屏障和 STONITH

摘要

屏蔽在 HA(高可用性)计算机群集中是一个非常重要的概念。群集有时会检测到某个节点行为异常,需要删除此节点。这称为屏蔽,通常使用 STONITH 资源实现。屏蔽可以定义为一种使 HA 群集具有已知状态的方法。

群集中的每个资源均带有状态。例如:资源 r1 已在 alice 上启动。在 HA 群集中,这种状态暗示了资源 r1 在除 alice 外的所有节点上都处于停止状态,因为群集必须确保每个资源只能在一个节点上启动。每个节点都必须报告资源发生的每个更改。这样群集状态就是资源状态和节点状态的集合。

当节点或资源的状态无法十分肯定地确立时,将进行屏蔽。即使在群集未感知到给定节点上发生的事件时,屏蔽也可确保此节点不会运行任何重要资源。

10.1 屏蔽分类

有两类屏蔽:资源级别屏蔽和节点级别屏蔽。后者是本章的主题。

资源级别屏蔽

资源级别屏蔽可确保对给定资源的排它访问。此情况的常见示例就是通过 SAN 光纤通道开关(用于锁定节点不让访问其磁盘)或 SCSI 保留之类的方法更改节点的区域。有关示例,请参见第 11.10 节 “储存保护的其他机制”

节点级别屏蔽

节点级别屏蔽可彻底防止故障节点访问共享资源。这种屏蔽通常采用一种简单但却粗暴的方式来完成,即重设置或关闭节点。

10.2 节点级别屏蔽

在 Pacemaker 群集中,节点级别屏蔽的实施方式是 STONITH(关闭其他节点)。High Availability Extension 包括 stonith 命令行工具,一个能远程关闭群集中节点的可扩展界面。有关可用选项的概述,请运行 stonith --help 或参见 stonith 的手册页了解更多信息。

10.2.1 STONITH 设备

要使用节点级屏蔽,首先需要有屏蔽设备。要获取 High Availability Extension 所支持的 STONITH 设备的列表,请在任何节点上运行以下命令之一:

root # stonith -L

或者

root # crm ra list stonith

STONITH 设备可分为以下类别:

电源分配单元 (PDU)

电源分发单元是管理关键网络、服务器和数据中心设备的电源容量和功能的基本元素。它可以提供对已连接设备的远程负载监视和独立电源出口控制,以实现远程电源循环。

不间断电源 (UPS)

公共用电出现故障时,通过其他来源供电的稳定电源可为连接的设备提供应急电源。

刀片电源控制设备

如果是在刀片组上运行群集,则刀片外壳中的电源控制设备就是提供屏蔽的唯一候选。当然,此设备必须能够管理单个刀片计算机。

无人值守设备

无人值守设备(IBM RSA、HP iLO 和 Dell DRAC)正变得越来越普遍,在未来它们甚至可能成为现成可用计算机上的标准配置。但是,如果这些设备与其主机(一个群集节点)共享电源,则它们可能无法按需工作。如果节点持续断电,则认为控制该节点的设备失去作用。因此,建议使用备用电池无人值守设备。另一方面,这些设备是通过网络访问的。这意味着可能存在单一故障点或安全隐患。

测试设备

测试设备仅用于测试目的。它们通常对硬件更加友好。将群集投放到生产环境之前,必须以真实的屏蔽设备进行替换。

对 STONITH 设备的选择主要取决于您的预算和所用硬件的种类。

10.2.2 STONITH 实施

SUSE® Linux Enterprise High Availability Extension 的 STONITH 实施由两个组件组成:

stonithd

stonithd 是可由本地进程或通过网络访问的守护程序。它接受与屏蔽操作(重设置、关闭电源和打开电源)对应的命令。它还可以检查屏蔽设备的状态。

stonithd 守护程序在 CRM HA 群集中的每个节点上运行。在 DC 节点上运行的 stonithd 实例从 CRM 接收屏蔽请求。它会对请求作出响应,其他 stonithd 程序将执行所需的屏蔽操作。

STONITH 插件

对于每个受支持的屏蔽设备,都有一个能够控制所述设备的 STONITH 插件。STONITH 插件是屏障设备的界面。cluster-glue 包中的 STONITH 插件位于每个节点上的 /usr/lib64/stonith/plugins 中(如果您还安装了 fence-agents 包,该包中的插件将安装在 /usr/sbin/fence_* 中)。所有 STONITH 插件看上去都与 stonithd 一样,但显著区别在于反映了屏障设备的性质。

某些插件支持多个设备。ipmilan(或 external/ipmi)就是一个典型的示例,它实施 IPMI 协议并可以控制任何支持此协议的设备。

10.3 STONITH 资源和配置

要设置屏蔽,需要配置一个或多个 STONITH 资源 - stonithd 守护程序不需要配置。所有配置都储存在 CIB 中。STONITH 资源属于 stonith 类的资源(请参见第 6.3.2 节 “支持的资源代理类”)。STONITH 资源是 STONITH 插件在 CIB 中的代表。除了屏蔽操作,还可以启动、停止和监视 STONITH 资源,就像任何其他资源一样。启动或停止 STONITH 资源意味着装载或卸载节点上的 STONITH 设备驱动程序。启动和停止仅是管理操作,不会转换成对屏蔽设备自身的任何操作。然而,监视操作却会转换成将其记录到设备(以校验设备能否在需要时正常运行)。STONITH 资源故障转移到另一个节点时,它通过装载相应的驱动程序允许当前节点与 STONITH 设备对话。

STONITH 资源可像任何其他资源一样进行配置。有关如何使用首选群集管理工具执行此操作的细节:

参数(属性)列表取决于相应的 STONITH 类型。要查看特定设备的参数列表,请使用 stonith 命令:

stonith -t stonith-device-type -n

例如,要查看 ibmhmc 设备类型的参数,请输入以下命令:

stonith -t ibmhmc -n

要获取设备的简短帮助文本,请使用 -h 选项:

stonith -t stonith-device-type -h

10.3.1 STONITH 资源配置示例

在以下部分中,可了解一些用 crm 命令行工具的语法编写的示例配置。要应用这些配置,请将示例放进文本文件(例如 sample.txt)并运行:

root # crm < sample.txt

有关使用 crm 命令行工具配置资源的更多信息,请参见第 8 章 “配置和管理群集资源(命令行)

例 10.1︰ IBM RSA 无人值守设备的配置

可以如下配置 IBM RSA 无人值守设备:

configure
primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ip_address=192.168.0.101 \
username=USERNAME password=PASSW0RD
primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ip_address=192.168.0.102 \
username=USERNAME password=PASSW0RD
location l-st-alice st-ibmrsa-1 -inf: alice
location l-st-bob st-ibmrsa-2 -inf: bob
commit

在此示例中,由于以下原因使用了位置约束:STONITH 操作始终有失败的可能性。因此,在同时兼作执行程序的节点上操作 STONITH 并不可靠。如果重设置节点,则它将无法发送有关屏蔽操作结果的通知。唯一的方法是假设操作会成功并提前发送通知。不过,如果操作失败,可能会出现问题。因此,按惯例 stonithd 会拒绝终止其主机。

例 10.2︰ UPS 屏蔽设备的配置

UPS 类型屏蔽设置的配置类似于上面的示例。此处不作详细介绍。所有 UPS 设备均使用相同的机制屏蔽。访问设备的方式有所不同。旧的 UPS 设备只有一个串行端口,通常使用特殊的串行电缆以 1200 波特的速率进行连接。许多新的 UPS 设备仍有一个串行端口,但它们一般还使用 USB 或以太网接口。可以使用的连接类型取决于插件支持的连接。

例如,通过使用 stonith -t stonith 设备类型 -n 命令比较 apcmaster 与 apcsmart 设备:

stonith -t apcmaster -h

返回以下信息:

STONITH Device: apcmaster - APC MasterSwitch (via telnet)
NOTE: The APC MasterSwitch accepts only one (telnet)
connection/session a time. When one session is active,
subsequent attempts to connect to the MasterSwitch will fail.
For more information see http://www.apc.com/
List of valid parameter names for apcmaster STONITH device:
ipaddr
login
 password

使用

stonith -t apcsmart -h

得到以下输出:

STONITH Device: apcsmart - APC Smart UPS
(via serial port - NOT USB!). 
Works with higher-end APC UPSes, like
Back-UPS Pro, Smart-UPS, Matrix-UPS, etc.
(Smart-UPS may have to be >= Smart-UPS 700?).
See http://www.networkupstools.org/protocols/apcsmart.html
for protocol compatibility details.
For more information see http://www.apc.com/
List of valid parameter names for apcsmart STONITH device:
ttydev
hostlist

第一个插件支持带有一个网络端口的 APC UPS 和 telnet 协议。第二个插件使用 APC SMART 协议(通过许多 APC UPS 产品系列都支持的串行线路)。

例 10.3︰ Kdump 设备的配置

Kdump 属于特殊的屏蔽设备,实际上与屏蔽设备相反。该插件检查节点上是否正在进行内核转储。如果是,它将返回 true,并如同节点已被屏蔽那样进行操作。

必须以与其他真实的 STONITH 设备(例如 external/ipmi)一致的方式使用 Kdump 插件。要正常运行屏蔽机制,必须在触发真实的 STONITH 设备之前,指定 Kdump 已经过检查。请按以下过程中所述,使用 crm configure fencing_topology 来指定屏蔽设备的顺序。

  1. 使用 stonith:fence_kdump 资源代理(由 fence-agents 包提供)来监视启用了 Kdump 功能的所有节点。下面提供了资源的配置示例:

    configure
      primitive st-kdump stonith:fence_kdump \
        params nodename="alice "\ 1
        pcmk_host_check="static-list" \
        pcmk_reboot_action="off" \
        pcmk_monitor_action="metadata" \
        pcmk_reboot_retries="1" \
        timeout="60"
    commit

    1

    要监控的节点的名称。如果您需要监视多个节点,请配置更多 STONITH 资源。要防止特定节点使用屏蔽设备,请添加位置约束。

    当资源超时后,屏蔽操作将会启动。

  2. 在每个节点上的 /etc/sysconfig/kdump 中,将 KDUMP_POSTSCRIPT 配置为在 Kdump 进程完成后向所有节点发送通知。例如:

    /usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie [...]

    执行 Kdump 的节点将在完成 Kdump 后自动重启动。

  3. 写入新的 initrd,以包含支持网络的 fence_kdump_send 库。使用 -f 选项重写现有文件,以便在下一次引导过程中使用新文件:

    root # dracut -f -a kdump
  4. 在防火墙中针对 fence_kdump 资源打开一个端口。默认端口为 7410

  5. 为了能够在触发真实的屏蔽机制(例如 external/ipmi)之前检查 Kdump,请使用类似以下的配置:

    fencing_topology \
      alice: kdump-node1 ipmi-node1 \
      bob: kdump-node2 ipmi-node2

    有关 fencing_topology 的详细信息:

    crm configure help fencing_topology

10.4 监视屏蔽设备

与任何其他资源一样,STONITH 类代理还支持使用监视操作检查状态。

注意
注意:监视 STONITH 资源

请定期而谨慎地监视 STONITH 资源。对于大多数设备而言,至少 1800 秒(30 分钟)的监视间隔应已足够。

屏蔽设备是 HA 群集不可缺少的组成部分,但越少需要使用它们越好。电源管理设备常常会受广播流量过多的影响。某些设备无法处理每分钟多于十个左右连接的情况。如果两个客户端同时尝试进行连接,一些设备会分辨不清。大多数设备不能同时处理多个会话。

通常,每隔几小时检查一次屏蔽设备的状态应已足够。需要执行屏蔽操作和电源开关故障的情况是较少的。

有关如何配置监视操作的详细信息,请参见针对命令行方法的第 8.4.9 节 “配置资源监视”

10.5 特殊的屏蔽设备

除了处理真实 STONITH 设备的插件外,还有特殊用途的 STONITH 插件。

警告
警告:仅供测试

下面提到的一些 STONITH 插件仅供演示和测试之用。不要在实际情境中使用以下任何设备,因为这可能导致数据损坏和无法预料的结果:

  • external/ssh

  • ssh

fence_kdump

此插件检查节点上是否正在进行内核转储。如果有,它将返回 true,并按节点已被屏蔽那样进行操作。在转储过程中,此节点不能运行任何资源。这可避免屏蔽已关闭但正在进行转储的节点,从而节省屏蔽所需时间。此插件必须与另一个实际 STONITH 设备一同使用。

有关配置细节,请参见例 10.3 “Kdump 设备的配置”

external/sbd

这是一个自屏蔽设备。它对可以插入共享磁盘的所谓的毒药作出反应。当中断共享储存区连接时,它将停止节点运行。要了解如何使用此 STONITH 代理实施基于储存的屏蔽,请参见第 11 章过程 11.7 “将群集配置为使用 SBD”。有关更多细节,另请参见 https://github.com/ClusterLabs/sbd

重要
重要:external/sbd 和 DRBD

external/sbd 屏蔽机制要求能直接从每个节点读取 SBD 分区。因此,SBD 分区中不得使用 DRBD* 设备。

但是,如果 SBD 分区位于未镜像或未复制的共享磁盘上,则可以对 DRBD 群集使用该屏蔽机制。

external/ssh

另一个基于软件的屏蔽机制。节点必须能够以 root 身份相互登录,而且无需密码。它使用一个参数 hostlist 指定它将指向的目标节点。由于不能重设置已确实失败的节点,它不得用于实际群集 - 仅供测试和演示之用。将其用于共享储存将导致数据损坏。

meatware

meatware 需要用户操作才能运行。调用 meatware 时,它会记录一条 CRIT 严重性消息,显示在节点的控制台上。然后操作员确认节点已关闭,并发出 meatclient(8) 命令。此命令指示 meatware 通知群集将该节点视为已出现故障。有关更多信息,请参见 /usr/share/doc/packages/cluster-glue/README.meatware

suicide

这是一个仅有软件的设备,它可以使用 reboot 命令重引导它运行所处的节点。这需要节点的操作系统的操作,在某些情况下可能失败。因此,如果可能,请避免使用此设备。然而,在单节点群集上使用此设备是很安全的。

无磁盘 SBD

如果您想要建立一个不含共享储存的屏蔽机制,则此配置十分有用。在此无磁盘模式下,SBD 会使用硬件检查包来屏蔽节点,而不依赖于任何共享设备。不过,无磁盘 SBD 不能处理双节点群集的节点分裂情况。因此,要使用无磁盘 SBD,群集需要有三个或更多节点。

suicideI do not shoot my host(我自己不关闭我的主机)规则的唯一例外。

10.6 基本建议

请查看以下建议列表以避免常见错误:

  • 不要并行配置多个电源开关。

  • 要测试 STONITH 设备及其配置,请从每个节点拔出一次插头,并校验该节点是否会被屏蔽。

  • 在负载状态下测试资源,并校验超时值是否合适。超时值设置得过短会触发(不必要的)屏蔽操作。有关详细信息,请参见第 6.3.9 节 “超时值”

  • 对您的设置使用合适的屏蔽设备。有关细节,另请参见第 10.5 节 “特殊的屏蔽设备”

  • 配置一个或多个 STONITH 资源。默认情况下,全局群集选项 stonith-enabled 设置为 true。如果未定义任何 STONITH 资源,群集将拒绝启动任何资源。

  • 不要将全局群集选项 stonith-enabled 设置为 false,原因如下:

    • 未启用 STONITH 的群集不受支持。

    • DLM/OCFS2 将会阻止一直等待不会发生的屏蔽操作。

  • 不要将全局群集选项 startup-fencing 设置为 false。默认情况下,会因以下原因将其设置为 true:如果节点在群集启动期间状态未知,则它将会被屏蔽一次以明确其状态。

10.7 更多信息

/usr/share/doc/packages/cluster-glue

在已安装系统中,此目录包含多个 STONITH 插件和设备的自述文件。

http://clusterlabs.org/pacemaker/doc/crm_fencing.html

有关 STONITH 的信息。

http://www.clusterlabs.org/doc/
  • Pacemaker Explained》(Pacemaker 配置说明):说明用于配置 Pacemaker 的概念。包含全面而非常详细的信息供参考。

http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html

说明 HA 群集中节点分裂、法定票数和屏蔽的概念的文章。

打印此页