2ノードのアクティブ/パッシブLinux HAペースメーカークラスタでSTONITHをセットアップする方法


12

PostgreSQLデータベースを稼働状態に保つために、corosyncとpacemakerを備えたアクティブ/パッシブ(2ノード)Linux-HAクラスターをセットアップしようとしています。DRBDとservice-ipを介して動作します。node1に障害が発生した場合、node2が引き継ぎます。PGがnode2で実行され、失敗した場合も同じです。STONITHのものを除き、すべてが正常に機能します。

ノード間には専用のHA接続(10.10.10.X)があるため、次のインターフェース構成があります。

eth0            eth1            host
10.10.10.251    172.10.10.1     node1
10.10.10.252    172.10.10.2     node2

Stonithは有効になっており、ノードを強制終了するためにssh-agentでテストしています。

crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore

crm configure primitive stonith_postgres stonith:external/ssh \
                params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres

crm_mon -1 ショー:

============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
4 Resources configured.
============

Online: [ node2 node1 ]

Full list of resources:

 Master/Slave Set: ms_drbd_postgres
     Masters: [ node1 ]
     Slaves: [ node2 ]
 Resource Group: postgres
     fs_postgres        (ocf::heartbeat:Filesystem):    Started node1
     virtual_ip_postgres        (ocf::heartbeat:IPaddr2):       Started node1
     postgresql (ocf::heartbeat:pgsql): Started node1
 Clone Set: fencing_postgres
     Started: [ node2 node1 ]

問題は、eth0インターフェース間の接続を切断すると、両方のノードが強制終了されることです。ノードが2つしかないため、クォーラムの問題だと思います。しかし、適切なクォーラムの計算のためだけに3番目のノードを追加したくありません。

この問題を解決するアイデアはありますか?


crm_monクラスターが障害状態の場合の出力はどのようになりますか?
ラースク

1
今、私はpostgresのような同じノードで実行されない1つのstonithデバイスを使用しています。この作品は予想通りです!
MMore

回答:


21

これは少し古い質問ですが、ここで提示する問題は、クラスター、特に2ノードクラスターでのフェールオーバーがいつどのように機能するかについての誤解に基づいています。

要点は次のとおりです。2つのノード間の通信を無効にしてフェールオーバーテストを行うことはできません。これを行うと、表示されているとおりの結果が得られます。スプリットブレインシナリオでは、相互STONITHが追加されます。フェンシング機能をテストする場合killall -9 corosyncは、アクティブノードで簡単に実行できます。他の方法がありますcrm node fencestonith_admin -Fです。

クラスターの完全ではない記述(crm configure showおよびの出力はcat /etc/corosync/corosync.confどこですか)から、メッセージング、つまりCorosync /クラスター通信に10.10.10.xxアドレスを使用しているようです。172.10.10.xxアドレスは通常/サービスネットワークアドレスであり、172.10.10.xxアドレスによって、たとえばSSHを使用して特定のノードにアクセスします。DNSは、次のようなノードのホスト名も解決するようです。node1、172.10.1.1のです。

SSHを使用するようにSTONITHを設定しましたが、それ自体はあまり良い考えではありませんが、おそらくテスト中です。自分では使用していませんが、SSH STONITHエージェントが他のノードにログインし、同様の、ssh root@node2 "shutdown -h now"または同等のシャットダウンコマンドを発行すると仮定します。

では、ノード間のクラスター通信を切断するとどうなりますか?ノード間の通信がなくなるため、ノードは各ノードを正常であると見なしなくなります。したがって、各ノードは、それが何らかの不幸なイベントの唯一の生存者であると想定し、アクティブノードまたはプライマリノードになろうとする(または残る)ことを試みます。これは、古典的で恐ろしいスプリットブレインのシナリオです。

これの一部は、明らかに、おそらく故障た他のノードが完全にダウンしていることを確認することです。STONITHの出番です。両方のノードが同じゲームをプレイしていることに注意してください。すべてのクラスターリソースに加えて、頭の他のノードを撮影します。

おそらく今何が起こっているか推測できます。node1ssh root@node2 "shutdown -h now"node2ssh root@node1 "shutdown -h now"ます。これは、クラスター通信ネットワーク10.10.10.xxではなく、サービスネットワーク172.10.10.xxを使用します。両方のノードは実際には正常に動作しているため、コマンドを発行したり、SSH接続を受信したりするのに問題はありません。したがって、両方のノードが同時にお互いを撃ちます。これにより、両方のノードが強制終了されます。

STONITHを使用しない場合、特にDRBDの場合、両方のノードがプライマリになる可能性があるため、スプリットブレインはさらに悪い結果をもたらす可能性があります。データ破損が発生する可能性が高いため、スプリットブレインを手動で解決する必要があります。

http://www.hastexo.com/resources/hints-and-kinksの資料を読むことをお勧めします。この資料は、今日「Linux HAスタック"。

TL; DR:フェンシングのセットアップをテストするためにノード間のクラスター通信を切断している場合、間違っています。使用killall -9 corosynccrm node fenceまたはstonith_admin -Fその代わり。クラスタ通信を切断すると、スプリットブレインシナリオのみが発生し、データ破損が発生する可能性があります。


2

auto_tie_breaker: 1/etc/corosync/corosync.confのクォーラムセクションに追加してみてください。

ATBが有効になっている場合、クラスターは決定論的に最大50%のノードで同時に障害が発生する可能性があります。クラスターパーティション、または最も低いnodeidを持つノードとまだ接続しているノードのセットは、クォーターのままです。他のノードは有効です。


0

PacemakerドキュメントのQuorumおよび2ノードクラスタの章を読んでみてください。


「no-quorum-policy = ignore」のことを意味すると思います。既に設定しました(最初の投稿も編集しました)。ここで私を助けません。もっと細かい点を教えてください。
-MMore

まあ、ドキュメントは、クラスターにクォーラムの問題がある場合、ペースメーカーが特定のメッセージをログに記録することを示唆しています。あなたはあなたのログにそれを見ていますか?何がcrm_mon表示されますか?
ラースク

sthが見つかりません。ログで興味深い。の情報で最初の投稿を編集しましたcrm_mon -1
MMore

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.