クォーラムがシステム動作に与える影響を理解する

SplitSite システム内のクォーラム サーバによって、システムの可用性と復旧動作が変更されます。クォーラムがシステム動作に与える影響を理解するには、その前にクォーラム サーバをもたないシステムの動作を理解しておく必要があります。

前提条件: SplitSite 構成を計画して作成するには、(まだ行っていない場合は) まず 「SplitSite 構成を作成する」を読み、その手順に従います。

everRun システムは、1 台以上のゲスト VM に高可用性を提供するよう設計されています。そのため、通常ならアプリケーションのダウンタイムを引き起こすような障害が発生した場合であっても、VM を継続して実行できるようになります。everRun システムは、たとえば 1 つのネットワーク接続やハードディスク、あるいはコンピュータ全体が失われた場合でも、ゲスト VM を引き続き実行することができます。

ただし、さらに致命的な障害が発生した場合 (たとえば可能なネットワーク パスすべての故障など)、everRun システムはシステム全体の総合状態を判断しようとします。その後、システムはゲスト VM の整合性を保護するために必要なアクションを実行します。

次の例は、致命的な障害発生時のシステムのプロセスを示すものです。

例 1: クォーラム サーバなしのシステムではスプリット ブレーン状態が発生する

SplitSite の例では、everRun システムに node0 と node1 が含まれますが、クォーラム サーバは含まれません。動作は正常で、現在検知されている障害はありません。2 つのノードは正常な (障害のない) 動作のときと同様に、A-Link 接続を介してその状態と可用性をやり取りします。次の図は正常な接続を示すものです。

致命的な障害

フォークリフトを運転する作業員が不注意から壁に衝突し、すべてのネットワーク接続 (ビジネスリンクと A-Link の両方) を切断してしまいました。ただし電源は残っており、システムも実行を継続しています。次の図は障害のある状態を示すものです。

障害処理

2 つのノードは次のように障害を処理します。

アプリケーション クライアントまたは外部オブザーバの観点からは、ゲスト VM の両方がアクティブであり、同じ返信アドレスでネットワーク メッセージを生成しています。両方のゲスト VM がデータを生成し、それぞれ異なる量の通信エラーを検知します。ゲスト VM の状態は、時間が経つにつれて相違が大きくなります。

復旧と修復

しばらくしてネットワーク接続が復元され、壁の修理が済みネットワーク ケーブルの配線もやり直しました。

AX ペアの各 AX は、それぞれのパートナーがオンラインに戻ったことを認識し、障害処理規則のある AX ペアが、アクティブな状態を続ける AX を選択します。この選択は予測が不可能であり、スプリット ブレーン状態の間にどちらのノードのパフォーマンスがより正確であったかを一切考慮に入れません。

(その時点での) スタンバイ ノードから生成されたデータはアクティブ ノードの再同期によって上書きされるため、(その時点での) スタンバイ ノードにあるデータは永久に失われます。

スプリット ブレーン状態の後、システムが再同期を完了するまで数分間かかります。この所要時間はスタンバイ ノードに送信が必要なディスク アクティビティの量によって決まります。異なるアクティブ ノードをもつゲスト VM がいくつか実行されている場合、両方向の同期トラフィックが生じることがあります。

: 状況によっては、everRun システムが致命的な障害の後に取るべき最善の処理を判定できないこともあります。その場合、システムを手動で復旧する必要があります。復旧方法としては、片方のノードを実行し続けながら、everRun 可用性コンソールを使ってもう一方のノードをシャットダウンし、リブートすることを推奨します。この方法では実行中のノードを強制的にプライマリとし、そのノード上の AX がアクティブになります。実行中のノードがプライマリになった後、もう一方のノードの電源を手動でオンにすることができます。 既に再同期が進行中の場合には、どちらのノードもシャットダウンしないでください。

例 2: クォーラム サーバのある SplitSite システムではスプリット ブレーン状態を回避できる

この SplitSite の例では、everRun システムに例 1 のシステムとまったく同じ接続をもつ node0 と node1 が含まれています。これに加えて、例 2 のシステムにはクォーラム サーバが含まれます。次の図はこれらの接続を示すものです。

致命的な障害

例の不注意な作業員が再びフォークリフトで壁に衝突し、ネットワーク接続をすべて切断してしまいました。ただし電源は残っており、システムも実行を継続しています。次の図は障害のある状態を示すものです。

