web-dev-qa-db-ja.com

カーネルパニックのハートビートミートウェアSTONITH

ハートビートとDRBDがmysqlリソースを管理する2ノードクラスターがあります。プライマリを停止するか、再起動するか、ネットワーク接続を切断すると、フェイルオーバーはうまく機能します。

ただし、プライマリがカーネルパニック(echo c > /proc/sysrq-triggerの実行によってシミュレート)に苦しんでいる場合、セカンダリはリソースを引き継ぎません。

セカンダリのハートビートログは次のようになります。

Jul 11 21:33:32 rad11 heartbeat: [7519]: WARN: node rad10: is dead
Jul 11 21:33:32 rad11 heartbeat: [7519]: info: Link rad10:eth0 dead.
Jul 11 21:33:32 rad11 heartbeat: [8442]: info: Resetting node rad10 with [Meatware STONITH device]
Jul 11 21:33:32 rad11 heartbeat: [8442]: ERROR: glib: OPERATOR INTERVENTION REQUIRED to reset rad10.
Jul 11 21:33:32 rad11 heartbeat: [8442]: ERROR: glib: Run "meatclient -c rad10" AFTER power-cycling the machine.

この状況でセカンダリがテイクオーバーに失敗する理由を誰かが知っていますか?通常、フェイルオーバーはうまく機能しますが、プライマリノードでカーネルパニックをシミュレートしようとしています。

編集:これが私のハートビート設定、ha.cfです

# /etc/ha.d/ha.cf

logfile /var/log/ha-log

keepalive 1

deadtime 10

udpport 695

ucast eth0 rad11
auto_failback on
stonith_Host rad10 meatware rad11
stonith_Host rad11 meatware rad10
node rad10 rad11
7
Ethan Hayon

クラスターノードが相互に接続を失った場合、 split-brain シナリオを回避するために、両方のノードがプライマリであると見なし、共有リソースを同時に実行しようとします。結果として発生する可能性のある災害(これは、2つのノードクラスターで特に大きな問題です。両方のノードがそれぞれ1票を持っている場合、誰がクォーラムを持っているのでしょうか?)、これを軽減するために、一部のクラスターはさまざまな形式を実装しますフェンシングの。

linux-ha wiki page:

フェンシングは、ステータスが不確実なノードからリソースをロックするプロセスです。

利用可能なフェンシング技術にはさまざまなものがあります。

ノードをフェンシングすることができます-Nodeフェンシングを使用するか、リソースフェンシングを使用してリソースをフェンスします。一部のタイプのリソースはセルフフェンシングリソースであり、一部は同時使用によって損傷せず、必要ありません。フェンシング。

ノードがクリーンシャットダウンを実行すると、ノードはクラスターを適切に離れ、それによって他のノードは何が起きているかを認識し、ノードが実行していた可能性のあるサービスを引き継いで続行します。ノードがクラスターを離れる代わりにカーネルパニックをうまく取得すると、他のクラスターメンバーは他のノードのステータスを知りません。それは彼らの観点からは「不確実」であるため、代わりに構成された「フェンシング」アクションを実行します。これは、STONITHの場合、クラスターから強制的に(電源の入れ直しなどによって)偽のノードを削除しようとすることを意味します。

ログを見ると、クラスター構成にmeatware[〜#〜] stonith [〜#〜] メカニズムが選択されているようです。名前が示すように、他のノードの電源を手動で入れ直してから、上記のコマンドを実行することを意味します。から doc

食器

奇妙な名前とシンプルなコンセプト。食器を操作するには、人間の助けが必要です。ミートウェアは、呼び出されるたびに、ノードのコンソールに表示されるCRIT重大度メッセージをログに記録します。次に、オペレーターはノードがダウンしていることを確認し、meatclient(8)コマンドを発行して、ノードが停止していると見なす可能性があることをクラスターに通知してもよいことをミートウェアに通知する必要があります。詳細については、README.meatwareを参照してください。

フェンシングを構成する方法は他にもあります。 クラスターを作成するとき、私は通常、PSU用に2つのAPCスイッチを取得し、「APCフェンシング」を構成しますstonith -t apcmaster -h)。そうすれば、一方のノードに障害が発生した場合、もう一方のノードは、APCインターフェイスにログインし、接続されたPSUスロットでshutdown/restartコマンドを送信して障害のあるメンバーの電源を入れ直すことでハードリブートを実行します(単一障害点を回避するために2つ取得します)。 。

2
Petter H