目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise High Availability Extensionのドキュメント / 管理ガイド / 設定および管理 / QDeviceとQNetd
適用項目 SUSE Linux Enterprise High Availability Extension 15 SP4

12 QDeviceとQNetd

QDeviceとQNetdはクォーラムの決定に参加します。アービトレータcorosync-qnetdからの支援により、corosync-qdeviceは設定可能な投票数を提供するため、クラスタは標準のクォーラムルールで許可されているよりも多くのノード障害に耐えることができます。2ノードクラスタにはcorosync-qnetdcorosync-qdeviceを展開することを強くお勧めしますが、ノード数が偶数のクラスタには一般的にQNetdとQDeviceを使用することもお勧めします。

12.1 概念の概要

クラスタノード間のクォーラを計算するのと比較して、QDevice-and-QNetdアプローチには次の利点があります。

  • ノード障害が発生した場合の持続可能性が向上します。

  • 投票に影響する独自のヒューリスティックススクリプトを作成できます。これは、SAPアプリケーションなどの複雑なセットアップに特に役立ちます。

  • 複数のクラスタに投票を提供するようにQNetdサーバを設定できます。

  • 2ノードクラスタでディスクレスSBDを使用できます。

  • スプリットブレイン状況下で偶数のノードを持つクラスタ、特に2ノードクラスタのクォーラムの決定に役立ちます。

QDevice/QNetdを使用したセットアップは、次のコンポーネントとメカニズムで構成されます。

QDevice/QNetdコンポーネントとメカニズム
QNetd (corosync-qnetd)

クラスタの一部ではないsystemdサービス(デーモン、QNetdサーバ)。systemdサービスは、corosync-qdeviceデーモンに投票を提供します。

セキュリティを向上させるため、corosync-qnetdは、クライアント証明書の確認にTLSと連携することができます。

QDevice (corosync-qdevice)

Corosyncとともに実行されている各クラスタノード上のsystemdサービス(デーモン)。これはcorosync-qnetdのクライアントです。その主な用途は、クラスタが標準のクォーラムルールが許可するよりも多くのノード障害に耐えることができるようにすることです。

QDeviceはさまざまなアービトレータと連携するように設計されています。ただし、現在では、QNetdのみがサポートされています。

アルゴリズム

QDeviceは投票の割り当て方法の動作を決定する、さまざまなアルゴリズムをサポートしています。現在は、以下が存在します。

  • FFSplit (fifty-fifty split)がデフォルトです。これは、ノード数が偶数のクラスタに使用されます。クラスタが2つの同じパーティションに分割される場合、このアルゴリズムによりヒューリスティックスの確認と他の要因に基づいて、パーティションのいずれかに1票が提供されます。クラスタが2つの同様のパーティションに分割される場合、このアルゴリズムによりヒューリスティックスの確認と他の要因に基づいて、パーティションのいずれかに1票が提供されます。

  • LMS (last man standing)では、QNetdサーバを確認できる残っている唯一のノードに1票が与えられます。QNetdサーバを確認できる残っている唯一のノードである場合に、1票が返されます。したがって、このアルゴリズムは、アクティブな1つのノードのみを持つクラスタがクォーラムに達した状態を維持する必要がある場合に役立ちます。

ヒューリスティックス

QDeviceは一連のコマンド(heuristics)をサポートしています。コマンドは、クラスタサービスの起動、クラスタメンバーシップの変更、corosync-qnetdへの接続の成功時にローカルで実行されるか、オプションで定期的に実行されます。ヒューリスティックスは、quorum.device.heuristicsキー(corosync.confファイル内)または--qdevice-heuristics-modeオプションを使用して設定できます。両方がoff (デフォルト)、sync、およびonの値を認識しています。synconの違いは、先に示したコマンドを定期的に補足的に実行できるということです。

すべてのコマンドが正常に実行された場合にのみ、ヒューリスティックスは合格したとみなされ、そうでない場合は、失敗したとみなされます。ヒューリスティックスの結果は、corosync-qnetdに送信され、そこでクォーラムに達するパーティションを決定するための計算に使用されます。

