This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved. |
1. はじめに
1.1. クラスタ、ノード、およびクラスタサービス
データベースやE コマースのweb サイトなど、重要かつミッションクリティカルなサービスをデプロイする場合、そのサービスを実行しているホストが、長期間、安定して、問題なく稼働し続けることを期待することはまずありません。 むしろ、1 台のホストが故障する可能性を考慮し、故障(またはフェイルオーバー)が発生した場合に、他のホストがすぐにサービスを引継ぎ、 外部にその故障がまったく気付かれないようにする必要があります。
同じタスクを実行するために連携して動作するネットワークに接続されたホストのグループは、コンピュータネットワーク、コンピュータクラスタ、またはより簡単にクラスタと呼ばれます。 クラスタは、外部からは単一のシステムとして動作および表示され、内部ではホストを組織して連携して共通のタスクを実行します。
クラスタはさまざまなタスクを実行できます。たとえば、HPC クラスタは、高性能コンピューティングを実行できます。 これは、1 台のコンピュータでは利用可能なメモリでは不十分な計算を行う場合などに使用されます。 クラスタに高可用性を提供するというタスクがある場合、そのクラスタは HA クラスタとも呼ばれます。 この記事では、HA クラスタについて取り上げます。したがって、以下で「クラスタ」という用語を使用する場合は、常にHA クラスタを意味します。
クラスタは、外部に対して 1 つ以上のサービス、つまりクラスタサービス(クラスタ化されたサービスとも呼ばれる)を提供します。 クラスタを構成するホストは、ノードと呼ばれます。 各サービスは、いつでも 1 つのノードによってのみ提供されます。 クラスタ内のいずれかのノードに障害が発生した場合、クラスタのミッションに不可欠なすべてのサービスは、他のノードの 1 つに移されます。
フェイルオーバーを透過的に行うために、一部のクラスタは独自のクラスタ IP アドレス(仮想 IP アドレスとも呼ばれる)を提供しています。 クラスタ IP アドレスは、常にアクティブなノードを指し、クラスタ全体を表します。 フェイルオーバーが発生すると、IP アドレスは、以前はパッシブだった別のノードに転送され、そのノードがアクティブなノードになります。 クラスタと通信するクライアントは、内部フェイルオーバーを認識しません。 クライアントは、変更されていない同じ IP アドレスを使用し、スイッチングを行う必要はありません。
他のクラスタには、クラスタ IP アドレスはありません。 多くのバリエーションがある Oracle データベースクラスタは、その顕著な例です。 クラスタ IP アドレスがない場合、クライアントは、サービスを提供できるすべてのノードの IP アドレスのリストを維持する必要があります。 アクティブノードに障害が発生した場合、クライアントはこれを検出し、現在サービスを提供しているノードにスイッチする必要があります。
1.2. クラスタの監視
Checkmk は、クラスタと通信するクライアントの 1 つです。 Checkmk では、クラスタ内のすべてのノードを設定して監視することができます。クラスタソフトウェアが、個々のノードのステータスを内部でどのようにチェックし、必要に応じてフェイルオーバーを実行するかは関係ありません。
Checkmk がクラスタの個々のノードに対して実行するチェックのほとんどは、ノードの物理的特性に関するものです。 これは、ホストがクラスタに属しているかどうかとは無関係です。 例としては、CPU およびメモリの使用状況、ローカルディスク、物理ネットワークインターフェイスなどが挙げられます。 ただし、Checkmk でノードのクラスタ機能をマッピングするには、クラスタのタスクを定義するサービス、つまり別のノードへの転送が必要になる可能性のあるサービス(クラスタサービス)を特定する必要があります。
Checkmk は、クラスタサービスの監視を支援します。必要な操作は次のとおりです。
クラスタを作成します。
クラスタサービスを選択します。
関連するすべてのホストに対してサービスディスカバリーを実行します。
手順は次の章で、以下のサンプル構成を使用して説明します:

