Wie zwinge ich Pacemaker dazu, die SystemD-Ressource bei einem Fehler immer wieder neu zu starten (anstatt sie in den Zustand „gestoppt“ zu versetzen)?

Wie zwinge ich Pacemaker dazu, die SystemD-Ressource bei einem Fehler immer wieder neu zu starten (anstatt sie in den Zustand „gestoppt“ zu versetzen)?

Mein Ziel ist es, einen HTTP-Load-Balancer mit 2 Knoten zu implementieren, der eine virtuelle IP (VIP) verwendet. Für diese Aufgabe habe ich pacemaker(virtuelle IP-Umschaltung) ausgewählt undCaddiefür HTTP-Load-Balancer. Die Auswahl des Load-Balancers ist kein Thema dieser Frage. :)

Meine Anforderung ist einfach: Ich möchte, dass dem Host, auf dem eine fehlerfreie und funktionierende Caddy-Instanz ausgeführt wird, eine virtuelle IP zugewiesen wird.

So habe ich es mit Pacemaker implementiert:

# 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

Wenn ich jedoch per SSH auf den Knoten zugreife, dem die virtuelle IP zugewiesen ist, verforme ich die Caddy-Konfigurationsdatei und führe Folgendes aus systemctl restart caddy: Nach einiger Zeit erkennt Pacemaker, dass der Caddy nicht gestartet werden konnte und versetzt ihn einfach in stoppedden Status.

Wie zwinge ich Pacemaker, meine SystemD-Ressource immer wieder neu zu starten, anstatt sie in stoppedden Status zu versetzen?

Screenshot1

Darüber hinaus – wenn ich die Konfigurationsdatei korrigiere und dies tue systemctl restart caddy, startet es, aber Pacemaker hält es einfach in stoppeddiesem Zustand.

Und außerdem – wenn ich den anderen Knoten stoppe, wird aus folgendem Grund nirgendwo eine virtuelle IP zugewiesen:

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

Kann mir jemand sagen, was ich falsch mache?

Antwort1

In Pacemaker werden bestimmte Fehler als schwerwiegend angesehen und müssen, sobald sie auftreten, manuell bereinigt werden (es sei denn, Sie haben eine Umzäunung auf Knotenebene konfiguriert, die die Fehler durch die Umzäunung eines ausgefallenen Knotens für Sie bereinigt).

Sie müssen Pacemaker mitteilen, dass startBetriebsfehler nicht schwerwiegend sind. Normalerweise lege ich auch ein Fehler-Timeout fest, das Betriebsfehler in Clustern ohne Fencing nach einer bestimmten Anzahl von Sekunden automatisch bereinigt.

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

verwandte Informationen