Tiebreaker

これは同じヒューリスティックスの結果の場合でも、クラスタパーティションが完全に等しい場合のフォールバックとして使用されます。最小、最大、または特定のノードIDに設定できます。

12.2 要件と前提条件

QDeviceとQNetdを設定する前に、次のように環境を準備しておく必要があります。

  • クラスタノードのほかに、QNetdサーバになる別のマシンが必要です。12.3項 「QNetdサーバのセットアップ」を参照してください。

  • Corosyncが使用するものとは異なる物理ネットワーク。QDeviceがQNetdサーバに到達することをお勧めします。理想としては、QNetdサーバはメインクラスタとは別のラックに配置するか、少なくとも別のPSUに配置し、Corosyncリングと同じネットワークセグメントには配置しないでください。

12.3 QNetdサーバのセットアップ

QNetdサーバはクラスタスタックの一部ではなく、クラスタの実際のメンバーでもありません。そのため、このサーバにリソースを移動することはできません。

QNetdサーバはほとんどステートフリーです。通常、設定ファイル/etc/sysconfig/corosync-qnetd内を変更する必要はありません。デフォルトでは、corosync-qnetdサービスはグループcoroqnetd内のユーザcoroqnetdとしてデーモンを実行します。これにより、rootとしてデーモンを実行する必要がなくなります。

QNetdサーバを作成するには、次の手順に従います。

  1. QNetdサーバになるマシン上に、SUSE Linux Enterprise Server 15 SP4をインストールします。

  2. QNetdサーバにログインして、次のパッケージをインストールします。

    root # zypper install corosync-qnetd

    corosync-qnetdサービスを手動で開始する必要はありません。ブートストラップスクリプトは、qdeviceステージ中の起動プロセスを処理します。

QNetdサーバはQDeviceクライアントcorosync-qdeviceからの接続を受け入れる準備ができています。さらに設定する必要はありません。

12.4 QDeviceクライアントをQNetdサーバに接続する

QNetdサーバを設定した後で、クライアントを設定して実行することができます。クラスタのインストール中にQNetdサーバにクライアントを接続するか、後で追加することができます。次の手順では、後者の方法を使用します。2つのクラスタノード(aliceとbob)およびQNetdサーバ(charlie)を持つクラスタを想定しています。

  1. すべてのノードで、パッケージ corosync-qdevice:

    root # zypper install corosync-qdevice
  2. aliceで、クラスタを初期化します。

    root # crm cluster init -y
  3. bobで、クラスタに参加します。

    root # crm cluster join -c alice -y
  4. aliceとbobで、qdeviceステージをブートストラップします。ほとんどの場合、デフォルト設定で問題ありません。少なくとも--qnetd-hostnameとQNetdサーバのホスト名またはIP アドレス(この場合はCharlie)を指定します。

    root # crm cluster init qdevice --qnetd-hostname=charlie

    デフォルトの設定を変更する場合は、コマンドcrm cluster init qdevice --helpを使用してすべての可能なオプションのリストを取得します。QDeviceに関連するすべてのオプションは、--qdevice-NAMEで開始されます。

デフォルト設定を使用している場合、先に示したコマンドはTLSが有効で、FFSplitアルゴリズムを使用するQDeviceを作成します。

12.5 ヒューリスティックスを使用したQDeviceの設定

投票の決定方法をさらに制御する必要がある場合は、ヒューリスティックスを使用します。ヒューリスティックスは、並行して実行される一連のコマンドです。

この目的のため、コマンドcrm cluster init qdeviceはオプション--qdevice-heuristicsを提供します。絶対パスを使用して1つ以上のコマンド(セミコロンで区切る)を渡すことができます。

たとえば、ヒューリスティックチェック用の独自のコマンドが/usr/sbin/my-script.shにある場合は、次のようにクラスタノードのいずれかで実行できます。

root # crm cluster init qdevice --qdevice-hostname=charlie \
     --qdevice-heuristics=/usr/sbin/my-script.sh  \
     --qdevice-heuristics-mode=on