Checkmk では、Windows フェイルオーバークラスタを、Microsoft SQL (MS SQL) サーバーがインストールされた 2 つのノードで構成される HA クラスタとして設定します。 これは、いわゆるアクティブ/パッシブクラスタであり、アクティブノードのみデータベースインスタンスを実行します。 もう一方のノードはパッシブであり、フェイルオーバーイベントが発生した場合にのみアクティブになり、データベースインスタンスを起動して、障害が発生したノードを置き換えます。 データベースインスタンスのデータは、ノード自体には保存されず、 たとえば、両方のノードが接続されているストレージエリアネットワーク (SAN) などの共有ストレージメディアに保存されます。 サンプル構成は、以下のコンポーネントで構成されています。
mssql-node01は、アクティブなデータベースインスタンスを実行するアクティブノードです。mssql-node02はパッシブノードです。mssql-cluster01は、両方のノードが属するクラスタです。
この例とは対照的に、同じノードを複数のクラスタに含めることも可能です。 最後の章では、変更したサンプル構成を使用して、このような重複するクラスタを構成する方法について説明します。
2. クラスタおよびクラスタサービスの設定
2.1. クラスタの作成
Checkmk では、ノードおよびクラスタ自体はホスト(ノードホストおよびクラスタホスト)として作成され、クラスタホストには特別なホストタイプが定義されます。
クラスタホストを設定する前に、以下の点に注意してください。
クラスタホストは、クラスタ IP アドレスが存在する場合に、その IP アドレスで設定される仮想ホストです。 この例では、クラスタホスト名は DNS 経由で解決可能であると仮定しています。
参加しているすべてのホスト(これは常にクラスタホストとその関連ノードホストを意味します)について、データソースは同一に設定する必要があります。 つまり、特に、一部は Checkmk エージェントで設定し、その他は SNMP で設定することはできません。 SNMP Checkmk は、この要件が満たされている場合にのみクラスタホストを作成できるようにしています。
分散監視では、参加しているすべてのホストを同じ Checkmk サイトに割り当てる必要があります。
すべてのチェックがクラスタ構成で機能するわけではありません。 クラスタサポートが実装されているチェックについては、プラグインのマニュアルページで確認できます。 マニュアルページには、メニュー「Setup > Services > Catalog of check plug-ins 」からアクセスできます。
この例では、2 つのノードホストmssql-node01 およびmssql-node02 がすでに作成され、ホストとして設定されています。
ここまでを行う方法については、Windows サーバーの監視に関する記事、およびWindows 標準エージェントをプラグインで拡張する章(この例ではMS SQL Server プラグイン)をご覧ください。
メニュー「Setup > Hosts > Hosts 」からクラスタの作成を開始し、次にメニュー「Hosts > Add cluster 」からクラスタの作成を開始します。

Host name に「mssql-cluster01 」を入力し、Nodes に 2 つのノードホストを入力します。
クラスタ IP アドレスのないクラスタを扱う場合は、少し面倒ですが、IP address family のNetwork address ボックスでNo IP を選択してください。 ただし、監視でホストが「DOWN 」にならないようにするには、同じ名前のルールで、デフォルトの「ホストチェックコマンド」を、Smart PING またはPING から、たとえば、クラスタホストに割り当てるサービスの状態に変更する必要があります。 ホストルールセットの詳細については、ルールに関する記事をご覧ください。 |
Save & view folder で作成を完了し、変更をアクティブにしてください。
2.2. クラスタサービスの選択
Checkmk は、ノード上で実行されているサービスのうち、どれがローカルサービスでどれがクラスタサービスであるかを判別できません。ファイルシステムの中には、ローカルであるものもあれば、アクティブノードにのみマウントされているものもあります。 プロセスについても同様です。たとえば、「Windows Timer」サービスは、おそらくすべてのノードで実行されていますが、特定のデータベースインスタンスはアクティブノードでのみ利用可能です。
Checkmk に推測させる代わりに、ルールを使用してクラスタサービスを選択します。
ルールを設定しないと、クラスタにはサービスが割り当てられません。
この例では、すべての MS SQL Server クラスタサービスの名前がMSSQL で始まり、共有ストレージデバイスのファイルシステムにD: ドライブからアクセスできると仮定します。
Setup > Hosts > Hosts から開始し、クラスタ名をクリックします。Properties of host ページで、メニューからHost > Clustered services を選択します。Clustered services ルールセットページが表示され、新しいルールを作成できます。Add rule: Clustered services ページが表示されます。

