【问题标题】:What would be the exact procedure to add new nodes to a Cassandra cluster so that the cluster remains balanced?将新节点添加到 Cassandra 集群以使集群保持平衡的确切过程是什么?
【发布时间】:2013-07-12 04:53:20
【问题描述】:

我已经阅读了我能找到的相关文档,但我仍然有疑问。

我读到的

来自http://wiki.apache.org/cassandra/Operations#Moving_nodes

如果您将节点添加到集群中,您的环将不平衡,获得完美平衡的唯一方法是为每个节点计算新令牌并使用 nodetool move 命令手动将它们分配给每个节点。

来自http://www.datastax.com/docs/1.1/operations/cluster_management#adding-capacity-to-an-existing-cluster

如果需要通过不均匀的节点数增加容量,则必须重新计算整个集群的令牌,然后使用 nodetool move 将新令牌分配给现有节点。使用新的令牌分配重新启动所有节点后,运行 nodetool cleanup 以删除所有节点上未使用的密钥

但我不清楚这些事情的顺序。

你能解释一下在下面的场景中是怎么做的吗?

  • 我使用的是 cassandra 1.1.9,因此没有使用虚拟节点。
  • 我有一个集群环,有 5 个节点,每个节点拥有 20%
  • 他们的令牌是
    • 0
    • 34028236692093846346337460743176821145
    • 68056473384187692692674921486353642291
    • 102084710076281539039012382229530463436
    • 136112946768375385385349842972707284582

我想添加 2 个额外的节点。

我必须遵循哪些步骤?我知道我应该安装和配置 cassandra,使用原来的 5 作为种子,并计算它们的新令牌,但是我应该以什么顺序使用 nodetool move 移动数据?一次一个吗?
当我移动第一个数据时,数据会发生什么?是否随时可用?
我应该先启动两个新节点,然后再将原来的 5 个节点移动到它们的新令牌中吗?

分步指南将是理想的选择。

请注意,我需要在 1.2 版本之前进行

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    新的令牌应该是

    • 0
    • 24305883351495604533098186245126300818
    • 48611766702991209066196372490252601636
    • 72917650054486813599294558735378902454
    • 97223533405982418132392744980505203272
    • 121529416757478022665490931225631504090
    • 145835300108973627198589117470757804908

    使用 2^127/7 * {0-7} 计算。

    我必须遵循哪些步骤? 我应该按什么顺序使用 nodetool move 移动数据?

    你应该

    1. 在 48611766702991209066196372490252601636 的一个节点中进行引导
    2. 在 121529416757478022665490931225631504090 处引导另一个节点
    3. 将 34028236692093846346337460743176821145 移至 24305883351495604533098186245126300818
    4. 将 68056473384187692692674921486353642291 移至 72917650054486813599294558735378902454
    5. 将 102084710076281539039012382229530463436 移至 97223533405982418132392744980505203272
    6. 将 136112946768375385385349842972707284582 移至 145835300108973627198589117470757804908

    (我试图最小化传输的数据量 - 可能不是最佳的,但考虑到您可能已经拥有的数据不平衡,已经足够接近,不会产生太大影响。)

    是一次一个吗?

    您应该一次引导一个节点并一次移动一个令牌。这样可以避免在流式传输数据时给集群带来过多的负载。

    当我移动第一个数据时,数据会发生什么?是否随时可用?

    移动期间数据完全可用。节点参与新旧范围的读写,因此您可以在移动过程中进行读写。

    我应该先启动两个新节点,然后再将原来的 5 个节点移到新的令牌上吗?

    在集群中拥有更多节点总是更好 - 如果您先移动,您将拥有一些节点的数据量是其他节点的两倍。

    【讨论】:

    • 那么,我应该将48611766702991209066196372490252601636 添加到新节点之一,将121529416757478022665490931225631504090 添加到另一个节点,启动它们,然后才使用nodetool move 从步骤3 向前迁移日期?
    • 对了,原来的不用重启 5、在yaml里设置initial_token和seed给新的,一个一个启动。
    【解决方案2】:

    从 Cassandra 1.2 开始,由于新的 vnodes(每个节点多个种子)功能,在添加节点时保持集群平衡非常容易。 Cassandra 现在会自动为您平衡集群。如果您从早期版本升级,您将have to activate the vnode feature yourself

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 2015-09-08
      • 2014-11-15
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多