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

14 QDeviceおよびQNetd

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

14.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つに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の違いは、onでは定期的に上記のコマンドを追加で実行できる点です。

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

Tiebreaker

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

14.2 要件と前提条件

QDeviceおよびQNetdを設定する前に、次のように環境を整える必要があります。

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

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

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

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

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

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

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

  2. SUSEConnect --list-extensionsに一覧表示されているコマンドを使用して、SUSE Linux Enterprise High Availabilityを有効にします。

  3. corosync-qnetdパッケージをインストールします。

    # zypper install corosync-qnetd

    corosync-qnetdサービスを手動で開始する必要はありません。クラスタでQDeviceを設定すると、自動的に開始されます。

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

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

QNetdサーバを設定した後、クライアントを設定して実行できます。クラスタのインストール中にQNetdサーバにクライアントを接続するか、後で追加することができます。この手順では、後で追加する方法を示します。

  1. すべてのノードにcorosync-qdeviceパッケージをインストールします。

    # zypper install corosync-qdevice
  2. いずれかのノードで、次のコマンドを実行してQDeviceを設定します。

    # crm cluster init qdevice
    Do you want to configure QDevice (y/n)? y
    HOST or IP of the QNetd server to be used []QNETD_SERVER
    TCP PORT of QNetd server [5403]
    QNetd decision ALGORITHM (ffsplit/lms) [ffsplit]
    QNetd TIE_BREAKER (lowest/highest/valid node id) [lowest]
    Whether using TLS on QDevice/QNetd (on/off/required) [on]
    Heuristics COMMAND to run with absolute path; For multiple commands, use ";" to separate []

    QDeviceを設定することをyで確定し、QNetdサーバのホスト名またはIPアドレスを入力します。残りのフィールドについては、デフォルト値を受け入れるか、必要に応じて変更できます。

    重要
    重要: ディスクレスSBDおよびQDeviceのSBD_WATCHDOG_TIMEOUT

    ディスクレスSBDを含むQDeviceを使用する場合、SBD_WATCHDOG_TIMEOUT値はQDeviceのsync_timeout値より大きくする必要があります。そうしないと、SBDがタイムアウトになり、開始できません。

    sync_timeoutのデフォルト値は30秒です。したがって、/etc/sysconfig/sbdファイルでは、SBD_WATCHDOG_TIMEOUTが、より大きい値(35など)に設定されていることを確認してください。

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

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

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

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

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

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

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

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

14.6 クォーラム状態の確認と表示

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

例 14.1: QDeviceのステータス
# corosync-quorumtool1
 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サーバのステータスを問い合わせると、例14.2「QNetdサーバのステータス」に示すのと同様の出力が得られます。

例 14.2: QNetdサーバのステータス
# corosync-qnetd-tool -lv1
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がアクティブです。

14.7 詳細の参照先

QDeviceおよびQNetdの詳細については、corosync-qdevice(8)およびcorosync-qnetd(8)のマニュアルページを参照してください。