Pacemaker - 主机托管约束移动资源

Pacemaker - 主机托管约束移动资源

我遇到了与主机托管限制有关的问题。

我已经创建了一个具有 3 种资源的 4 节点集群(3 个“主”节点和 1 个“备用”节点),每个资源应该仅在其自己的节点或备用节点上运行,而绝不会一起在备用节点上运行。

当创建具有适当优先级的资源时,它们确实会按预期在每个“主”节点上运行。

如果我添加一个共置约束(资源 3 不能与资源 2 一起运行),资源将在其节点上正确保留。

但是,一旦我添加第二个共置约束(资源 2 不能与资源 1 一起运行),资源 1 就会切换到备用节点,我不明白为什么。

有人可以解释这种行为吗?

资源设置:

pcs property set symmetric-cluster=false

pcs resource create TestResourceNode1 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode1 prefers node1=100
pcs constraint location TestResourceNode1 prefers nodespare=80

pcs resource create TestResourceNode2 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode2 prefers node2=50
pcs constraint location TestResourceNode2 prefers nodespare=30

pcs resource create TestResourceNode3 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode3 prefers node3=10
pcs constraint location TestResourceNode3 prefers nodespare=1

约束设置:

pcs constraint colocation add TestResourceNode3 with TestResourceNode2 score=-INFINITY
# OK, resources are still running on node1, node2, node3
pcs constraint colocation add TestResourceNode2 with TestResourceNode1 score=-INFINITY
# KO, resource TestResourceNode1 has moved to nodespare, why ???

答案1

如果你查看 的输出crm_mon,你会注意到单个节点正在作为集群的 运行DC。这是当前运行 Pacemaker 策略引擎的节点(pengine。您应该查看日志中的消息(/var/log/messages/var/log/syslog)在资源被移动时某物像这样:

pengine[6132]:   notice: process_pe_message: Calculated Transition 7: /var/lib/pacemaker/pengine/pe-input-4424.bz2

您可以检查这些策略引擎输入文件,以查看集群在使用该crm_simulate实用程序执行这些操作时“在想什么”。它可能与资源有关scores,所以我将首先检查这些内容:

$ crm_simulate -s -x /var/lib/pacemaker/pengine/pe-input-4424.bz2

然后检查pe-input周围的文件以了解资源的偏好分数和约束对策略引擎的变化。

调试 Pacemaker 的策略引擎可能很棘手。我建议在花费太多时间之前先调整/测试偏好分数crm_simulate。也许像这样的“更重”的资源分数会起作用:

pcs resource create TestResourceNode1 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode1 prefers node1=10000
pcs constraint location TestResourceNode1 prefers nodespare=800

pcs resource create TestResourceNode2 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode2 prefers node2=5000
pcs constraint location TestResourceNode2 prefers nodespare=300

pcs resource create TestResourceNode3 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode3 prefers node3=1000
pcs constraint location TestResourceNode3 prefers nodespare=10

希望有帮助!

答案2

对于任何寻求类似问题解决方案的人来说。

具有 -INF 分数的资源的传递共置约束(例如:r1 与 r2 -INF 以及 r2 与 r3 -INF)导致放置无效。请参阅https://bugs.clusterlabs.org/show_bug.cgi?id=5320

一种解决方法是向资源分配利用率约束,以限制它们同时放置在单个节点上。

示例配置:

# Opt-in cluster, ressources will not run anywhere by default
pcs property set symmetric-cluster=false
# Set placement strategy to utilization
pcs property set placement-strategy=utilization

pcs resource create TestResourceNode1 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode1 prefers node1=100
pcs constraint location TestResourceNode1 prefers nodespare=80
crm_resource --meta --resource TestResourceNode1 --set-parameter priority --parameter-value 100

pcs resource create TestResourceNode2 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode2 prefers node2=50
pcs constraint location TestResourceNode2 prefers nodespare=30
crm_resource --meta --resource TestResourceNode2 --set-parameter priority --parameter-value 50

pcs resource create TestResourceNode3 ocf:pacemaker:Dummy op monitor interval=120s
pcs constraint location TestResourceNode3 prefers node3=10
pcs constraint location TestResourceNode3 prefers nodespare=3
crm_resource --meta --resource TestResourceNode3 --set-parameter priority --parameter-value 10

pcs node utilization node1 cpu=1 memory=1000
pcs node utilization node2 cpu=1 memory=1000
pcs node utilization node3 cpu=1 memory=1000
pcs node utilization nodespare cpu=1 memory=1000

pcs resource utilization TestResourceNode1 cpu=1 memory=1000
pcs resource utilization TestResourceNode2 cpu=1 memory=1000
pcs resource utilization TestResourceNode3 cpu=1 memory=1000

相关内容