ホストがフォルダに整理されているかどうか、またその整理方法に関係なく、 クラスタサービスに関するルールは、サービスが実行されているノードホストに適用されるように作成してください。 このようなルールは、クラスタホストには効果はありません。
「Conditions 」ボックスの「Folder 」で、ノードホストを含むフォルダを選択します。
「Explicit hosts 」を有効にし、アクティブノードホストの「mssql-node01 」とパッシブノードホストの「mssql-node02 」を入力します。
次に、「Services 」を有効にし、そこに 2 つのエントリを作成します。
「MSSQL 」で始まるすべての MS SQL サービスには「MSSQL 」、ドライブには「Filesystem D: 」を入力します。
エントリは正規表現として解釈されます。
クラスタサービスとして定義されていないすべてのサービスは、Checkmk によってローカルサービスとして扱われます。
Save でルールの作成を終了し、変更をアクティブにしてください。
2.3. サービスディスカバリーを実行する
参加しているすべてのホスト (クラスタおよびノードホスト) について、最後に新しいサービスディスカバリーを実行して 、新しく定義したクラスタサービスをまずノードから削除してから、クラスタに追加する必要があります。
Setup > Hosts > Hosts で、まず、関連するすべてのホストを選択し、次にメニューからHosts > On Selected hosts > Run bulk service discovery を選択します。Bulk discovery ページで、最初のオプションAdd unmonitored services and new host labels を選択すると、目的の結果が得られます。
[Start ] をクリックして、複数のホストのサービスディスカバリーを開始します。Bulk discovery successful メッセージが表示されて正常に完了したら、終了して変更をアクティブにします。
クラスタサービスの選択が望ましい結果になったかどうかを確認するには、クラスタに現在割り当てられているすべてのサービスをリストします。Setup > Hosts > Hosts で、クラスタホストエントリのホストリストで、アイコンをクリックしてサービスを編集します。 次のページServices of host で、すべてのクラスタサービスがMonitored services の下にリストされます。

一方、ノードホストでは、クラスタに移動されたサービスは、監視対象サービスのリストから削除されます。 ノードホストでは、Monitored clustered services (located on cluster host) セクションのサービスリストの最後に、これらのサービスが表示されます。

Clustered services ルールが適用されているクラスタでローカルチェックを実行する場合、Local checks in Checkmk clusters ルールセットを使用して、Worst state とBest state のいずれかを選択することで、結果に影響を与えることができます。 |
2.4. 自動サービスディスカバリー
ディスカバリーチェックによってサービスディスカバリーを自動的に実行する場合は、特別な点に注意する必要があります。Discovery Check は、消滅したサービスを自動的に削除することができます。 しかし、クラスタ化されたサービスが 1 つのノードから別のノードに移動した場合、そのサービスは消滅したと誤って認識され、削除される可能性があります。 一方、このオプションを省略すると、実際に消滅したサービスは削除されません。
3. クラスタの重複
複数のクラスタが 1 つ以上のノードを共有することができます。 このようなクラスタは、重複クラスタと呼ばれます。 重複クラスタの場合、共有ノードホストのクラスタサービスをどのクラスタに割り当てるかを Checkmk に指示するための特別なルールが必要です。
以下では、MS SQL Server クラスタの例をアクティブ/パッシブからアクティブ/アクティブクラスタに変更して、重複クラスタを設定する基本的な手順を説明します。 この構成では、MS SQL Server は両方のノードホストにインストールされていますが、2 つのノードで別々のデータベースインスタンスが実行されています。

