第 14 章 Colocating 集群资源

要指定一个资源的位置取决于另一个资源的位置,您需要配置 colocation 约束。

在两个资源间创建 colocation 约束具有重要的副作用:它会影响分配给节点资源的顺序。这是因为您无法相对于资源 B 来放置资源 A,除非您知道资源 B 的位置。因此,当创建 colocation 约束时,您必须考虑是将资源 A 与资源 B 共处,还是将资源 B 与资源 A 共处。

在创建 colocation 约束时要记住的是,假设资源 A 与资源 B 在一起,在决定哪个节点要选择资源 B 时,集群也会考虑资源 A 的首选项。

以下命令创建了 colocation 约束。

pcs constraint colocation add [promoted|unpromoted] source_resource with [promoted|unpromoted] target_resource [score] [options]

下表总结了配置 colocation 约束的属性和选项。

表 14.1. Colocation 约束的参数

参数描述

source_resource

共处源。如果约束不满意,集群可能决定完全不允许该资源运行。

target_resource

共处目标。集群将决定优先放置此资源的位置,然后决定放置源资源的位置。

分数

正数值表示资源应该在同一个节点上运行。负值表示资源不应在同一节点上运行。+INFINITY 值(默认值)表示 source_resource 必须在与 target_resource 运行在相同的节点上。-INFINITY 值表示 source_resource 不得在与 target_resource 运行在相同的节点上。

influence 选项

确定当依赖资源达到其迁移失败阈值时,集群是否同时将主资源 (source_resource) 和依赖资源 (target_resource) 移到另一节点,或者集群允许依赖资源离线而不造成服务切换。

influence colocation 约束选项的值为 truefalse。此选项的默认值由依赖资源的 critical 资源 meta 选项的值确定,其默认值为 true

当这个选项的值为 true 时,Pacemaker 会同时尝试保持主资源和依赖的资源活跃状态。如果依赖资源达到迁移失败的阈值,则两个资源都会移到另一个节点。

当这个选项的值为 false 时,Pacemaker 会避免因为依赖资源的状态而移动主资源。在这种情况下,如果依赖资源达到失败的迁移阈值,则当主资源活跃并可以保持在当前节点上时,它将停止。

14.1. 指定资源的强制放置

每当约束的 score 为 +INFINITY-INFINITY 时,就会发生强制放置。在这种情况下,如果约束无法满足,则不允许 source_resource 运行。对于 score=INFINITY,这包括 target_resource 未处于活动状态的情况。

如果您需要 myresource1 始终与 myresource2 运行在同一台机器上,则您可以添加以下约束:

# pcs constraint colocation add myresource1 with myresource2 score=INFINITY

由于使用了 INFINITY,如果 myresource2 无法在任何一个集群节点上运行(出于某种原因),则将不允许 myresource1 运行。

或者,您可能想要配置相反的情况,在集群中,myresource1 不能与 myresource2 运行在同一台机器上。在这种情况下,请使用 score=-INFINITY

# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY

同样,通过指定 -INFINITY,约束是绑定的。因此,如果只剩下 myresource2 所在的位置可以运行,那么 myresource1 可能无法在任何地方运行。