高速で信頼性の高いアプリケーション処理のこの時代では、誰もがアプリケーションから最高のパフォーマンスを引き出すために分散キャッシングを選択しています。 あなたのウェブアプリケーションが非常に高いトランザクションを引き起こす高いトラフィックを引き付けるなら、あなたは間違いなく必要です NCache.
NCache は、メモリ内の分散キャッシングソリューションです。 線形スケーラビリティ .NETおよびJavaアプリケーションに。 様々な中で トポロジ それ NCache あなたに提供します、最も人気があるのは パーティション化されたレプリカ トポロジー。 パーティション化されたレプリカトポロジは、両方の長所、線形スケーラビリティ、および高可用性を提供します。
Partitioned-Replicaクラスターでは、データはすべてのノードでパーティション化および複製されます。 したがって、サーバーノードがダウンした場合、そのクライアントは対応するレプリカと対話することで操作を続行できます。 ノードがダウンするとすぐに、状態転送プロセスがトリガーされ、孤立したデータの自動リバランスが行われます。 ここで、Partitioned-Replicaクラスターがあり、メンテナンスのためにノードのXNUMXつを停止する必要があると仮定しますが、そのノードをすぐに再起動することを知っていますか? この振る舞いが何であるか、そしてそれがあなたにとってどのように挑戦になる可能性があるかを見てみましょう。
NCache 詳細 パーティション化されたレプリカ NCache ドキュメント メンテナンスモード NCache ドキュメント
メンテナンス中の自動リバランスの課題
Partitioned-Replicaクラスターでノードが停止するたび。 状態転送がトリガーされ、クラスター全体でデータのバランスが再調整されます。 このプロセスには予想よりも時間がかかる可能性があり、特にノードが数十ギガバイトのデータを保持している場合は、アプリケーションのパフォーマンスに影響します。
次の図は、ノードが停止したときのPartitioned-Replicaクラスターの動作を説明しています。
この図では、 NCache パーティション化-XNUMXノードのレプリカクラスター。 ここでは、ノードがクラスター内で停止したときに何が起こるかを説明するために、XNUMXつの段階が導入されています。
- ステージ1: NCacheのパーティション化されたレプリカ A、B、CのXNUMXつのノードがあり、それぞれにアクティブノードとレプリカノードがあります。
- ステージ2:ノードCはメンテナンスのために一時的に停止されます。 そのアクティブとレプリカはクラスターの一部ではなくなり、状態転送がトリガーされます。
- ステージ3:データ redisクラスター内の貢献(完全に不要)。 ここで、ノードCの孤立したデータは、状態転送が停止した後、残りのノードAとBに分割されます。 この部門によると、それらのレプリカノードも更新されます。 停止したノードはまもなく再起動するため、この状態転送はまったく不要です。
- ステージ4:ノードCが再起動します。 この段階では、クラスターはノードCがクラスターを離れたかのように動作します。 データの後 redisトリビューション、ノードCが再開されます。
- ステージ5:ノードCがクラスターに再参加し、データを再度実行します redis寄付。 そのデータはすでにAとBの間で分散されているため、Cが再結合すると、状態転送がクラスター全体で再度トリガーされ、新しいデータがノードに割り当てられます。
理想的には、これは完璧な解決策のようです。 ノードを停止すると、状態転送が発生します。 修正したいものを修正して、そのノードを再起動します。 状態転送が再度トリガーされ、すべてのバケットのバランスが取られます。
しかし、なぜこれが理想的な解決策ではないのでしょうか。 ここで何が問題になりますか?
状態転送を不必要に促すことにはいくつかの欠点があります。 彼らです:
- 複数のネットワーク呼び出しと処理オーバーヘッドのために高コスト。
- ノードが大量のデータを保持している場合、時間計算量が高くなります。
- 状態転送中にノードが再起動し、状態転送内で状態転送が発生した場合の誤った動作。
NCache 詳細 パーティション化されたレプリカ NCache ドキュメント メンテナンスモード-NCache ドキュメント
解決策:メンテナンスモード対応のパーティション化-レプリカ
ノードがクラスターを離れてクラスターに参加するたびに発生する不要な状態転送のこれらすべての後退を考慮に入れて、 NCache を提供します メンテナンスモード.
メンテナンスモードでは、ノードを特定の期間停止し、メンテナンスが終了したときにノードを開始できます。 このモードでは、ノードがメンテナンスを行っている間、クラスター内で状態転送スレッドがトリガーされないようにします。 また、クラスターが大量のデータで構成されている場合は非常に有益です。
メンテナンスモードがノードの通常の停止とどのように異なるかは、次の図で説明されています。
- ステージ1:Partitioned-Replicaトポロジの構造 of NCache は、PORクラスターが大量のデータを含むXNUMXつのサーバーノードで構成されている場合に示されています。
- ステージ2:ノードCが停止しました。 ノードCは、メンテナンスモードによるメンテナンスのために停止されます。
- ステージ3:データ redisトリビューション。 ここで、Cのレプリカがアクティブになり、ノードCのクライアントのアドレス指定を開始します。 これにより、状態転送をトリガーする必要がなくなり、クラスターがメンテナンス中である限り、状態転送スレッドが停止します。 これにより、ノードCが停止した後、不要な状態転送がクラスター全体でデータのバランスを取るときに直面する問題が解決されます。
- ステージ4:ノードCが再起動しました。 メンテナンスのために停止した後、ノードCは再起動を待機します。 クラスタがメンテナンスモードを終了するたびに、ノードCが起動します。
- ステージ5:データ転送。 これは、ノードCがレプリカ部分からすべてのデータを受信し、状態転送を通じてノード全体(つまり、アクティブCとレプリカB)を更新するクラスターのフェーズです。
NCache 詳細 パーティション化されたレプリカ NCache ドキュメント メンテナンスモード-NCache ドキュメント
メンテナンスのためにノードを停止する方法
Web Managerを使用して、またはメンテナンスのためにノードを停止できます。 PowerShellの。 メンテナンスのためにノードを停止する方法は次のとおりです。 Webマネージャ。 ノードを停止する際に、そのノードをメンテナンス下に置きたいメンテナンス時間を指定するように求められます。 このタイムアウトは、状態転送をトリガーできない期間と見なされます。
次の手順では、メンテナンスのために停止するノードを停止できます。
- にアクセスする NCache Webマネージャ
- クラスタ化されたキャッシュに移動し、メンテナンスが必要なクラスタを選択します
- さまざまなノードの中から、メンテナンスが必要なノードを選択します。
その設定に移動し、オプションを選択します メンテナンスのために停止.
メンテナンスモードを終了する方法
クラスタがメンテナンスモードに入ると、WebManagerを使用してそのクラスタを終了します。 従う必要のある手順は次のとおりです。
- あなたから NCache Webマネージャ、クラスター化されたキャッシュに移動します
- メンテナンス中のクラスターを選択します。
- その設定に移動し、を選択します メンテナンスモードを終了します.
Web Manager以外に、ノードがメンテナンスモードを終了する方法はいくつかあります。 これらのシナリオは、アプリケーションのパフォーマンスに影響を与える可能性があるため、考慮する必要があります。
次の場合、ノードはメンテナンスモードを終了できます。
- メンテナンス中のノードが開始されたとき: メンテナンス中のノードがマネージャーまたはPowerShellコマンドを使用して手動で開始された場合、そのノードはメンテナンスモードを終了します。
- タイムアウトの期限が切れたとき: メンテナンス用に提供されたタイムアウトが期限切れになると、状態転送がトリガーされ、クラスターは自動的にメンテナンスモードを終了します。
- ノードがクラスターを離れるとき: メンテナンス中のノードは、クラスターを正常に終了できません。 ただし、そのクラスターのノードのXNUMXつが強制的に離れると、そのクラスターは、まだメンテナンスプロセス中であるにもかかわらず、必然的にメンテナンスモードから外れます。 ここで注意しなければならないのは、メンテナンス中のノードそのものが離れると、データが失われる可能性が高いということです。
メンテナンスモードを終了するためにどの方法を使用する場合でも、そのシグナルだけが、状態転送スレッドがクラスター全体で自動バランシングプロセスをトリガーするための手がかりになります。
要約
アプリケーションのパフォーマンスを低下させることなく、Partitioned-Replicaクラスター化キャッシュにパッチを適用する方法が必要な場合は、チェックアウトしてください。 NCache メンテナンスモード。 メンテナンスモードでは、アプリケーションのダウンタイムを発生させることなく、バグの修正、パッチの追加、ソフトウェアまたはハードウェアのアップグレードを行うことができます。 あなたがしなければならないのは、上記の手順に従って、自分自身でどれほど素晴らしいかをチェックすることです NCache メンテナンスモードはです。