DRBD9 Quorumを使ったリソースの制御

DRBD
この記事は最終更新から4年以上経過しています。内容が古くなっている可能性があります。
本記事は サイオステクノロジー社 より寄稿された記事となります
 LINBITクラスタスタックサポート:https://sios.jp/products/linbit/
目次

概要

DRBD9では多ノード接続の特性を生かして、リソースのQuorum制御が出来ます。
この機能を使うと、HAクラスタシステムでよくある障害であるスプリットブレインの発生を防ぐことができます。

そもそもスプリットブレインは、ノード同士を繋ぐ回線が一時的に切断された場合、複数のノードがアクティブ状態になってしまうために発生します。DRBDではアクティブノードの数は1つだけになるように制御されていますが、DRBD同士の通信回線が切断されると、孤立したDRBDノードは、相手のノードの状態にかかわらず、アクティブになってしまう可能性があります。

これまでのDRBDではフェンシング(Fencing)機能を使って、Pacemakerがスタンバイ側のDRBDがアクティブにならないように制御することができましたが、この機能を使うためには最低でも2つの通信チャンネルを持たないと正しく動作しません。例えば仮想環境等でゲストOS間を繋ぐネットワークが複数回線確保できない場合は、フェンシング(Fencing)を使ったHAクラスタの構築は不可能になります。

DRBD9のQuorum機能は、通信できるノードの数がノード総数の半分を超える場合、データの更新ができます。つまり2ノード以上ノードが繋がっていない場合、DRBDのデバイスに書き込みが出来なくなります。

1回線でリソース制御が出来る代わりに、Quorum設定には最低3つのDRBDノードが必要となります。ただし全てのノードにストレージを持つ必要は無く、1台はストレージ無し(Diskless)でも構築出来ます。また、ストレージを持つノードは実サーバ、ストレージ無しのノードは仮想ゲストの構成で構築することも可能です。

それでは実際に3ノード構成のDRBDの環境を構築して、DRBD9のQuorumの仕組みを確認しましょう。

試験環境のセットアップ

必要な環境

まずCentOS7の環境を3ノード準備します。DRBDはリソースをあまり必要としないため、VMwareやVirtualbox等の仮想ゲストを使ってテストをおこなうこともできます。

項目 コメント
メモリー 1GB以上 最低1GBあればDRBD、Pacemakerの動作テストができます。DBやWEBサーバなどを本格的に運用する場合には、それらが必要なメモリーサイズを足してください。
HDD 8GB以上 8GBで十分です。システムに4GB、SWAPに1GB、DRBDデータ同期用に3GBあればテスト環境が構築できます。
NETWORK 3経路 3系統を推奨します。サーバアクセス用に1系統、HA通信用に2系統、DRBDの同期にはHA通信用の回線のうち1つを使います。今回の実験では1系統で確認することも可能です。
OS 最小構成 GUIは不要です。最小構成でインストールしてください。

DRBDは弊社へデモライセンスの申請をいただきLINBITのリポジトリからダウンロードいただくか、コミュティ版をELRepo Projectから入手してください。DRBDのバージョンは必ず9を選択ください。

ホスト名とネットワークの設定

テスト環境のホスト名とネットワーク毎のIPアドレスは次になります。以後の説明でホスト名、IPアドレスが出てきますが、実際の環境に合わせて読み替えて下さい。

ホスト名 enp0s3(nic0) enp0s8(nic1) enp0s9(nic2)
node1 192.168.3.81 10.8.0.1 10.8.1.1
node2 192.168.3.82 10.8.0.2 10.8.1.2
node3 192.168.3.83 10.8.0.3 10.8.1.3

DRBDの設定

DRBDの設定は次です。node3のdisk設定がnoneになっているのはストレージ無し(Diskless)であることを意味します。

DRBDのセットアップ

DRBDの設定方法の記事を参考に3ノード構成のDRBDをセットアップします。
DRBDの設定方法 https://tech-lab.sios.jp/archives/19863

参照記事は2ノードですが、これを3ノード分作業します。

3ノード全てでメタデータを作成します。

メタデータの作成が出来たら、DRBDを起動します。これも3ノードすべてで実行します。

初期化のためにnode1をPrimaryにしてファイルシステムを作成します。
Primaryにするためには --force オプションを付ける必要があります。

