7.3. 资源共存
共存约束决定一个资源的位置取决于另一个资源的位置。
在两个资源间创建 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]
有关 master 和从资源的详情请参考 第 9.2 节 “多状态资源:具有多个模式的资源”。
表 7.4 “Colocation 约束的属性”. 总结了配置 colocation 约束的属性和选项。
项 | 描述 |
---|---|
source_resource
|
colocation 源。如果约束不满意,集群可能决定完全不允许该资源运行。
|
target_resource
|
colocation 目标。集群将决定优先放置此资源的位置,然后决定放置源资源的位置。
|
分数
|
正数值表示资源应该在同一个节点上运行。负值表示资源不应在同一节点上运行。值 +
INFINITY (默认值)表示 source_resource 必须在与 target_resource 相同的节点上运行。值 -INFINITY 表示 source_resource 不得在与 target_resource 相同的节点上运行。
|
7.3.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
在同一计算机上运行。在这种情况下,使用 分数=-INFINITY
# pcs constraint colocation add myresource1 with myresource2 score=-INFINITY
同样,通过指定
-INFINITY
,约束会绑定。因此,如果唯一要运行的地方是 myresource2 已经是
,则 myresource1
可能无法在任何位置运行。