15.7. 隔离

在节点发生故障后,隔离能够确保故障节点彻底离线。这样做主要是为了避免在其他节点恢复资源运行时重复运行同一个资源。这是非常重要的,如果不能确保隔离故障节点,就不可能在其他节点安全恢复资源运行。

如果节点没有被隔离,该节点就可能处于一种不可知的状态,并仍然能够访问集群的共享资源。而这是非常危险的!想象一下这种情形,如果隔离切断了故障节点的所有网络连接,但没有切断对存储的访问,现在尽管故障节点不能再访问网络,但其上的虚拟机仍在运行,并能够向共享存储写入数据。

如果我们现在在其他节点再次启动该虚拟机,我们就可能引发危险的竞争条件,因为现在两个节点上的两个虚拟机在同时向同一个镜像写入数据。这样的情况下,很可能会损坏虚拟机的所有数据,并导致整个虚拟机不可用。当然,我们再启动同一个虚拟机的操作很可能会因为存储禁止多次挂载的保护措施而失败。

15.7.1 Proxmox VE的隔离措施

隔离节点的方法有很多种,例如隔离设备可以切断节点电源或禁止和外部通信。但这些方法往往过于昂贵,并可能导致其他的问题,例如在隔离设备失效时就无法恢复任何服务。 因此我们采用了一种较简便的隔离方法,而没有采用任何外部隔离设备硬件。具体是采用看门狗计时器来实现。

可能的隔离措施

  • 外部电源开关

  • 通过在交换机禁止外部网络通信来隔离节点

  • 基于看门狗的自隔离

自从微控制器诞生以来,看门狗就广泛用于重要系统和具有高可靠性要求的系统中。看门狗通常都是一块独立的简单集成电路,用于检测计算机故障并帮助从故障中恢复。

在正常情况下,ha-manager会定期重置看门狗计时器,以防止超时。如果发生硬件故障或程序错误,计算机未能重置看门狗,计时器就会超时并触发主机重启(reboot)。

最新的服务器主板一般集成了硬件看门狗,但需要配置后才能使用。如果服务器没有配置硬件看门狗,可以退而求其次使用Linux内核的softdog。软件看门狗不仅可靠,但并不独立于服务器硬件,因此可靠性较硬件看门狗低一些。

15.7.2硬件看门狗配置 出于安全考虑,所有的硬件看门狗模块默认都是被禁止的。如果不能正确初始化,硬件看门狗就和一枝上了膛的枪一样危险。你可以在/etc/default/pve-ha-namager中指定硬件看门狗驱动模块来启用硬件看门狗,示例如下:

# select watchdog module (default is softdog)
WATCHDOG_MODULE=iTCO_wdt

该配置将被watchdog-mux服务读取,并在开机时加载指定的模块。

15.7.3恢复被隔离的服务

当节点发生故障并被成功隔离后,CRM服务将尝试把资源从故障节点转移到其他节点运行。 资源迁移目标节点的选择,由group资源参数配置,当前可用节点列表,各节点当前的运行负载情况共同决定。 CRM服务首先在用户设定的节点列表(从group配置)和当前可用节点列表之间进行交叉比对选出可用节点列表,然后从中选择具有最高优先级的节点,最后再从中选出负载最低的节点作为目标节点。这可以资源迁移导致节点超载的可能性降到最低。

  • 重要

    发生节点故障后,CRM会将相关资源分配给其他节点继续运行,从而使得这些节点承担更多资源的运行,有可能导致负载过高。特别在小规模集群中有可能发生这种情况。因此,请认真设计你的集群,以确保能处理这种最坏的情况。