17.5. 在集群中移动资源
Pacemaker 提供了各种机制来将资源配置为从一个节点迁移到另一个节点,并在需要时手动移动资源。
您可以使用 pcs resource move
和 pcs resource relocate
命令手动移动集群中的资源,如 手动移动集群资源 中所述。除了这些命令外,您还可以通过启用、禁用和禁止资源来控制集群资源的行为,如 禁用、启用和禁止集群资源 中所述。
您可以配置资源以便在定义多个故障后移到新节点,您可以在外部连接丢失时配置集群来移动资源。
17.5.1. 因为失败而移动资源
当您创建资源时,您可以通过为该资源设置 migration-threshold
选项来配置资源,使其在达到定义的故障次数后移至新节点。达到阈值后,这个节点将不再被允许运行失败的资源,直到:
-
达到资源的
failure-timeout
值。 -
管理员使用
pcs resource cleanup
命令手动重置资源的故障数。
migration-threshold
的值默认设置为 INFINITY
。INFINITY
在内部被定义为一个非常大的数,但是有限的。值 0 会禁用 migration-threshold
功能。
为资源设置 migration-threshold
与为迁移配置资源不同,其中资源移动可以到另一个位置,而不会丢失状态。
以下示例为名为 dummy_resource
的资源添加了一个迁移阈值 10,这表示资源将在 10 次故障后移到一个新节点。
# pcs resource meta dummy_resource migration-threshold=10
您可以使用以下命令为整个集群的默认值添加迁移阈值。
# pcs resource defaults update migration-threshold=10
要确定资源当前的故障状态和限值,请使用 pcs resource failcount show
命令。
迁移阈值概念有两个例外,当资源无法启动或无法停止时会出现这种情况。如果集群属性 start-failure-is-fatal
设为 true
(默认值),启动失败会导致 failcount
被设置为 INFINITY
,并总是导致资源立即移动。
停止失败会稍有不同,且非常关键。如果资源无法停止且启用了 STONITH,则集群将隔离该节点,以便能够在其它地方启动资源。如果没有启用 STONITH,那么集群就无法继续,也不会尝试在其他位置启动资源,而是会在失败超时后尝试再次停止它。
17.5.2. 由于连接更改而移动资源
将集群设置为在外部连接丢失时移动资源分为两个步骤。
-
在集群中添加
ping
资源。ping
资源使用同名的系统工具来测试是否可以访问(由 DNS 主机名或 IPv4/IPv6 地址指定)一系列机器,并使用结果来维护名为pingd
的节点属性。 - 为资源配置位置约束,该限制将在连接丢失时将资源移动到不同的节点。
下表描述了您可以为 ping
资源设置的属性。
项 | 描述 |
---|---|
| 等待(强化)时间进一步发生更改。这会防止,当集群节点在稍有不同的时间发现连接丢失时资源在集群中移动。 |
| 连接的 ping 节点数量乘以这个值来获得分数。在配置了多个 ping 节点时很有用。 |
| 要联系的以确定当前连接状态的机器。允许的值包括可解析 DNS 主机名、IPv4 和 IPv6 地址。主机列表中的条目是空格分开的。 |
以下示例命令会创建一个 ping
资源,来验证与 gateway.example.com
的连接。在实践中,您可以验证到网络网关/路由器的连接。您可以将 ping
资源配置为克隆,以便资源可以在所有集群节点上运行。
# pcs resource create ping ocf:pacemaker:ping dampen=5s multiplier=1000 host_list=gateway.example.com clone
以下示例为名为 Webserver
的现有资源配置位置约束规则。如果当前运行的主机无法 ping gateway.example.com
,这将导致 Webserver
资源移至能够 ping gateway.example.com
的主机。
# pcs constraint location Webserver rule score=-INFINITY pingd lt 1 or not_defined pingd