2017-02-28 6 views
1

私はCassandraを勉強しています。私が取り組んでいるプロジェクトのためのクラスタをセットアップする過程です。この例を考えてみましょう: それぞれ200Gbのスペースを持つ5ノードのクラスタをセットアップしたとします。これは、全体で最大1000GB(1TB程度)のスペースに相当します。私のパーティションがクラスタ全体に等しく分割されていると仮定すると、ノードを簡単に追加して線形スケーラビリティを達成できます。しかし、これらの5つのノードがSSDの限界値200 GBに近づくとどうなりますか?その場合、私は5つのノードを追加することができ、今ではパーティションは10のノードに分割されます。しかし、古いノードはまだクラスタの一部であるため、データを書き込むことになります。これら5つの古いノードを「読み取り専用」にする方法はありますか?私はクラスタ全体でランダムな読み込みクエリを撃ってしまいますが、古いノードにはもう書きたくありません(200ギガバイトの上限で制限されているので)。カッサンドラクラスターのノードが限界に達するとどうなるでしょうか?

助けていただければ幸いです。ありがとうございました。

注:クエリの99%が書き込みクエリであり、読み取りに対して1%以下であると言えます。アプリはCassandraのクリックイベントを持続させる必要があります。

答えて

1

問題を正しく理解する上で問題があります。

私は、新しい5ノードを追加することによって、いくつかのトークン範囲が割り当てられるので、データロードの一部が新しいノードに転送されることをご存知だと思います。

あなたが知っているように、古い5ノードが限界に達したために書き込むことができないことが懸念される場合、新しいノードがデータロードを共有し、今すぐ追記してください。

ノードへの読み取りと書き込みの分離はまったく別の問題です。しかし、これら5つのノードだけに読み込みを分離して新しい5つのノードに書き込む場合は、同じクラスタの別のデータセンターに5つの新しいノードを追加し、読み書きに異なる整合性レベルを使用することが最善の方法です古いデータセンターを読み取り専用にする必要性を満たす。

しかし、新しいデータセンターは、最初からデータロードを軽くしません。それはそれ自体に同じ負荷をかけることさえあります。 (したがって、両方の問題を同時に達成するには、5つ以上のノードが必要です。新しいデータセンターを作成することによって、読み書きを分離するために軽量化するノードはほとんどありません。ベスト・プラクティスは、データのロードを監視し、そのような問題が発生する前に新しいノードを追加したり、データの制限を増やしたりすることです。

これを考慮して、読み書き用に指定したノードが異なるデータセンターのノードであることを確認する必要があります。

DC1(N1、N2、N3、N4、N5)

DC2(N6、N7、N8、N9、N10)

あなたは状況を次のようしている考えてみましょうさて、あなたはノードn1を提供読み込みと書き込みのためにあなたが

N6ノードを提供するために今、読み取り/書き込みの分離が怒鳴るのオプションから右の整合性レベルを選択することによって行うことができます。

LOCAL_QUORUM

または

LOCAL_ONE

これらは基本的には、ローカルデータセンターへのレプリカの検索を限定します。多くのためのこれらの文献で

ルック:クラスターが限界に達したときに Adding a datacenter to a clusterConsistency Levels

+0

感謝。私はクラスタにノードを追加する場合、それがどこにあるか、古いノード内のデータが残っているだろうが、カサンドラのvノードとまともなパーティション化戦略と、新しいデータは新しいノードと古いノードに放出されることになります。私の理解では、このましたデータも取得し続けるでしょう。あなたは、ノードを追加することにより、カサンドラは、古いノードからいくつかのデータを取ると新しいものに転送した後、古いノードからこの転送されたデータを削除することを言っていますか? – Ankush92

+0

私はトークンの範囲の一部が(噂を介して他のノードに通知されます)全体のデータロードに貢献することに割り当てられる、あなたが同じデータセンターにノードを追加しているほとんどsame.Ifを言っています。このトークン範囲に対応するデータは、その新しいノードによって保持される。したがって、古いノードでは、自分自身の負荷の一部を解放することになります。 – r005t3r

+0

また、この新しいデータの分布は一様ではありません。しかし、* nodetoolの修復*を実行することによって、これはバランスを取ることができます。 PS。そのノドトールクリーンアップ* – r005t3r

1

通常、我々はクラスタに新しいノードを追加します。新しいノードを追加した後、古いcassandraクラスタノードは新しいノードにデータを配信します。その後、私たちは、クリーンアップにすべてのノードに新しいノードに分散されたデータをnodetool cleanupを使用しています。シナリオ全体は1つのDCで発生します。例えば

と仮定、あなたはDC1で3ノード(A,B,C)DC2で1つのノード(D)を持っています。あなたのノードは限界に達しています。したがって、新しいノード(E)をDC1に追加することにしました。ノードABCはノードEにデータを配信し、ABCnodetool cleanupを使用してスペースをクリーンアップします。返信用

+0

聖なる****。それは素晴らしいです。ありがとう。 – Ankush92

関連する問題