1

Pacemaker/Corosync を使用して 2 台のコンピューターをクラスター化しようとしています。彼らが共有する唯一のリソースは ocf:heartbeat:IPaddr です。これが主な問題です:

ノードが 2 つしかないため、フェイルオーバーはno-quorum-policy=ignore.

ネットワーク ケーブルがノード A から引き抜かれると、ノード A の corosync が 127.0.0.1 にバインドされ、Pacemaker はノード A がまだオンラインで、ノード B がオフラインであると認識します。

Pacemaker はノード A で IPaddr を開始しようとしますが、ネットワーク接続がないため開始に失敗します。一方、ノード B はノード B がオフラインであることを認識し、IPaddr サービスがノード A で開始された場合、それ自体 (ノード B) で正常に開始されます。

ただし、サービスはノード A で開始できなかったため、致命的な状態になり、クラスターに再参加するには再起動する必要があります。(代わりに、必要なサービスの一部を再起動できます。)

1 つの回避策は、start-failure-is-fatal="false"ノード A が成功するまで IPaddr サービスの開始を試行し続けるようにするセットです。これに関する問題は、成功すると、2 つのノードが再クラスター化され、いずれかがリソースを放棄するまで、2 つのノード間で IP 競合が発生することです。

私はcat /sys/class/net/eth0/carrier、ケーブルが接続されている場合は 1 で、ケーブルが切断されている場合は 0 であるノード属性をミラーリングし、「接続されている」== ゼロの場合はサービスを開始しないというロケーション ルールを設定するというアイデアをいじっています。ことですが、見ていきます。

どんな考えやアイデアも大歓迎です。

4

2 に答える 2