Cassandra num_tokens - 这真的是num_token_partitions吗?

sat*_*sat 9 cassandra cassandra-2.0

我是Cassandra的新手.我正在阅读cassandra.yml文件中虚拟节点的num_tokens参数.我不认为我完全理解这是做什么或如何分配令牌/分区.这是怎么回事?

如果我们真的在讨论令牌/节点的数量,那么默认值256没有任何意义.num_tokens真的是num_token_partitions/node吗?

让我们选择2个节点A和B开始,添加第3个节点C,然后尝试解释工作原理.首先,每个节点配置为num_tokens为256.现在,当A和B出现时

  1. A和B加入群集时会获得多少令牌?A和B得到什么分区范围,如何确定?
  2. 在Cassandra中存储什么样的元数据以了解A和B携带的分区范围.
  3. C加入现在会发生什么?Cassandra如何确定C得到的分区范围?应该在C上放多少个分区?
  4. 当C加入时,A和B的分区范围是如何决定的?

有人为了每个人的利益而详细澄清吗?

Rus*_*ssS 21

4)通过向每个节点授予从其可用令牌到下一个指定令牌的范围来确定分区范围.

2)通过八卦细节交换数据,哪些节点具有哪些令牌.该元数据允许每个节点知道哪个节点负责哪个范围.Keyspace /复制设置也会更改实际保存数据的位置.

示例:1)A获得256个范围B获得256个范围.但是为了使这个简单,让他们给每个2个令牌并假装令牌范围是0到30

给定令牌:10,15和B 3,11节点负责以下范围

(3-9:B)(10:A)(11-14:B)(15-30,0-2:A)
Run Code Online (Sandbox Code Playgroud)

3)如果C连接也有2个令牌20,5节点现在将负责以下范围

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

Vnode非常强大,因为现在当C加入集群时,它从多个节点(B中的5-9和来自A的20-30,0-2)中获取数据,共享这些机器之间的负载.在这个玩具示例中,您可以看到只有2个令牌允许某些节点承载大部分数据,而其他节点几乎没有.随着Vnode的数量增加,节点之间的平衡随着范围越来越随机地细分而增加.在256个节点上,您极有可能向集群中的每个节点分配了大量数据.

有关更多信息,请访问:http://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2


Ale*_*lke 5

RussS 的回答也是正确的,我认为很难遵循。

\n\n

这个想法与其说是令牌分配,不如说是 Cassandra 用于分布式数据访问概念的技术手段。

\n\n

重要的是复制因子和环,以了解其意义。

\n\n

复制的工作方式是将一个节点的数据复制到下两个节点上。因此,如果您位于节点 A 上,则分配给 A 的数据将复制到 B 和 C 上。分配给 B 的数据将复制到 C 和 D 上,依此类推。

\n\n

如果只有 3 个节点和 3 个复制,则没有任何区别。

\n\n

如果您有 100 个节点,复制 3 和num_tokens: 1,那么正好有 3 个节点复制它们分配的数据,并且这始终是节点的整个数据集。在上面的示例中,这意味着分配给 A 的所有数据都可以从 A、B 或 C 读取,并且只能从这三个节点读取。因此,如果您尝试经常加载特定数据而其余数据不那么频繁,那么您的集群将会相当不平衡。

\n\n

使用 v 节点,数据被分解为子分区。一台计算机代表许多虚拟节点。因此,假设 a ,旧计算机 A 现在可以表示 A、D、G、J、M num_tokens: 5

\n\n

接下来我们有戒指。构建环时,计算机将以这样的方式相互连接,即同一台计算机不会连接到自身(A 不会直接与 D 通信,反之亦然。)

\n\n

现在,这意味着一台物理计算机将连接到num_tokens\xc3\x97replication_factor - 1其他计算机。因此,如果num_tokens设置为 5 且复制为 3,您将连接到其他 10 台计算机。这意味着负载将在 10 台计算机而不是 3 台计算机之间共享(正如复制因子所暗示的那样。)

\n\n

因此,对于 16 个节点 anum_tokens: 256replication: 3,这将是一个奇怪的设置,因为这意味着所有节点彼此之间连接了 512 次。话虽如此,必须更改num_tokens后者可能需要一点时间才能使集群适应新值。特别是如果您有大型安装。因此,如果您预计有大量节点,那么num_tokens从一开始就选择较大的节点是一个好主意。

\n\n

作为副作用,它还会在每个节点上的各个表(文件)之间分配数据。这也有助于更快地查找数据。实际上,建议您在创建 Elassandra 集群时使用更多的实例(16 到 64)以简化搜索。

\n