Cassandra没有在集群中的现有节点上平衡数据

时间:2013-12-17 19:59:37

标签: cassandra data-partitioning ycsb

Greeings, 我已经配置了3个节点Cassandra 1.2.12集群,我能够连接到master并在所有节点上创建键空间和表。但是,我想在我的集群上运行YCSB,所以当我运行YCSB并加载数据时,它全部加载到Master上。由于我正在加载1000000条记录,因此我通过将该数字除以我拥有的节点数来计算初始标记。 当我运行nodetool时,我会得到类似的东西:

Address    Rack    Status    State    Load    Owns    Token
10.3.2.8   2       Up        Normal   1.08GB  100%    0
10.3.1.231 2       Up        Normal   67.58KB  0%     330000
10.3.1.128 2       Up        Normal   52.79KB  0%     660000

有人有同样的问题吗?我尝试使用tokengentool来分配tokes和diffrenet分区(Murmur3和Random),它们完全相同,只是在主节点上加载所有数据。

问候,Veronika。

1 个答案:

答案 0 :(得分:4)

A" row"不等于卡桑德拉的一个代币。无论您打算存储多少行,Cassandra的RandomPartitioner都支持2 ^ 127个令牌。对于3节点集群,这些初始令牌应相互增加56,713,727,820,156,410,577,229,101,238,628,035,242。

使用DataStax的Python脚本来计算初始令牌,这些RandomPartitioner值应该适合您:

node 0: 0
node 1: 56713727820156410577229101238628035242
node 2: 113427455640312821154458202477256070485

如果您使用的是Murmur3 Partitioner(-2 ^ 63到+ 2 ^ 63令牌),请使用以下值:

node 0: -9223372036854775808
node 1: -3074457345618258603
node 2: 3074457345618258602

所以在这一点上,你有两个选择:

1 - 停用10.3.1.231和10.3.1.128,停止节点,改变它们的initial_token值以匹配上面的内容,并重新启动它们。但鉴于您提到尝试Murmur3和RandomPartitioner这一事实,我认为您最好选择下面的选项#2。

2 - 停止所有节点,删除您的数据,follow these instructions,然后重新加载数据。

此外,您可能希望调整为键空间定义的复制因子。对于3节点群集,您将需要至少为2的复制因子。这将确保如果一台服务器出现故障,您仍然会有一份数据副本。这应该仍然允许您的应用程序解决(只要您的读/写一致性设置为ONE)。