こんにちは、SCSK 野口です。
『 第6回 HAクラスター構成の敵「スプリットブレイン対策」はこれだ! 』 では、
LifeKeeper の Quorum/Witnessについて少し触れましたが、Quorum/Witness は
クラスターシステムにおいて重要な役割(スプリットブレイン対策)です。
今回は、もう少し深堀をし、Quorum/Witnessの種類とパラメータについてお伝えします。
Quorum/Witnessとは
おさらい
『 第6回 』 でも Quorum/Witness の機能について説明しましたが、
改めて「Quorum Check」(Quorum機能) と 「Witness Check」(Witness機能) を下記に記します。
Quorum Check⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅クラスター全体で合意(多数決)するための機能
「リソースを起動する権利はあるのか」クラスター全体で合意するための仕組みです。
Witness Check⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅第三者ノードに問い合わせて再確認する機能 (セカンドオピニオン)
「相手ノードは本当にダウンしたのか」第三者ノード(デバイス)に問い合わせる仕組みです。

Quorum/Witnessは、「Quorum Check」と「Witness Check」が合わさった機能なんだね!
Quorumの種類(Majorityモード、Storageモード)
おさらいで、Quorum/Witnessの機能についてざっくりと説明しましたが、
次は、実際にどのような構成があるか具体的な例を2つご紹介いたします。
Storage構成図では、Node1がQWKオブジェクト1にデータを書き込み、そのデータをNode2が監視しています。
同時に、Node2はQWKオブジェクト2にデータを書き込み、そのデータをNode1が監視しています。
つまり、両方のノードが互いにデータを書き込み、監視し合っている状態です。

Majority構成は多数決だから、ノードを奇数台用意しなきゃなんだね!
Storage構成はお互いに書き込みと監視してるんだ⁉
Quorumの種類によって設定可能なWitnessモード
majorityモードで使用可能なWitnessモード storageモードで使用可能なWitnessモード
・remote_verify ・storage(他は選択できません。)
・none または off
選択したQuorumモードで、設定できるWitnessモードは決まっています。

QuorumとWitnessの構成が正しくないと、
リソース作成 & 拡張時にサーバーが誤って停止する可能性があるわよ!
パラメータの設定値
続いては、実際にどのようなパラメータの設定値があるのかをご紹介いたします。
今回、ご紹介するパラメータの設定値は
「Quorum/Witness共通のパラメーター」と「選択したモードによって有効なパラメーター」です。
Quorum/Witness共通のパラメータ
QUORUM_MODE
・majority………ハートビート通信で疎通確認をし、Quorum チェックを行う
・tcp_remote……ハートビート通信で独立したホストに対して、
指定されたポート上の TCP/IP サービスに接続確認をし、Quorum チェックを行う
・storage………共有ストレージを Witness デバイスとして用いて、Quorum チェックを行う
・none/off………Quorumチェックを無効にする。
WITNESS_MODE
・remote_verify……クラスター内で他のすべてのノードに対して
障害が疑われるノードのステータスに関する意見を求める
・storage………共有ストレージに書き込まれた情報を定期的に確認する
・none/off………Witnessチェックを無効にする
QUORUM_LOSS_ACTION
・fastkill……Quorumの喪失が検出されると、システムを直ちに再起動する
・fastboot……Quorumの喪失が検出されると、システムを直ちに停止する (手動で起動する必要があります)
・osu……………Quorumの喪失が検出されると、システム上のリソースをサービス休止状態にする
ALLOW_EXTEND_WITH_QUORUM_ERROR
・true……Quorumシステムの障害/エラーが発生した場合拡張する
・false……Quorumシステムの障害/エラーが発生した場合拡張しない
選択したモードによって有効なパラメーター
QUORUM_HOSTS
・”host:port” 形式……複数指定の場合はカンマ区切り
(設定例)QUORUM_HOSTS=myhost:80,router1:443,router2:22
QUORUM_TIMEOUT_SECS
・整数値を指定
※ 青文字はデフォルト値となります。
QWK_STORAGE_TYPE
・block………共有ストレージに物理ストレージやRDM(物理互換)、iSCSI(VM 内イニシエーター)を使用する場合
・file…………共有ストレージにNFS (または Amazon EFS) を使用する場合
・aws_s3……共有ストレージに AmazonのS3 、または Amazon S3互換のオブジェクトストレージを使用する場合
QWK_STORAGE_HBEATTIME
・5以上10以下……QWKオブジェクトへ読み書きする間隔を秒単位で設定
QWK_STORAGE_NUMHBEATS
・3以上……QWKオブジェクトの読み込みにおいて、設定した回数以上更新が停止していると障害と判断
QWK_STORAGE_OBJECT_<ホスト名>
・ホスト名に”-”または”.”を含む場合、アンダースコア“_”に置き換える
HTTP_PROXY, HTTPS_PROXY, NO_PROXY
・AWS CLIの通信をプロキシ経由で行う場合に設定 (設定した値がそのまま AWS CLI へ渡される)

これらのパラメータは etc/default/LifeKeeper 設定ファイルで編集や追記できるわよ!
まとめ
今回は、Quorum/Witness の種類 と パラメータ についてご紹介しましたがいかがでしたか。
・Quorum/Witnessは「Quorum Check」と「Witness Check」という 2つの機能がある
・Quorumの種類には「Majorityモード」と「Storageモード」という種類がある
・パラメータは「共通のパラメーター」と「選択したモードによって有効なパラメーター」がある
この記事で、上記3点をご認識いただけたら幸いです。