コマンドは、Shell、Python、またはRubyなどの任意の言語で記述することができます。成功した場合は、0 (ゼロ)を返し、失敗した場合はエラーコードを返します。

一連のコマンドを渡すこともできます。すべてのコマンドが正常に終了した場合のみ(戻りコードが0)、ヒューリスティックスが渡されます。

--qdevice-heuristics-mode=onオプションを使用すると、ヒューリスティックスコマンドを定期的に実行できます。

12.6 クォーラムステータスの確認と表示

例12.1「QDeviceのステータス」に示すように、クラスタノードのいずれかでクォーラムステータスを問い合わせることができます。QDeviceノードのステータスが表示されます。

例 12.1: QDeviceのステータス
root # corosync-quorumtool 1
 Quorum information
------------------
Date:             ...
Quorum provider:  corosync_votequorum
Nodes:            2 2
Node ID:          3232235777 3
Ring ID:          3232235777/8
Quorate:          Yes 4

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2
Flags:            Quorate Qdevice

Membership information
----------------------
    Nodeid      Votes    Qdevice Name
 3232235777         1    A,V,NMW 192.168.1.1 (local) 5
 3232235778         1    A,V,NMW 192.168.1.2 5
         0          1            Qdevice

1

同一の結果の代替として、crm corosync status quorumコマンドを使用することもできます。

2

予想されるノード数。この例では、2ノードクラスタです。

3

corosync.confで、ノードIDが明示的に指定されていないため、このIDはIPアドレスの32ビットの整数表現です。この例では、値3232235777はIPアドレス192.168.1.1を表しています。

4

クォーラムステータス。この場合、クラスタにはクォーラムがあります。

5

各クラスタノードのステータスは以下を意味します。

A (アクティブ)またはNA (非アクティブ)

QDeviceとCorosync間の接続ステータスを示します。QDeviceとCorosync間にハートビートがある場合は、アクティブ(A)として表示されます。

V (投票)またはNV (投票しない)

クォーラムデバイスがノードに投票(文字V)したかどうかを示します。文字Vは、両方のノードが互いに通信できることを意味します。スプリットブレイン状態では、一方のノードがVに設定され、他方のノードはNVに設定されます。

MW (マスターwins)またはNMW(master winsでない)

クォーラムデバイスmaster_winsフラグが設定されているかどうかを表示します。デフォルトでは、フラグが設定されていないため、NMW (master winsでない)が表示されます。詳細については、マニュアルページvotequorum_qdevice_master_wins(3)を参照してください。

NR (未登録)

クラスタがクォーラムデバイスを使用していないことを示します。

QNetdサーバのステータスを問い合わせると、例12.2「QNetdサーバのステータス」に示すのと同様の出力が得られます。

例 12.2: QNetdサーバのステータス
root # corosync-qnetd-tool -lv 1
Cluster "hacluster": 2
    Algorithm:          Fifty-Fifty split 3
    Tie-breaker:        Node with lowest node ID
    Node ID 3232235777: 4
        Client address:         ::ffff:192.168.1.1:54732
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   ACK (ACK)
    Node ID 3232235778:
        Client address:         ::ffff:192.168.1.2:43016
        HB interval:            8000ms
        Configured node list:   3232235777, 3232235778
        Ring ID:                aa10ab0.8
        Membership node list:   3232235777, 3232235778
        Heuristics:             Undefined (membership: Undefined, regular: Undefined)
        TLS active:             Yes (client certificate verified)
        Vote:                   No change (ACK)

1

同一結果の代替手段の1つとして、クラスタノードの1つで、crm corosync status qnetdコマンドを使用することもできます。

2

totem.cluster_nameセクションの設定ファイル/etc/corosync/corosync.confで設定されているクラスタの名前。

3

現在使用されているアルゴリズム。この例では、FFSplitです。

4

これは、IPアドレスが192.168.1.1のノードのエントリです。TLSがアクティブです。

12.7 詳細の参照先

QDeviceとQNetdに関する追加情報については、corosync-qdevice(8)とcorosync-qnetd(8)のマニュアルページを参照してください。