Как заставить pacemaker продолжать перезапускать ресурс SystemD в случае его сбоя (вместо того, чтобы переводить его в состояние «остановлен»)?

Как заставить pacemaker продолжать перезапускать ресурс SystemD в случае его сбоя (вместо того, чтобы переводить его в состояние «остановлен»)?

Моя цель — реализовать балансировщик нагрузки HTTP на 2 узла, используя виртуальный IP (VIP). Для этой задачи я выбрал pacemaker(переключение виртуальных IP) иКэддидля HTTP-балансировщика нагрузки. Выбор балансировщика нагрузки не является предметом этого вопроса. :)

Мое требование простое: я хочу, чтобы виртуальный IP-адрес был назначен хосту, на котором запущен работоспособный экземпляр Caddy.

Вот как я это реализовал с помощью Pacemaker:

# Disable stonith feature
pcs property set stonith-enabled=false

# Ignore quorum policy
pcs property set no-quorum-policy=ignore

# Setup virtual IP
pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=123.123.123.123

# Setup caddy resource, using SystemD provider. By default it runs on one instance at a time, so clone it and cloned one by default runs on all nodes at the same time.
# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/configuring_the_red_hat_high_availability_add-on_with_pacemaker/ch-advancedresource-haar
pcs resource create caddy systemd:caddy clone

# Enable constraint, so both VirtualIP assigned and application running _on the same_ node.
pcs constraint colocation add ClusterIP with caddy-clone INFINITY

Однако если я подключусь по SSH к узлу, которому назначен виртуальный IP-адрес, испорчу файл конфигурации Caddy и сделаю это systemctl restart caddy, то через некоторое время pacemaker обнаружит, что Caddy не удалось запуститься, и просто переведет его в stoppedсостояние .

Как заставить pacemaker постоянно перезапускать мой ресурс SystemD вместо того, чтобы переводить его в stoppedсостояние?

скриншот1

Вдобавок ко всему - если я исправлю файл конфигурации и сделаю systemctl restart caddy, он запустится, но pacemaker просто дальше будет удерживать его в stoppedэтом состоянии.

И вдобавок ко всему - если я остановлю другой узел, виртуальный IP нигде не будет назначен по следующим причинам:

# Enable constraint, so both VirtualIP assigned and application running _on the same_ node.
pcs constraint colocation add ClusterIP with caddy-clone INFINITY

Может ли кто-нибудь указать мне верное направление и указать, что я делаю неправильно?

решение1

В Pacemaker определенные сбои считаются фатальными, и после их обнаружения их необходимо устранить вручную (если только вы не настроили ограждение на уровне узлов, которое устранит их за вас, огородив неисправный узел).

Вам нужно сообщить Pacemaker, что startсбои в работе не являются фатальными. Я обычно также устанавливаю тайм-аут сбоя, который автоматически очищает сбои в работе через некоторое количество секунд в кластерах без ограждения.

pcs property set start-failure-is-fatal=false
pcs property set failure-timeout=300    

Связанный контент