--force オプションを付けると、DRBDのストレージの初期同期が開始され、node1からnode2にストレージの内容がコピーされます。
初期同期中にstatusを確認すると、次のように同期の進捗を確認出来ます。
3ノードですので参照記事の内容と少し異なり、node3の情報も表示されます。

同期が終了すると、statusは次のようになります。

冗長化されたデバイスが/dev/drbd0としてアクセスが出来るようになりましたので、xfsのファイルシステムを作成してマウントしてみましょう。

テストケース

node2、node3が正常に停止した場合

node1がアクティブな状態で、node2、node3を停止した場合は、node1のDRBDはそのまま正常に使えます。node2、node3が復帰すればスタンバイとして接続され、スプリットブレインは発生しません。

node2、node3でDRBDを停止します。

node1でDRBDの状態を見ると、node2、node3との通信待ちになります。

正常に停止した場合には、停止のつどノード総数が減るため、Quorum機能は作動しません。

node2、node3との接続を遮断した場合

次に通信障害でnode1とnode2、node3との通信が切れた場合を試します。
node1をアクティブな状態で、node2、node3との接続を切断します。

node1は引き続きアクティブな状態ですが、Quorum設定により、DRBDの領域には書き込みが出来ない状態になります。

マウントしたディレクトリへの書き込みがエラーになります。

node2ではデバイスをマウント出来ます。

node2でファイルシステムを更新しましたが、node1では書き込みが禁止されているため、データの同時更新は発生しません。

一旦node1でのマウントを解除して、回線を復活するとnode2で更新したファイルはnode1へ同期されます。

node2でマウントを解除して、あらためてnode1にマウントすると、node2で作成したファイルがnode1でも確認出来ます。

このようにnode1がアクティブなままnode2でマウントしても、同時マウントとして認識されないため、スプリットブレインは発生しません。node1では回線が切れている間、/drbdへのアクセスがエラーになるので、このエラーを検知してフェールオーバーするようにPacemakerを設定すると、スプリットブレインによる障害が発生しないクラスタシステムを構築することが出来ます。

Pacemakerへの応用

DRBD9のQuorumを使ってHAクラスタを動かしてみます。HA化するサービスとして、MySQLコミュニティ版のサーバを動作させる構築例を紹介します。
Pacemakerの設定は次になります。

※ MySQLのデータディレクトリを /drbd としています。

フェンシング(fencing)を使う場合、DRBDのリソースを定義する必要がありますが、Quorum設定の場合は定義が不要になり、Pacemakerの設定を簡略に書くことができます。
また上の設定にあるようにFilesystemリソースのmonitor設定にOCF_CHECK_LEVEL=20を追加すると、/drbdに.Filesystem_statusという名称のディレクトリが作成され、20秒毎にテストファイルが書き込まれます。ファイルシステムへの定期的な書き込みが失敗するとres_filesystemがnode1で起動不能になり、node2へフェールオーバーします。

HAクラスタの初期状態です。node1でMySQLサーバが起動しています。

次に通信障害のためnode2、node3への疎通が切れた想定で、iptablesコマンドを用いて回線を切断します。

node1は孤立したノードになり、/drbdへの書き込みが失敗してnode2へフェールオーバーしました。

通信障害が回復して、node1で検知したPacemakerのエラーをクリーンアップすると、node2からnode1へサービスが復帰(フェールバック)します。

エラー情報のクリーンアップにはcrm resourceコマンドを使います。

エラー情報がクリーンアップされたら、HAクラスタの状態を確認します。

node1でMySQLサーバが起動しています。

まとめ

このようにDRBD9のQuorum機能を使うと、従来のフェンシング(Fencing)を使うより簡単かつ確実にDRBDの制御が可能になるため、スプリットブレインの発生を減らし、データの信頼性を高めることができます。

参考URL:
LINBITによるDRBD Quorumの紹介Blog
https://www.linbit.com/split-brain-ibm-drbd-quorum

また、AWS上でのDRBD + PacemakerによるHAクラスタの構築手順も公開しておりますので、興味のある方は、ご一読下さい。

DRBDはLINBIT HA-Solutions GmbHの登録商標です。
よかったらシェアしてね!
  • URLをコピーしました!
目次