Cassandra num_令牌-这真的是num_令牌吗?

Cassandra num_令牌-这真的是num_令牌吗?,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,我是卡桑德拉的新手。我正在阅读cassandra.yml文件中虚拟节点的num_tokens参数。我认为我不太明白这是在做什么,或者令牌/分区是如何分配的。这到底是怎么回事 如果我们真正讨论的是令牌/节点的数量,那么默认值256没有任何意义。num\u令牌真的是num\u令牌\u分区/节点吗 让我们先选择两个节点A和B,添加第三个节点C,然后尝试解释如何工作。首先,每个节点都配置了256个num_令牌。现在,当A和B出现时 A和B在加入集群时获得多少令牌?A和B得到什么分区范围?如何决定 Cas

我是卡桑德拉的新手。我正在阅读cassandra.yml文件中虚拟节点的num_tokens参数。我认为我不太明白这是在做什么,或者令牌/分区是如何分配的。这到底是怎么回事

如果我们真正讨论的是令牌/节点的数量,那么默认值256没有任何意义。num\u令牌真的是num\u令牌\u分区/节点吗

让我们先选择两个节点A和B,添加第三个节点C,然后尝试解释如何工作。首先,每个节点都配置了256个num_令牌。现在,当A和B出现时

  • A和B在加入集群时获得多少令牌?A和B得到什么分区范围?如何决定
  • Cassandra中存储了什么样的元数据,以了解A和B的分区范围
  • 当C现在加入时会发生什么?Cassandra如何决定C得到的分区范围?C上应该放多少个分区
  • 当C加入时,A和B的分区范围是如何决定的 有没有人愿意为了每个人的利益详细说明一下?

    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-4:B)(5-9:C)(10:A)(11-14:B)(15-19:A)(20-30,0-2:C)
    
    3) 如果C也与2个标记20,5连接 节点现在将负责以下范围

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

    更多信息 V节点:

    在256个节点上,您极有可能向群集中的每个节点分发了等量的数据

    当然,除非不是。随机Vnode令牌范围分配与平衡负载无关。平衡负载是设计为平衡的标记范围,而不是猜测

    然后在令牌范围分配
    CASSANDRA-6388
    CASSANDRA-7032
    中存在缺陷,目前在生产中运行的任何集群中都没有修复。然后是256个VNODE集群的主要问题,并试图重建或备份它们,这实际上是不可能的


    重建和恢复需要数周时间。试着在生产环境中对Vnode运行hadoop。放弃一个工程代币范围集群,去VNODE hail mary's,后果自负。

    而且RussS的答案是正确的,我认为很难理解

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

    重要的是复制因子和环,以了解这是如何有意义的

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

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

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

    对于v节点,数据被分解成子分区。一台计算机代表许多虚拟节点。因此,旧计算机A现在可能表示A、D、G、J、M,假设A
    num\u标记:5

    接下来是戒指。在构建环时,计算机之间的连接方式将使同一台计算机不会连接到自身(a不会直接与D对话,反之亦然)

    现在,这意味着一台物理计算机将连接到
    num\u令牌
    ×
    replication\u factor-1
    其他计算机。因此,将
    num_令牌设置为5,复制为3,您将连接到10台其他计算机。这意味着负载将在10台计算机之间共享,而不是在3台计算机之间共享(复制系数可能会暗示这一点)

    因此,对于16个节点,一个
    num_标记:256
    replication:3
    ,这将是一个奇怪的设置,因为它意味着所有节点彼此连接512次。这就是说,以后必须更改
    num_令牌
    可能需要一点时间让集群适应新的值。特别是如果你有一个大的安装。因此,如果您预见到有大量节点,那么从一开始就使用相当大的
    num_令牌是一个好主意


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

    这是一个非常好的答案。非常感谢!为什么范围不一致