12

私はカサンドラが初めてです。cassandra.yml ファイルの仮想ノードの num_tokens パラメータについて読んでいます。これが何をしているのか、またはトークン/パーティションがどのように割り当てられているのかをよく理解していないと思います。ここで実際に何が起こっているのですか?

トークン/ノードの数について実際に話している場合、デフォルト値の 256 は意味がありません。num_tokens は本当に num_token_partitions/node ですか?

最初に 2 つのノード A と B を選び、3 番目のノード C を追加してから、どのように機能するかを説明してみましょう。まず、各ノードは 256 の num_tokens で構成されます。ここで、A と B が起動すると、

  1. A と B がクラスターに参加したときにトークンをいくつ取得しますか? A と B はどのパーティション範囲を取得し、それはどのように決定されますか?
  2. どのパーティション範囲 A と B が保持されているかを知るために、Cassandra に格納されているメタデータの種類。
  3. Cが参加するとどうなりますか?Cassandra は C が取得するパーティション範囲をどのように決定しますか? C にはいくつのパーティションを配置する必要がありますか?
  4. C が参加した場合、A と B のパーティション範囲はどのように決定されますか?

みんなの利益のために詳しく説明してくれる親切な人はいますか?

4

3 に答える 3

25

4) パーティションの範囲は、各ノードに使用可能なトークンから次の指定されたトークンまでの範囲を付与することによって決定されます。

2) データは、どのノードがどのトークンを持っているかを詳述するゴシップを通じて交換されます。このメタデータにより、すべてのノードは、どのノードがどの範囲を担当しているかを知ることができます。キースペース/レプリケーション設定も、データが実際に保存される場所を変更します。

例: 1) A は 256 の範囲を取得します B は 256 の範囲を取得します。しかし、これを簡単にするために、それぞれに 2 つのトークンを与え、トークンの範囲が 0 から 30 であると仮定します。

与えられたトークン: A 10,15 および B 3,11 ノードは次の範囲を担当します

(3-9:B)(10:A)(11-14:B)(15-30,0-2:A)

3) C も 2 つのトークン 20,5 で参加する場合、ノードは次の範囲を担当します。

(3-4:B)(5-9:C)(10:A)(11-14:B)(15-19:A)(20-30,0-2:C)

C がクラスターに参加すると、複数のノード (B から 5 ~ 9、A から 20 ~ 30、0 ~ 2) からデータを取得し、それらのマシン間で負荷を共有するため、vnode は強力です。このおもちゃの例では、トークンが 2 つしかないため、一部のノードがデータの大部分をホストし、他のノードはほとんどデータを取得できないことがわかります。Vnode の数が増えると、範囲がますますランダムに細分化されるため、ノード間のバランスが増加します。256 ノードでは、クラスタ内の各ノードに均等な量のデータが分散されている可能性が非常に高くなります。

VNode の詳細については、http ://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2 を参照してください。

于 2013-11-15T15:31:04.660 に答える
1

256 ノードでは、クラスタ内の各ノードに均等な量のデータが分散されている可能性が非常に高くなります。

もちろんそうでない場合を除きます。ランダムな Vnode トークン範囲の割り当ては、バランスの取れた負荷とは関係ありません。バランスのとれた負荷は、推測ではなくバランスを取るように設計されたトークンの範囲です。

次に、トークン範囲の割り当てにバグがあり、CASSANDRA-6388現在CASSANDRA-7032本番環境で実行されているクラスターではいずれも修正されていません。次に、256 個の VNODE クラスターに大きな問題があり、それらを再構築またはバックアップしようとすることは、文字通り不可能です。

再構築と復旧には数週間かかります。そして、本番環境で vnode に対して Hadoop を実行してみてください。VNODE のために設計されたトークン範囲クラスターを放棄して、あなたの危険にさらされてください。

于 2015-10-22T22:35:10.487 に答える