5.12. 测试隔离设备
隔离(Fencing)是红帽集群基础结构的基础部分,因此验证或者测试隔离服务是否正常至关重要。
使用以下步骤测隔离护设备。
- 使用 ssh、telnet、HTTP 或者任何远程协议连接到该设备以便手动登录并测试隔离设备或者查看给出的输出。例如,如果您要为启用 IPMI 的设备配置隔离,请尝试使用 ipmitool 远程登录。记录手动登录时使用的选项,因为在使用隔离代理时可能需要使用这些选项。如果您无法登录到隔离设备,请确认该设备是可以被 ping 到的,没有如防火墙配置阻止对隔离设备的访问,隔离代理中启用了远程访问,且凭证正确。
- 使用隔离代理脚本手动运行隔离代理。这不需要集群服务正在运行,因此您可以在集群配置该设备前执行这个步骤。这可保证在继续前隔离设备响应正常。注意本节中的示例将 fence_ilo 隔离代理脚本用于 iLO 设备。您使用的实际隔离代理以及调用代理的命令取决于服务器硬件。您应该参考您使用的隔离保护代理的 man 页来确定要指定的选项。您通常需要了解隔离设备的登录和密码,以及其它与该隔离设备相关的信息。以下示例显示了使用
-o status
参数运行 fence_ilo 隔离代理脚本的格式,以检查另一个节点上的隔离设备接口的状态,而不实际对其进行隔离。这可让您在尝试重新引导节点前测试该设备并使其可用。在运行这个命令时,您可以为 iLO 设备指定打开和关闭权限的 iLO 用户的名称和密码。#
fence_ilo -a ipaddress -l username -p password -o status
以下示例显示了使用-o reboot
参数运行 fence_ilo 隔离代理脚本的格式。在一个节点上运行这个命令会重启另一个配置了隔离代理的节点。#
fence_ilo -a ipaddress -l username -p password -o reboot
如果隔离代理无法正确地执行 status、off、on 或 reboot 操作,您应该检查硬件、隔离设备的配置以及命令的语法。另外,您可以运行启用了 debug 输出的隔离代理脚本。调试输出会记录隔离设备时失败的事件,对于一些隔离代理,这个信息可能非常有用。#
fence_ilo -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug
当诊断发生的故障时,您应该确定手动登录到隔离设备时指定的选项与您使用隔离代理传递给隔离代理的操作相同。对于支持加密连接的隔离代理,您可能会因为证书验证失败而看到错误,这需要您信任主机或使用隔离代理的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 命令正常工作,这意味着发生隔离事件时群集的隔离配置应该可以正常工作。如果命令失败,这意味着集群管理无法通过它获取的配置调用隔离设备。检查以下问题并根据需要更新集群配置。- 检查您的隔离配置。例如,如果您使用了主机映射,则应该确保系统可以使用您提供的主机名查找节点。
- 检查该设备的密码和用户名是否包含 bash shell 可能会错误解析的特殊字符。请确定,使用引号来包括您输入的密码和用户名是否可以解决这个问题。
- 检查是否可以使用您在 pcs stonith 命令中指定的 IP 地址或主机名连接到该设备。例如:如果您在 stonith 命令中给出主机名,但使用 IP 地址进行测试,则这不是一个有效的测试。
- 如果您可以访问您的隔离设备使用的协议,使用该协议尝试连接到该设备。例如,很多代理都使用 ssh 或者 telnet。您应该尝试使用您在配置该设备时提供的凭证连接到该设备,查看是否收到有效提示符并登录该设备。
如果您确定所有参数都正确,但仍无法连接到隔离设备,则可以查看隔离设备的日志信息(如果隔离设备提供了日志)。这会显示该用户是否已连接以及该用户发出什么命令。您还可以在/var/log/messages
文件中搜索 stonith 和 error 实例,它们可以让大家了解正在转换的内容,但有些代理可以提供更多信息。 - 隔离设备测试正常工作并启动并运行集群后,测试实际故障。要做到这一点,在集群中执行应启动令牌丢失的操作。
- 关闭网络。如何关闭网络取决于您的具体配置。在很多情况下,您可以从主机中物理拔掉网线或电源电缆。注意不推荐通过在本地主机中禁用网络接口而不是物理断开网线或者电源电缆的方法进行测试,因为这无法准确模拟典型的实际失败。
- 使用本地防火墙的阻塞 corosync 的入站和出站网络流落。以下示例会阻塞 corosync,假设使用默认的 corosync 端口,
firewall
d 用作本地防火墙,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'
- 使用
sysrq-trigger
模拟崩溃并导致您的计算机崩溃。请注意,触发内核 panic 可能会导致数据丢失 ; 建议首先禁用集群资源。#
echo c > /proc/sysrq-trigger