6.3. 资源节点共置(Colocation)

节点共置限制可根据另一个资源的位置决定某个资源的位置。
在两个资源间创建节点共置限制有一个很重要的负面作用:它会影响为某个节点分配资源的顺序。因为无法将资源 A 放在相对资源 B 的位置,除非您知道资源 B 在哪里。因此当创建节点共置限制时,关键是要考虑是应将资源 A 与资源 B 共置,还是将资源 B 与资源 A 共置。
另一个要记住的是在创建节点共置限制时,假设资源 A 与资源 B 共置,集群会在决定为资源 B 选择哪个节点时考虑资源 A 的属性。
以下命令可创建节点共置限制。
pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options]
有关主资源和辅资源的详情请查看 第 8.2 节 “多状态资源:有多个模式的资源”
表 6.3 “节点共置限制的属性” 中总结了配置节点共置限制的属性和选项。

表 6.3. 节点共置限制的属性

描述
source_resource
共置资源。如果对该限制不满意,集群会决定根本不允许该资源运行。
target_resource
共置目标。集群将决定首先将这个资源放在哪里,然后决定在哪里防止源资源。
score
正数值代表资源应在同一节点中运行。负数值代表资源不应再同一节点中运行。默认值,即 + INFINITY 值代表 source_resource 必须作为 target_resource 在同一节点中运行。- INFINITY 值代表 source_resource 一定不能作为 target_resource 在同一节点中运行。

6.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 运行。在这种情况下请使用 score=-INFINITY
# pcs constraint colocation add myresource1 myresource2 with score=-INFINITY
指定 -INFINITY 即可绑定该限制。因此如果最后能运行该资源的位置是 myresource2 所在位置,那么 myresource1 可能无法在任意位置运行。

6.3.2. 建议配置

如果强制配置是有关“一定要”和“一定不要”的配置,那么建议配置则属于“我更喜欢”的备用配置。对已得分大于 -INFINITY 和小于 -INFINITY 的限制,集群会尝试并满足您的要求,但如果备用配置要停止一些集群服务,则集群会忽略他们。建议节点共置限制可与配置的其他元素合并,以起到强制配置的作用。

6.3.3. 资源组共置

可使用 pcs constraint colocation set 命令为一组或多组资源创建节点共置限制。
可使用 pcs constraint colocation set 命令的以下 options 参数为一组资源设定以下选项。
  • sequential,可将其设定为 truefalse,表示一组节点共置限制资源是否为按顺序排列的资源组。
  • require-all,可将其设定为 truefalse,表示是否该组中的所有资源都必须启用。
  • action,可将其设定为 startpromotedemotestop,如 表 6.2 “顺序限制属性” 所述。
  • role,可将其设定为 StoppedStartedMasterSlave。有关多状态资源的详情,请查看 第 8.2 节 “多状态资源:有多个模式的资源”
可使用 pcs constraint colocation set 命令的以下 setoptions 参数为一组资源设定以下选项。
  • kind,表示如何强制执行限制。有关这个选项的详情,请查看 表 6.2 “顺序限制属性”
  • symmetrical,表示停止资源的顺序。如果为 true(即默认选项),则会以相反的顺序停止资源。默认值为 true
  • id,为定义的限制提供名称。
以下命令可在一组或多组资源中创建节点共置限制。
pcs constraint colocation set resource1 resource2 [resourceN]... [options] [set resourceX resourceY ... [options]] [setoptions [constraint_options]]

6.3.4. 删除节点共置限制

使用以下命令删除附带 source_resource 的节点共置限制。
pcs constraint colocation remove source_resource target_resource