障害処理

2 つのノードは次のように障害を処理します。

: node1 AX は以前アクティブではなく ゲスト VM が HA VM であるため、場合によっては node1 のゲスト VM が node1 のハード ドライブからブートする必要があります。その場合、ゲスト VM のブート中、アプリケーションのダウンタイムが一時発生します。(FT VM は実行を継続します。)

アプリケーション クライアントまたは外部オブザーバの観点からは、node1 のゲスト VM はアクティブなままになり、node0 の VM がシャットダウンしている間もデータを生成します。スプリット ブレーン状態は存在しません。

復旧と修復

しばらくしてネットワーク接続が復元され、壁の修理が済みネットワーク ケーブルの配線もやり直しました。

node1 AX でそのパートナーがオンラインに戻ったことが認識されると、node0 AX がスタンバイになります。node0 は以前実行中ではなかったので、node1 から node0 へのデータ同期が開始されます。

スプリット ブレーン状態は発生していないので、データ損失はありません。

システムが再同期を行うには数分間かかります。この所要時間はスタンバイ ノードに送信が必要なディスク アクティビティの量によって決まります。

例 2 (応用編): 致命的な障害時にクォーラム サーバがアクセス不可の場合

クォーラム サーバのある SplitSite システムでは、電源は残っていてシステムが実行を継続している状態であっても、致命的な障害によりすべてのネットワーク接続が切断されてクォーラム サーバがオフラインまたはアクセス不可になる可能性があります。次の図は、このようなシステムでクォーラム サーバがオフラインになった状態を示すものです。

障害処理は例 2 の場合と似ていますが、node1 に重要な違いが 1 つあります。

node1 AX も、両方の A-Link が失われたことを検知しますが、ibiz0 は引き続き利用可能です。node1 AX がクォーラム サーバへの通信を試行しますが、通信が失敗します。AX がゲスト VM を終了します。

この場合、ゲスト VM が node0 と node1 の両方でシャットダウンされ、スプリット ブレーンの発生は回避されます。トレードオフは、node0 とクォーラム サーバのどちらかへの接続が復元されるまでゲスト VM が利用不可になる点です。

その場合、運用しない方のノードを特定し、その電源を切ります。次に、運用する方のノードを強制ブートしてら、VM を強制ブートします。VM をシャットダウンしてから起動する方法については、「仮想マシンの運用を管理する」を参照してください。)

例 2 (応用編): 致命的な障害のない時にクォーラム サーバがアクセス不可の場合

場合によっては、致命的な物理的障害がなくてもクォーラム サーバがアクセス不可になる可能性があります。これはたとえば、OS パッチの適用などの定期的なメンテナンスのためにクォーラム コンピュータがリブートされる場合などです。こうした状況では、クォーラム サービスが応答していないことが AX で検知されるため、AX はクォーラム サーバへの接続が復元されるまで同期のトラフィックを中断します。ゲスト VM は、接続が失われた時点でアクティブだったノード上で実行を継続します。ただし、追加の障害が発生する可能性があるため、ゲスト VM はスタンバイ ノードに移行しません。クォーラム サービスが復元された後、クォーラム サーバへの接続が維持されていれば、AX は同期と通常の障害処理を再開します。

停電から復旧する

停電やシステム シャットダウンの後にシステムを再起動する場合、everRun システムはゲスト VM の起動を行う前に、まずそのパートナーがブートして応答するまで待機します。以前アクティブだった AX がクォーラム サーバにアクセスできる場合には、AX がパートナー ノードのブートを待たずにゲスト VM を直ちに起動します。以前スタンバイだった AX が最初にブートした場合、この AX はパートナー ノードを待機します。

システムがパートナー ノードまたはクォーラム サーバのいずれかから応答を受け取ると、正常な運用が再開されて VM が起動します。その際、その他のケースと同じ障害処理規則が適用されます。

システムがクォーラム サーバからの応答を受け取らない場合や、システムにクォーラム サーバがない場合、ユーザが手作業でゲスト VM を強制的にブートする必要があります。これは AX または障害処理機能によって下されたすべての判断を上書きします。node0 と node1 でそれぞれ異なるユーザが同じゲスト VM をブートすることは避けてください。そうすると、誤ってスプリット ブレーン状態を引き起こす結果となります。