適切な状況判断を行うことは、必ずしも単純なことではありません。異なるシナリオにおいて、クラスタのリバランスをすべき状況とその理由について、以下に示します。
クラスタサイズの拡大が必要な状況
より多くのノードを追加することによって、クラスターのサイズを拡大することができます。より多くのノードを追加すると、使用可能なRAM、ディスクI / Oと、クライアントアプリケーションで使用可能なネットワーク帯域幅を増加させ、複数のマシン間で負荷を分散するのに役立ちます。意思決定を助けるための、いくつかの手法や統計情報があります:
RAM容量を増加:
CouchbaseServerの最も重要なコンポーネントの一つは、利用可能なRAM容量です。RAMは記憶するアプリケーションデータとCouchbaseのサーバのキャッシュ層をだけでなく、他の操作にも使用されるため、全体として利用可能なRAMの減少は、様々な場所でパフォーマンスの問題を引き起こすことがあります。
クラスタ内のRAM容量を増加するべき2つの一般的な指標があります:
ディスク読取りが多く発生している場合、アプリケーションがRAMにないデータを次から次へとディスクから読み出していることを意味します。クラスタ内のRAMを増やすと、より多くのデータをRAMに格納でき、アプリケーションに優れたパフォーマンスを提供できるようになります。
CouchbaseServerクラスタにさらにbucketを追加する場合は、より多くのRAMが必要となるでしょう。ノードを追加してシステム全体の容量を増やし、その後、新しいバケット用の空きスペースを作るため、既存のバケットを縮小することができます。
ディスクI / Oのスループットを増加
Couchbaseクラスタにノードを追加することで、実行可能なディスクI/Oの合計量が増加することになります。これは、高頻度の書き込み環境で特に重要ですが、ディスクから大量のデータを読み取る必要がある場合の重要な要因にもなり得ます。
ディスク容量を増加
現在のノードへディスク領域を追加する、あるいは総ディスク領域を増やすため、クラスタにノードを追加することもできます。
ネットワーク帯域幅の増加
クラスタのネットワーク帯域幅が飽和している、または飽和に近いということがわかれば、それは、さらにノードが必要であるという非常に強力な指標です。ノードを増やすことで、全体のネットワーク帯域幅を広げることになり、さらに個々のノードの帯域幅を個別に減らすことになります。
Couchbaseクラスタの縮小を選択することは、より主観的な判断になります。これは通常、コスト面または、アプリケーションの負荷要件を満たすのに大きなクラスタの必要性がないことに基づいています。
クラスタサイズを縮小できる状況:
データセットおよびアプリケーションの負荷に対応するために、残りのノードで十分な容量があることを確認する必要があります。十分なノードが存在しない場合は、ノードを除去すると、クラスタに重大な悪影響を及ぼす可能性があります。
理想的なクラスタサイズを決定しようとしている場合、一度に複数のノードを削除することは避けてください。その代わりに、1ノードずつ順番に除去し、クラスタ全体への影響を確認してください。
フェールオーバーをするよりも、ノードを除去しリバランスをすべきです。ノードに障害が発生し、クラスタに戻ってこないとき、フェールオーバー機能は、そのレプリカのvBucketsがすぐにアクティブになるよう促します。もし正常なノードがフェールオーバーすると、その操作中に通信中だった複製データの一部が失われる可能性があります。ノードの除去機能を使用すると、すべてのデータが適切に複製され、継続的に使用可能となります。
リバランスするタイミングについて
CouchbaseServerクラスタにノードを追加または削除することを決定したら、次のいくつかを考慮に入れてください。
短期間に複数のノードを追加および/または削除しようとしているのなら、1個ノードを追加したらリバランスするというより、むしろ、一度にすべてを追加してから、リバランス操作を開始するのが最善の方法です。これにより、移動する必要があるデータ量と同様に、システムの全体的な負荷が削減されます。
ノードを追加するためには、サーバの負荷が落ち着いている時間を選択してください。リバランス操作は、オンラインで実行されることを意図している一方で、それは他に影響を与えない"自由な"操作ではなく、間違いなくディスクIO、ネットワーク帯域幅、CPUリソースやRAMの使用量の形で、システム全体として負荷の増大をもたらします。
自主的なリバランス(つまり、フェイルオーバー時以外)は、システムの使用率が低い期間中に実行されるべきです。データがクラスタ内で再配布されることからわかるように、リバランスは比較的リソースを消費する操作です。そのため、クラスタ全体に悪影響を与えることがないよう、高負荷がかかっている間はリバランスを実行すべきではありません。
リバランスは、クラスタ内で大量のデータを移動する必要があります。使用可能なRAMをより多くすることにより、オペレーティングシステムが、より多くのディスクアクセスをキャッシュすることができ、はるかに高速にリバランス操作を実行できるようになります。クラスタ内に十分なメモリがない場合。リバランスは非常に遅くなるでしょう。最大容量に達する前に、容量を追加しリバランスすることを推奨します。