第 14 章 Colocating 集群资源
要指定一个资源的位置取决于另一个资源的位置,您需要配置 colocation 约束。
在两个资源间创建 colocation 约束具有重要的副作用:它会影响分配给节点资源的顺序。这是因为您无法相对于资源 B 来放置资源 A,除非您知道资源 B 的位置。因此,当创建 colocation 约束时,您必须考虑是将资源 A 与资源 B 共处,还是将资源 B 与资源 A 共处。
在创建 colocation 约束时要记住的是,假设资源 A 与资源 B 在一起,在决定哪个节点要选择资源 B 时,集群也会考虑资源 A 的首选项。
以下命令创建了 colocation 约束。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
下表总结了配置 colocation 约束的属性和选项。
参数 | 描述 |
---|---|
source_resource | 共处源。如果约束不满意,集群可能决定完全不允许该资源运行。 |
target_resource | 共处目标。集群将决定优先放置此资源的位置,然后决定放置源资源的位置。 |
分数 |
正数值表示资源应该在同一个节点上运行。负值表示资源不应在同一节点上运行。值 + |
| (RHEL 8.4 及更新的版本)决定集群是否会在依赖资源达到其故障迁移阈值时将主资源(source_resource)和依赖资源(target_resource)移到另一个节点,或者集群是否将依赖资源离线,而不导致服务切换。
当这个选项的值为
当这个选项的值为 |
14.1. 指定资源的强制放置
当约束分数为 +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
可能无法在任何地方运行。