Como faço para forçar o marcapasso a continuar reiniciando o recurso SystemD se ele falhar (em vez de colocá-lo no estado 'parado')?

Como faço para forçar o marcapasso a continuar reiniciando o recurso SystemD se ele falhar (em vez de colocá-lo no estado 'parado')?

Meu objetivo é implementar um balanceador de carga HTTP de 2 nós, usando IP virtual (VIP). Para esta tarefa eu escolhi pacemaker(comutação de IP virtual) eCaddiepara balanceador de carga HTTP. A escolha do balanceador de carga não é um ponto desta questão. :)

Meu requisito é simples - quero que o IP virtual seja atribuído ao host onde uma instância Caddy íntegra e funcional está em execução.

Aqui está como eu implementei usando o 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

No entanto, se eu usar SSH para o nó onde o IP Virtual está atribuído, forme mal o arquivo de configuração do Caddy e faça isso systemctl restart caddy- depois de algum tempo, o marca-passo detecta que o caddy falhou ao iniciar e simplesmente o coloca no stoppedestado.

Como faço para forçar o marcapasso a continuar reiniciando meu recurso SystemD em vez de colocá-lo no stoppedestado?

captura de tela1

Além disso, se eu corrigir o arquivo de configuração e fizer isso systemctl restart caddy, ele será iniciado, mas o marcapasso apenas o manterá no stoppedestado.

E ainda por cima - se eu parar o outro nó, o IP virtual não será atribuído a lugar nenhum por causa do seguinte:

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

Alguém pode me indicar a direção certa do que estou fazendo de errado?

Responder1

No Pacemaker, certas falhas são consideradas fatais e, uma vez encontradas, precisam ser limpas manualmente (a menos que você tenha configurado o isolamento em nível de nó, o que as limparia para você cercando um nó com falha).

Você precisa informar ao Pacemaker que startas falhas de operação não são fatais. Normalmente também definirei um tempo limite de falha, que limpa automaticamente as falhas de operação após alguns segundos, em clusters sem isolamento.

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

informação relacionada