私の目標は、仮想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 に強制的に再起動させ続けるにはどうすればよいですか?
それに加えて、設定ファイルを修正して を実行すると起動します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