スプリット ブレイン クラスター
これは、クラスタの 1 つ以上のノードが他のノードから切断され、サブクラスタまたはスプリット ブレイン クラスタが形成された場合に発生します。
本質的に、スプリットブレインは、医学的なスプリットブレイン症候群との類似性に基づく用語です。 この状態は、スコープが重複しているXNUMXつの別個のデータセットの保守に起因する可能性のあるデータまたはその可用性の不整合を示しています。 これは、ネットワーク設計のサーバー、またはネットワーク内の対応するサーバー間のデータの誤通信や非同期化が原因で発生する可能性のある障害状態が原因である可能性があります。 これは、一般にネットワークパーティションとも呼ばれます。
Since NCache 複数のノードとクラスターで構成できる分散キャッシュでもあるため、スプリットブレイン クラスターが発生する可能性もあります。 NCache.
スプリットブレインが発生すると、サブクラスターが形成される可能性があります。したがって、すべてのクライアントが 1 つの正常なクラスターにリダイレクトされるようにするには、サブクラスターの 1 つを削除する必要があります。 サブクラスターの削除はデータが失われることを意味するため、削除するサブクラスターは次の基準に基づいて選択されます。
- サブクラスターのサイズが異なる場合は、ノード数が最も少ないサブクラスターが削除されます。これは、クラスターが小さいほど含まれるデータが少なくなるため、データ損失を最小限に抑えるためです。
- クラスターのサイズが同じ場合、コーディネーター ノードの IP アドレスが大きいサブクラスターが削除されます。たとえば、サブクラスタ A と B のコーディネータ ノードの IP は、それぞれ 20.200.20.38 と 20.200.20.40 です。この場合、コーディネーター ノード IP 20.200.20.40 のサブクラスターが削除されます。
スプリット ブレインは、範囲が重複する 2 つの別個のデータ セットのメンテナンスに起因するデータの不整合または可用性の問題を表す場合があります。また、これは重大な問題を引き起こす可能性があり、管理者にとって悲惨な状況を引き起こす可能性があります。このため、スプリット ブレインやデータ破損のリスクがないことを確認することが非常に重要です。
スプリット ブレイン発生後のネットワーク分割問題に対処するための一般的なアプローチがいくつかあります。
- 楽観的なアプローチ
- 悲観的なアプローチ
楽観的アプローチでは、分割されたノードを一時的に通常どおり動作させながら、ノード間の通信チャネルが単純に復元されます。これは、ノードが短時間で自動的に同期することを前提として行われます。スプリット ブレインの場合はデータ破損の脅威が常に存在するため、このアプローチは単なる簡単な方法である可能性があります。
一方、悲観的なアプローチでは、データの一貫性を保つためにシステムの可用性を放棄するか、単純に犠牲にする必要があります。ネットワークの分割が検出されると、サブパーティションへのアクセスが制限されます。これはデータの一貫性を確保するために行われます。この場合、履歴の相違を回避するために、1 つのコンポーネントのみがストレージへの読み取り/書き込みリクエストを継続できます。
スプリットブレイン クラスターの処理 NCache
スプリット ブレインが発生すると、どのノードをシャットダウンするか、再起動するか、再接続するか、ネットワークから削除するかなどの重要な決定を下す前に、ネットワーク内のクラスタ ノードは一連のチェックを受けます。 NCache には、スプリット ブレイン自動リカバリと呼ばれる機能が用意されていますが、この機能はデフォルトで無効になっています。ただし、ネットワーク内でスプリット ブレインが発生した場合に備えて、データの機密性とユーザーの要件に基づいて有効にすることができます。
NCache は、この機能をレプリカのパーティション トポロジに対してのみ提供します。これを詳しく理解するために、クラスターの接続、パーティションとレプリカのトポロジ、およびノード切断の背後にあるシナリオを見てみましょう。
クラスター接続
XNUMX つ以上のノードが接続して連携してクラスターを形成できます。 クラスターの各ノードはメンバーと呼ばれます。 のクラスター NCache メンバーがメッセージを送受信することで互いに会話できるグループ チャネルと考えることができます。クラスターは常にメッシュ トポロジで形成されます。これは、すべてのノードが相互接続されていることを意味します。
各クラスターは、1 つのコーディネーター ノードと残りの非コーディネーター ノードまたは参加者ノードで構成されます。コーディネーター ノードは最上位のノード、つまり最初に起動したノードであり、ノードの追加や削除など、ほとんどのタスクを担当します。ノードがクラスターに追加またはクラスターから削除されるたびに、コーディネーター ノードに通知され、クラスター内の接続可能な環境を維持するために残りの操作が管理されます。コーディネーター ノードが実行するその他のタスクには、バケットの配布、キャッシュ ローダーのトリガー、接続のメンテナンスなどがあります。
クラスターは次のように分類できます。
- 完全に接続されたクラスター
- 部分的に接続されたクラスター
- 停止したクラスター
完全に接続されたクラスター
クラスターに n 個のノードがあり、クラスター内の各ノードが他のすべてのノードと正常に n-1 個の接続を確立している場合、クラスターは完全に接続された状態と呼ばれます。この状態では、すべてのノードが相互に通信できるため、安定した状態になります。
次の図は、理想的な状態で完全に接続されたクラスターを示しています。
クラスターが完全に接続された状態にあり、ノードがクラスターに参加すると、対応するクラスターの一部/メンバーになります。 ノードがクラスターを離れるか、XNUMXつ以上のメンバーノードで部分的に切断されている場合、ノードは別個のクラスターを形成します。 既存のすべてのノードは、コーディネーターノードからネットワークのこの変更を通知されます。 これにより、新しいクラスター内のデータのバランスを取ることを目的とした状態転送がトリガーされます。 トポロジに基づいて、クライアント接続は新しいノードに分散されます。
クライアントの接続性
クラスターが正常な状態にある場合、PoR トポロジでは、すべてのクライアントがクラスターのすべてのノードに接続されます。パーティション レプリカ (PoR) に関連するスプリット ブレインの場合、クライアントはクラスターのすべてのノードに接続されます。ノードが参加すると、クライアントも新しいノードに接続します。ノードが離脱しても、クライアントは操作を続行できます。
停止
ノードがクラスターから適切に離脱した場合、つまり、ノードがシャットダウンされ、対応するノードのホスト プロセスが存在しない場合、そのノードは (クラスターの残りの部分に関して) 停止しているとみなされます。ノードを停止すると状態転送が行われ、データのバランスがとられます。これにより、残りのノード間のクライアント数のバランスがとれます。ただし、この機能は REP トポロジに固有です。
クライアントの接続性
以前に停止したノードに接続していたクライアントは、接続されている他のノードに接続するようになります。
部分的に接続されたクラスター
ネットワーク障害などにより、クラスターの 1 つ以上のノードが他のノードに接続できない状況が発生する場合があります。
3 ノードの完全に接続されたクラスターがあると仮定します。 1 つのノードのうち 2 つがまだ相互に通信できるような障害が発生した場合。ただし、XNUMX 番目のノードがネットワークに到達できない場合、接続された XNUMX つのノードは単一のサブクラスタ (たとえば、サブクラスタ XNUMX) を形成します。XNUMX 番目の切断されたノードは、独立したサブクラスタ (たとえば、サブクラスタ XNUMX) を形成します。 -cluster にはコーディネーター ノードが追加されます。この状況では、クラスターは理想的な接続状態を失います。現在、XNUMX つのクラスターが存在しており、相互に通信することはできませんが、サブクラスター内では完全に接続されています。次の図に示すように、この状態はクラスターの部分接続と呼ばれます。
前述のシナリオでは、サブクラスター 1 とサブクラスター 2 のノードは、サブクラスター 1 がそれ自体と完全に接続され、サブクラスター 2 からは完全に切断され、その逆も同様です。
より複雑なケースでは、5 ノードのクラスターで、ネットワーク障害によりノード 5 がノード 3 を除くすべてのノードとの接続を切断したとします。この場合、ノード 3 はまだノード 5 に接続されており、ノード 3 はまだ接続されています。ノード 1、ノード 2、およびノード 4 にも接続されます。現在、ノード 3 はサブクラスター 1 (ノード 1、ノード 4、およびノード 2) とサブクラスター 2 (ノード 5) の共通メンバーです。
次の図は、進行中の部分的な接続を示しています。
各クラスターはノード 3 に通知し、3 つのクラスターのみへの接続を維持するように要求します。 通知を受信すると、ノード 2 は通知の受信元を評価し、メイン クラスターの切断が発生する前に、最も上位のノードを含むサブクラスター (このシナリオではサブクラスター XNUMX) に接続します。
次の図は、最終状態のクラスターの部分的な接続を示しています。
接続の再試行
すべてのクラスター操作にはタイムアウト値があり、デフォルトでは 60 秒であり、 NCache 管理センター。 すべてのクラスターには、接続の再試行 (デフォルト値 2) と再試行間隔 (デフォルト値 2) があります。 これらの値は両方とも、 NCache 管理センター。
クラスターからのノード接続が切断されると、優先コーディネーター ノードが最初に接続の再確立を試みます。再試行の結果、接続が成功し、タイムアウトが発生しなかった場合、クラスターは通常の完全に接続された状態になります。ただし、何らかの理由で接続を再確立できない場合、クラスターのすべてのノードが複数のサブクラスターを形成し、接続が部分的に行われます。
新しいノードの参加
クラスターが部分的に接続された状態にある場合、新しいノードの追加は、ネットワーク内で適切な接続を保持しているサブクラスターの部分に対して行われます。両方のサブクラスターに接続されている場合は、より大きなサイズのサブクラスター、つまりより多くのノードを持つサブクラスターに参加します。ノードの数が等しい場合、IP をコーディネーター ノードと比較し、より大きい IP を持つコーディネーターに参加します。
クライアントの接続性
部分的な接続の場合、クラスターは不安定な環境にあるため、クライアント アプリケーションは突然不確実な動作を引き起こす可能性があります。クライアント マシンが両方のサブクラスタに接続されている場合、一部のクライアントはサブクラスタ 1 に接続し、他のクライアントはサブクラスタ 2 に接続する可能性があります。すべてのクライアントが XNUMX つのサブクラスタに接続するようなネットワーク接続になっている可能性があります。クラスターのみ。クラスター内のデータの一貫性も失われます。
部分的な接続の問題の修正
スプリットブレインの問題を解決するには、 NCache 以下で説明するように、手動回復オプションと自動回復オプションの両方が提供されます。
手動解決
クラスターが部分的に接続された状態になった場合は、クラスターを再起動する必要があります。最初の推奨事項は、この状態の原因となった問題を特定して解決することです。ネットワークの問題が原因である場合は、ネットワークの安定化を試みます。問題を修正した後、単一クラスターを作成しているノードをシャットダウンし、それらを 1 つずつ起動します。
たとえば、図 3 のクラスターを考えてみましょう。ノード 1、ノード 2、およびノード 4 はサブクラスター 1 で完全に接続されているのに対し、ノード 3 とノード 5 はサブクラスター 2 で完全に接続されていることがわかります。問題によりサブクラスター 2 が作成されたため、ノード 3 とノード 5 をシャットダウンする必要があります。ネットワーク障害の原因となっている問題を解決してください。完了したら、各ノードを 1 つずつ起動します。開始されたノードは sub-clusterXNUMX の一部となり、完全に接続されたクラスターになります。
スプリットブレイン自動回復
スプリットブレインに対応するために、 NCache また、自動方法も提供します。これは、 NCache 管理センター。 データにはさまざまなタイプがあり、異なる機密レベルを保持できるため、デフォルトではこのオプションは無効になっています。 それは完全に管理者に依存します NCache Management Center が状況に応じて必要と判断し、有効にするかどうかを判断します。 クラスターのスプリットブレイン自動リカバリを有効にするには、次を参照してください。 を使用してスプリットブレイン自動回復を有効にする NCache 管理センター.