6 定足数デバイスの使用

定足数デバイスは、標準の定足数ルールではノード障害に適切に対応できない場合に、サードパーティ・アービトレータとして機能します。定足数デバイスは、通常は、クラスタ内のノード数が偶数である場合に使用されます。たとえば、2つのノードがあるクラスタでは、それらのノードが通信に失敗すると、スプリットブレインの問題が発生し、どちらのノードも同時にプライマリとして動作し、データが破損する可能性があります。定足数デバイスを使用することで、定足数アービトレーションを実現でき、選択したノードが存続します。

定足数デバイスは、クラスタ自体とは別の物理ネットワーク上で理想的に実行されるサービスです。クラスタ内のノードではないシステムで実行する必要があります。定足数デバイスは、同時に複数のクラスタにサービスを提供できますが、サービスを提供する各クラスタでの唯一の定足数デバイスである必要があります。クラスタ内の各ノードは、定足数デバイス用に構成されます。定足数デバイスは、クラスタ・ネットワーク外のシステムで、ネットワーク・バインドされたサービスとしてインストールされ実行されます。

定足数デバイスのインストールと有効化

定足数デバイスのインストールでは、定足数デバイス・サービスを実行する予定のシステムにpcsおよびcorosync-qnetdパッケージをインストールしてから、既存のクラスタ内の各ノードにcorosync-qdeviceパッケージをインストールする必要があります。

  1. 定足数デバイス・サービスを実行するように割り当てられたシステムで、次を実行します:
    sudo dnf install -y pcs corosync-qnetd
  2. 次を実行することで、systemdのpcsdサービスを有効化し起動します。
    sudo systemctl enable --now pcsd
  3. 定足数デバイス・サービス・ホストでファイアウォールを実行している場合は、ファイアウォール・ポートを開いてそのホストがクラスタと通信できるようにする必要があります。たとえば、次を実行します。
    sudo firewall-cmd --permanent --add-service=high-availability
    sudo systemctl restart firewalld
  4. 定足数デバイス・サービス・ホストで、netモデルを使用するようにそのノードのPacemaker構成を設定することで、定足数デバイス・サービスを有効化し起動します。次を実行します。
    sudo pcs qdev setup model net --enable --start

    このコマンドは、そのホスト用の構成を作成し、そのノードにqdevという名前を付けます。それにより、そのモデルがnetに設定され、そのノードが有効化され起動されます。このコマンドによって、corosync-qnetdデーモンがトリガーされてブート時にロードされ実行されます。

  5. 既存のクラスタ内の各ノードで、次を実行することでcorosync-qdeviceパッケージをインストールします。
    sudo dnf install -y corosync-qdevice

定足数デバイスに関するクラスタの構成

定足数デバイス・サービスを実行するノードは、そのクラスタの残りのノードに対して認証されてからそのクラスタに追加される必要があります。定足数デバイス・サービス・ノードを追加するときに、定足数の決定に使用するアルゴリズムなどの構成オプションを設定できます。定足数デバイスをクラスタに追加した後に、その定足数デバイスのステータスを調べて、デバイスが正しく機能していることを確認できます。

  1. 定足数デバイス・サービス・ノードをクラスタに対して認証します。既存のクラスタ内のノードで、qdevという名前のノードを認証するには、次を実行します。
    sudo pcs host auth qdev

    クラスタのユーザー名とパスワードの入力を求められます。

  2. そのクラスタに対して構成されている定足数デバイスがまだないことを確認します。1つのクラスタに複数の定足数デバイスを構成しないでください。既存のクラスタ内のノードで、次を実行します。
    sudo pcs quorum status
    出力にメンバーシップ情報が含まれていることに注目してください。
    ...
    Membership information
    ----------------------
        Nodeid      Votes    Qdevice Name
             1          1         NR node1 (local)
             2          1         NR node2
    「Qdevice」列の下にNRという値が表示されています。NRという値は、そのクラスタ内のどのノードにも定足数デバイスが登録されていないことを示しています。その他の値が表示されている場合は、まず既存のデバイスを削除してから、そのクラスタへの別の定足数デバイスの追加に進んでください。
  3. 定足数デバイスをそのクラスタに追加します。既存のクラスタ内のいずれかのノードで、次を実行します。
    sudo pcs quorum device add model net host=qdev algorithm=ffsplit
    定足数デバイス・サービスを実行しているホストと一致するホスト(この場合はqdevという名前)、および定足数の決定に使用するアルゴリズム(この場合はffsplit)を指定するということを覚えておいてください。

    アルゴリズム・オプションは次のとおりです。

    • ffsplit: クラスタ内のアクティブ・ノード数が最も多いパーティションを優先する、fifty-fifty splitアルゴリズムです。
    • lms: 定足数デバイス・サービス・ノードにまだ接続できるノードへの投票を返す、last-man-standingアルゴリズムです。単一のノードがまだアクティブで、それが定足数デバイス・サービスに接続できる場合、そのクラスタは定足数に達したままとなります。どのノードも定足数デバイス・サービスに接続できず、いずれかのノードがそのクラスタの残りのノードとの接続を失うと、そのクラスタは定足数に満たなくなります。

    詳細は、corosync-qdevice(8)マニュアル・ページを参照してください。

  4. その定足数デバイスがそのクラスタ内で構成されていることを確認します。既存のクラスタ内の任意のノードで、次を実行します。
    sudo pcs quorum config
    出力で、定足数デバイスが構成されていることと、使用中のアルゴリズムが示されます。
    Options:
    Device:
      Model: net
        algorithm: ffsplit
        host: qdev
    また、次を実行することで、そのクラスタの定足数ステータスを問合せできます:
    sudo pcs quorum status
    出力で定足数のステータスが示されます。
    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
    メンバーシップ情報の「Qdevice」フィールドにA,V,NMWという値が表示されるようになったことに注目してください。このフィールドの値は、次のどれかに等しくなります。
    • 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

定足数デバイスを削除すると、クラスタ構成が更新されてその定足数デバイスの構成エントリが削除され、クラスタ構成がそのクラスタにリロードされてから、各ノードでその定足数デバイスが無効化され停止されます。

複数のクラスタ間で同じ定足数デバイス・サービスを使用できるため、そのクラスタから定足数デバイスを削除しても、定足数デバイス・サービスには影響しません。そのサービスは引き続きサービス・ホストで実行されますが、それが削除されたクラスタに対しては、サービスは提供されなくなります。

定足数デバイス・サービスの破棄

定足数デバイス・サービスが実行されているホスト上でそのサービスを破棄できます。このアクションにより、そのサービスが停止され、そのサービスのすべての構成がホストから削除されます。
sudo pcs qdevice destroy net

ノート:

定足数デバイス・サービスを破棄する前に、そのサービスの提供対象となるすべてのクラスタからその定足数デバイスを削除してください。