こんにちは SCSK 野口です。
前回の記事 『LifeKeeper の Quorum/Witness (Storage) を導入してみた』 では、
Quorum/Witness(Storage)を実際に導入してみました。
まだ、お読みでない方は上記リンクからご覧ください。
本記事では、Quorum/Witness(Majority)を仮想マシン上のLinux環境に導入してみます。
おさらい
前々回の記事でもお伝えしましたが、Majority構成は多数決判定をするため、
ノードを奇数用意する必要があります。そのため、Majority構成は 3ノード以上から動作可能となってます。
また、majorityモードで使用可能な Witnessモードは以下となります。
・remote_verify
・none または off

QuorumとWitnessの構成が正しくないと、サーバが誤って停止するんだったよね!
導入
今回の構成について
今回も Virtual Box (仮想VM) を使用し、3台のサーバ (ノード) 構成にします。
前回の Active/Standby構成のクラスターに Witnessサーバを追加することによって、多数決を実現します。
3ノード以上の奇数台構成のクラスターであれば、追加のノードを用意する必要はありません。
Majority構成では、Quorum チェックを実行した後に、Witness チェックを実行します。

専用のWitnessノードは、複数のクラスターで共有することができるわよ!
でも、複数のクラスターで同時に障害が発生したら、
通常の構成よりもフェイルオーバーに時間がかかってしまうわ。

だから、専用のWitnessノードは1つのクラスターだけで使用することをお勧めしてるんだね!
動作環境
今回の Quorum/Witness (Majority)を導入した構成は以下となります。

前回の Active/Standby構成に Witnessサーバを導入するわ!

導入する際、Witnessサーバ間でもコミュニケーションパスを作成しなきゃだね!
導入手順
1.Witnessサーバをセットアップし、他のサーバとネットワーク通信ができることを確認します。
※ サーバセットアップの詳細は省かせていただきます。
新たに追加したWitnessサーバ間とも通信できているか、pingコマンドで疎通確認してみます。
[root@rhel75wit ~]# ping -c 3 rhel75n01 PING rhel75n01 (192.168.56.130) 56(84) bytes of data. 64 bytes from rhel75n01 (192.168.56.130): icmp_seq=1 ttl=64 time=1.13 ms 64 bytes from rhel75n01 (192.168.56.130): icmp_seq=2 ttl=64 time=2.61 ms 64 bytes from rhel75n01 (192.168.56.130): icmp_seq=3 ttl=64 time=1.37 ms --- rhel75n01 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 1.134/1.707/2.618/0.651 ms [root@rhel75wit ~]# ping -c 3 rhel75n02 PING rhel75n02 (192.168.56.140) 56(84) bytes of data. 64 bytes from rhel75n02 (192.168.56.140): icmp_seq=1 ttl=64 time=0.747 ms 64 bytes from rhel75n02 (192.168.56.140): icmp_seq=2 ttl=64 time=2.91 ms 64 bytes from rhel75n02 (192.168.56.140): icmp_seq=3 ttl=64 time=1.67 ms --- rhel75n02 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.747/1.779/2.914/0.888 ms
2.Witnessサーバにも LifeKeeperをインストールします。
その際、「Use Quorum/Witness functions」を有効にし、Quorum/Wintness パッケージをインストールします。
3.Witnessサーバも含めた、すべてのノード間でコミュケーションパスを作成し、ALIVEであることを確認します。
LKWMCの場合は、左タスクバーの「コミュニケーションパス」を選択します。
コミュニケーションパスのステータスが「ALIVE」であることを確認します。
4.すべてのノードで Quorum/Witnessの設定を行います。(/etc/default/LifeKeeper)
初めに、1号機と2号機を下記のように設定していきます。
次に、Witnessサーバを下記のように設定します。
上記の手順が完了すると、そのクラスターでは Quorum/Witness 機能が動作するようになり、
フェイルオーバーが許可される前に、Quorum チェックおよび Witness チェックが行われます。
前回の Quorum Witness (Storage) と違い、初期化コマンドなどはありません。

Witnessノードはリソースを持たないから、
QuorumチェックとWitnessチェックを実施する必要はないわ!

だから、QUORUM_MODE と WITNESS_MODEを「none」にしてたんだね!
動作確認
1号機 (rhel75n01) 2号機 (rhel75n02) 間のコミュニケーションパスを切断しても
Witnessサーバの監視により「お互いが見えている状態か」、実際に確認してみます。
今回、1,2号機間のコミュニケーションパスで利用しているネットワークインターフェース
「 enp0s8(192.168.58.130)」を ifdownコマンドで無効化(シャットダウン)します。
[root@rhel75n01 ~]# ifdown enp0s8 デバイス 'enp0s8' が正常に切断されました。
ifdownコマンドを実行後、「リソースツリー」画面を確認すると、このように表示されます。
コミュニケーションパス (192.168.58.130)のステータスが「DEAD」であることを確認します。
1号機 (rhel75n01) 2号機 (rhel75n02)のログを確認すると、
お互いがサービスを継続していることが分かるメッセージがあります。
Aug 29 18:30:05 rhel75n01 lifekeeper[14514]: NOTIFY:event.comm_down:::010469:We do have quorum on comm_down to rhel75n02, continuing Aug 29 18:30:02 rhel75n02 lifekeeper[10132]: NOTIFY:event.comm_down:::010469:We do have quorum on comm_down to rhel75n01, continuing
最後に 1号機で lcdstatus -eコマンドを実行し、仮想IPリソースが「ISP(正常稼働)」であることを確認します。
まとめ
今回は Quorum/Witness(Majority) を実際に導入してみましたがいかがでしたか。
導入する際は、以下の点に注意してください。
・導入する際は、Witnessノード含めたコミュニケーションパスを作成し、 Aliveであることを確認する。
・動作確認では、1,2号機間のコミュパスに障害を起こしても、問題なく稼働し続けることを確認する。