Я столкнулся с проблемой с ограничениями колокации .
Я создал кластер из 4 узлов (3 «основных» и 1 «резервный») с 3 ресурсами, каждый ресурс должен работать только на своем собственном узле или на резервном и никогда вместе на резервном.
Когда ресурсы создаются с соответствующими приоритетами, которые они действительно выполняют на каждом «главном» узле, как и ожидалось.
Если я добавлю одно ограничение размещения (ресурс 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 ???
Если вы посмотрите на вывод 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
. Скорее всего, это как-то связано с оценками ресурсов
, поэтому я бы начал с их проверки:
$ 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
Надеюсь, это поможет!
Всем, кто ищет решение подобной проблемы.
Ограничения транзитивного размещения для ресурсов с оценками -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