我遇到了与主机托管限制有关的问题。
我已经创建了一个具有 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