¿Cómo fuerzo al marcapasos a seguir reiniciando el recurso SystemD si falla (en lugar de ponerlo en estado "detenido")?

¿Cómo fuerzo al marcapasos a seguir reiniciando el recurso SystemD si falla (en lugar de ponerlo en estado "detenido")?

Mi objetivo es implementar un equilibrador de carga HTTP de 2 nodos, utilizando IP virtual (VIP). Para esta tarea elegí pacemaker(cambio de IP virtual) yCaddiepara balanceador de carga HTTP. La elección del equilibrador de carga no es un punto de esta pregunta. :)

Mi requisito es simple: quiero que se asigne una IP virtual al host donde se ejecuta una instancia de Caddy en buen estado y en funcionamiento.

Así es como lo implementé usando 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

Sin embargo, si hago SSH al nodo donde está asignada la IP virtual, formatee mal el archivo de configuración de Caddy y hágalo systemctl restart caddy; después de un tiempo, el marcapasos detecta que el caddy no pudo iniciarse y simplemente lo pone en stoppedestado.

¿Cómo fuerzo al marcapasos a seguir reiniciando mi recurso SystemD en lugar de ponerlo en stoppedestado?

captura de pantalla1

Además de eso, si arreglo el archivo de configuración y lo hago systemctl restart caddy, se inicia, pero el marcapasos simplemente lo mantiene en stoppedestado.

Y además de eso, si detengo el otro nodo, la IP virtual no se asigna a ninguna parte debido a lo siguiente:

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

¿Alguien puede indicarme la dirección correcta de lo que estoy haciendo mal?

Respuesta1

En Pacemaker, ciertas fallas se consideran fatales y, una vez que se encuentran, deben limpiarse manualmente (a menos que haya configurado un cercado a nivel de nodo, lo que los limpiaría cercando un nodo fallido).

Debe decirle a Pacemaker que startlas fallas operativas no son fatales. Por lo general, también establezco un tiempo de espera de falla, que limpia automáticamente las fallas de operación después de una cierta cantidad de segundos, en clústeres sin barreras.

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

información relacionada