6 定足数デバイスの使用
定足数デバイスは、標準の定足数ルールではノード障害に適切に対応できない場合に、サードパーティ・アービトレータとして機能します。定足数デバイスは、通常は、クラスタ内のノード数が偶数である場合に使用されます。たとえば、2つのノードがあるクラスタでは、それらのノードが通信に失敗すると、スプリットブレインの問題が発生し、どちらのノードも同時にプライマリとして動作し、データが破損する可能性があります。定足数デバイスを使用することで、定足数アービトレーションを実現でき、選択したノードが存続します。
定足数デバイスは、クラスタ自体とは別の物理ネットワーク上で理想的に実行されるサービスです。クラスタ内のノードではないシステムで実行する必要があります。定足数デバイスは、同時に複数のクラスタにサービスを提供できますが、サービスを提供する各クラスタでの唯一の定足数デバイスである必要があります。クラスタ内の各ノードは、定足数デバイス用に構成されます。定足数デバイスは、クラスタ・ネットワーク外のシステムで、ネットワーク・バインドされたサービスとしてインストールされ実行されます。
定足数デバイスのインストールと有効化
定足数デバイスのインストールでは、定足数デバイス・サービスを実行する予定のシステムにpcs
およびcorosync-qnetd
パッケージをインストールしてから、既存のクラスタ内の各ノードにcorosync-qdevice
パッケージをインストールする必要があります。
- 定足数デバイス・サービスを実行するように割り当てられたシステムで、次を実行します:
sudo dnf install -y pcs corosync-qnetd
- 次を実行することで、systemdの
pcsd
サービスを有効化し起動します。sudo systemctl enable --now pcsd
- 定足数デバイス・サービス・ホストでファイアウォールを実行している場合は、ファイアウォール・ポートを開いてそのホストがクラスタと通信できるようにする必要があります。たとえば、次を実行します。
sudo firewall-cmd --permanent --add-service=high-availability sudo systemctl restart firewalld
- 定足数デバイス・サービス・ホストで、
net
モデルを使用するようにそのノードのPacemaker構成を設定することで、定足数デバイス・サービスを有効化し起動します。次を実行します。sudo pcs qdev setup model net --enable --start
このコマンドは、そのホスト用の構成を作成し、そのノードに
qdev
という名前を付けます。それにより、そのモデルがnet
に設定され、そのノードが有効化され起動されます。このコマンドによって、corosync-qnetd
デーモンがトリガーされてブート時にロードされ実行されます。 - 既存のクラスタ内の各ノードで、次を実行することで
corosync-qdevice
パッケージをインストールします。sudo dnf install -y corosync-qdevice
定足数デバイスに関するクラスタの構成
定足数デバイス・サービスを実行するノードは、そのクラスタの残りのノードに対して認証されてからそのクラスタに追加される必要があります。定足数デバイス・サービス・ノードを追加するときに、定足数の決定に使用するアルゴリズムなどの構成オプションを設定できます。定足数デバイスをクラスタに追加した後に、その定足数デバイスのステータスを調べて、デバイスが正しく機能していることを確認できます。
- 定足数デバイス・サービス・ノードをクラスタに対して認証します。既存のクラスタ内のノードで、qdevという名前のノードを認証するには、次を実行します。
sudo pcs host auth qdev
クラスタのユーザー名とパスワードの入力を求められます。
- そのクラスタに対して構成されている定足数デバイスがまだないことを確認します。1つのクラスタに複数の定足数デバイスを構成しないでください。既存のクラスタ内のノードで、次を実行します。
sudo pcs quorum status
出力にメンバーシップ情報が含まれていることに注目してください。「Qdevice」列の下にNRという値が表示されています。NRという値は、そのクラスタ内のどのノードにも定足数デバイスが登録されていないことを示しています。その他の値が表示されている場合は、まず既存のデバイスを削除してから、そのクラスタへの別の定足数デバイスの追加に進んでください。... Membership information ---------------------- Nodeid Votes Qdevice Name 1 1 NR node1 (local) 2 1 NR node2
- 定足数デバイスをそのクラスタに追加します。既存のクラスタ内のいずれかのノードで、次を実行します。
定足数デバイス・サービスを実行しているホストと一致するホスト(この場合はqdevという名前)、および定足数の決定に使用するアルゴリズム(この場合はffsplit)を指定するということを覚えておいてください。sudo pcs quorum device add model net host=qdev algorithm=ffsplit
アルゴリズム・オプションは次のとおりです。
ffsplit
: クラスタ内のアクティブ・ノード数が最も多いパーティションを優先する、fifty-fifty splitアルゴリズムです。lms
: 定足数デバイス・サービス・ノードにまだ接続できるノードへの投票を返す、last-man-standingアルゴリズムです。単一のノードがまだアクティブで、それが定足数デバイス・サービスに接続できる場合、そのクラスタは定足数に達したままとなります。どのノードも定足数デバイス・サービスに接続できず、いずれかのノードがそのクラスタの残りのノードとの接続を失うと、そのクラスタは定足数に満たなくなります。
詳細は、
corosync-qdevice(8)
マニュアル・ページを参照してください。 - その定足数デバイスがそのクラスタ内で構成されていることを確認します。既存のクラスタ内の任意のノードで、次を実行します。
出力で、定足数デバイスが構成されていることと、使用中のアルゴリズムが示されます。sudo pcs quorum config
また、次を実行することで、そのクラスタの定足数ステータスを問合せできます:Options: Device: Model: net algorithm: ffsplit host: qdev
出力で定足数のステータスが示されます。sudo pcs quorum status
メンバーシップ情報の「Qdevice」フィールドにA,V,NMWという値が表示されるようになったことに注目してください。このフィールドの値は、次のどれかに等しくなります。Quorum information ------------------ Date: Fri Jul 15 14:19:07 2022 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1/8272 Quorate: Yes Votequorum information ---------------------- Expected votes: 3 Highest expected: 3 Total votes: 3 Quorum: 2 Flags: Quorate Qdevice Membership information ---------------------- Nodeid Votes Qdevice Name 1 1 A,V,NMW node1 (local) 2 1 A,V,NMW node2 0 1 Qdevice
A/NA
: 定足数デバイスがそのクラスタ内の各ノードに対して有効であるか有効でないことを示します。V/NV
: 定足数デバイスがノードに投票したかどうかを示します。クラスタが分割された場合は、一方のノードがVに設定され、他方がNVに設定されます。-
MW/NMW
: 定足数デバイスのmaster_wins
フラグが設定されているかどうかを示します。master_wins
フラグも設定されているアクティブな定足数デバイスがあるノードは、そのクラスタのノード投票に関係なく、定足数に達します。デフォルトでは、このオプションは設定されていません。
定足数デバイスの管理
定足数デバイス・サービスは、その定足数デバイス・サービスが実行されているホスト・システムから管理する必要があります。
クラスタの定足数構成、およびクラスタ・ノード上の定足数デバイスの構成は、そのクラスタ自体の任意のノードで操作することによって実行します。
定足数デバイス・サービスの制御
定足数デバイス・サービスを直接制御するための様々な操作を実行できます。定足数デバイス・サービスを制御するコマンドは、その定足数デバイス・サービスが実行されているホストで実行する必要があります。
- そのサービスのすべてのステータスを表示するには、次を実行します。
次のような出力が表示されます。sudo pcs qdevice status net --full
QNetd address: *:5403 TLS: Supported (client certificate required) Connected clients: 2 Connected clusters: 1 Maximum send/receive size: 32768/32768 bytes Cluster "test": Algorithm: ffsplit Tie-breaker: Node with lowest node ID Node ID 2: Client address: ::ffff:192.168.2.25:33526 HB interval: 8000ms Configured node list: 1, 2 Ring ID: 1.16 Membership node list: 1, 2 TLS active: Yes (client certificate verified) Vote: ACK (ACK) Node ID 1: Client address: ::ffff:192.168.2.26:48786 HB interval: 8000ms Configured node list: 1, 2 Ring ID: 1.16 Membership node list: 1, 2 TLS active: Yes (client certificate verified) Vote: ACK (ACK)
- サービスを開始するには、次を実行します。
sudo pcs qdevice start net
- サービスを停止するには、次を実行します。
sudo pcs qdevice stop net
- サービスを有効にしてブート時に実行されるようにするには、次を実行します。
sudo pcs qdevice enable net
- サービスを無効にしてブート時に再起動されないようにするには、次を実行します。
sudo pcs qdevice disable net
- 通常の停止プロセスが機能していない場合にサービスを強制的に停止するには、次を実行します:
sudo pcs qdevice kill net
定足数デバイスの設定の更新
定足数デバイスは、いつでもクラスタ構成で更新できます。定足数デバイス構成の変更は、そのクラスタ内のノードで実行する必要があります。通常、定足数デバイスの変更にはアルゴリズムの変更が伴いますが、定足数デバイスについて使用できるその他のオプションも同じように変更できます。
定足数デバイスに使用するアルゴリズムを更新するには、次を実行します。
sudo pcs quorum device update model algorithm=lms
この例では、アルゴリズムを、lms
(つまり、last-man-standing)アルゴリズムを使用するように変更しています。
ノート:
定足数デバイスのホストは更新できません。ホストを変更する必要がある場合は、デバイスを削除してからクラスタに追加しなおす必要があります。クラスタからの定足数デバイスの削除
sudo pcs quorum device remove
定足数デバイスを削除すると、クラスタ構成が更新されてその定足数デバイスの構成エントリが削除され、クラスタ構成がそのクラスタにリロードされてから、各ノードでその定足数デバイスが無効化され停止されます。
複数のクラスタ間で同じ定足数デバイス・サービスを使用できるため、そのクラスタから定足数デバイスを削除しても、定足数デバイス・サービスには影響しません。そのサービスは引き続きサービス・ホストで実行されますが、それが削除されたクラスタに対しては、サービスは提供されなくなります。