この構成では、MS SQL Server が両方のノードホストにインストールされているだけでなく、2 つのノードそれぞれで個別のデータベースインスタンスが実行されています。 両方のノードは共有ストレージメディアにアクセスしますが、異なるドライブからアクセスします。 この例では、2 つのノードが両方のクラスタに属しているため、100% 重複するクラスタが実装されています。
アクティブ/アクティブクラスタの利点は、2 つのノードの利用可能なリソースがより有効に活用できることです。 フェイルオーバーが発生した場合、障害が発生したノードのタスクは代替ノードに引き継がれ、代替ノードが両方のデータベースインスタンスを実行します。
このサンプル構成は、以下のコンポーネントで構成されています:
mssql-node01は、データベースインスタンス を現在実行している最初のアクティブノードです。MSSQL Instance1mssql-node02は、データベースインスタンス を現在実行している 2 番目のアクティブノードです。MSSQL Instance2mssql-cluster01および は、両方のノードが属する 2 つのクラスタです。mssql-cluster02
アクティブ/パッシブクラスタを設定する場合、アクティブ/アクティブクラスタの設定では、最初のステップを少し変更するだけです。
上記の手順に従って、最初のクラスタmssql-cluster01 を作成します。
次に、同じ 2 つのノードホストを使用して、2 番目のクラスタmssql-cluster02 を作成します。
2 番目のステップでは、クラスタサービスを選択するために、一般的なClustered services ルールセットではなく、重複するクラスタ用に特別に作成されたClustered services for overlapping clusters ルールセットを使用します。 これにより、ノードホストから削除され、選択したクラスタに追加されるクラスタサービスをルールで定義することができます。
100% 重複するこの例では、次の 2 つのルールが必要です。 最初のルールは、デフォルトで最初のノードホストで実行される、最初のデータベースインスタンスのクラスタサービスを定義します。 フェイルオーバーが発生すると、これらのクラスタサービスは 2 番目のノードホストに転送されるため、両方のノードホストにサービスを割り当てます。 2 番目のルールは、2 番目のクラスタおよび 2 番目のデータベースインスタンスについても同様に実行します。
最初のルールから始めましょう。
[Setup > General > Rule search ] で、ルールセット「Clustered services for overlapping clusters 」を見つけてクリックします。
新しいルールを作成します。
[Assign services to the following cluster ] で、クラスタ「mssql-cluster01 」を入力します。

「Conditions 」ボックスの「Folder 」で、ノードホストを含むフォルダを再度選択します。
「Explicit hosts 」を有効にし、両方のノードホストを入力します。
次に、「Services 」を有効にし、そこに 2 つのエントリを作成します。MSSQL Instance1 は、最初のデータベースインスタンスのすべての MS SQL サービス用です。Filesystem D: は、ドライブ用です。

Save で、最初のルールの作成を終了します。
次に、2 つ目のルールを作成します。今回は、2 つ目のクラスタmssql-cluster02 、および再び両方のノードホストに対して作成します。Services で、2 つ目のデータベースインスタンスのすべての MS SQL サービスに対してMSSQL Instance2 を入力します。
2 つ目のデータベースインスタンスがデフォルトで実行されている 2 つ目のノードホストは、別のドライブ(この例ではE: ドライブ)からストレージメディアにアクセスします。

このルールも保存し、2 つの変更をアクティブにします。
最後に、3 番目の最後のステップとして、上記と同じ方法でサービスディスカバリーを実行します。これは、関連するすべてのホスト、つまり 2 つのクラスタホストと 2 つのノードホストに対して、Bulk discovery として実行します。
複数のルールでクラスタサービスが定義されている場合、特定のクラスタに明示的に割り当てられたより具体的なルールClustered services for overlapping clusters が、より一般的なルールClustered services より優先されます。 この記事で紹介した 2 つの例の場合、これは、最初に作成した 2 つの具体的なルールが、最初の例で作成した一般的なルールの適用を一切許可しないことを意味します。 |
