SystemD リソースが失敗した場合に、Pacemaker が SystemD リソースを強制的に再起動し続けるようにするには (「停止」状態にするのではなく) どうすればよいですか?

SystemD リソースが失敗した場合に、Pacemaker が SystemD リソースを強制的に再起動し続けるようにするには (「停止」状態にするのではなく) どうすればよいですか?

私の目標は、仮想IP(VIP)を使用して2ノードのHTTPロードバランサーを実装することです。このタスクでは、pacemaker(仮想IPスイッチング)を選択し、キャディーHTTP ロードバランサ用。ロードバランサの選択はこの質問のポイントではありません。:)

私の要件はシンプルです。正常で機能している Caddy インスタンスが実行されているホストに仮想 IP を割り当てたいのです。

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

ただし、仮想 IP が割り当てられているノードに SSH で接続し、Caddy 構成ファイルを不正に作成すると、systemctl restart caddyしばらくすると Pacemaker が Caddy の起動に失敗したことを検出し、単に状態を設定しますstopped

SystemD リソースをstopped状態にするのではなく、Pacemaker に強制的に再起動させ続けるにはどうすればよいですか?

スクリーンショット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    

関連情報