Cassandra的Token计算器

在建立cassandra系统时,如果不去设定每个node里cassandra.yaml配置的initial_token参数,新节点会被自动指派一个token值,但是自动指派的token值通常会造成每个node在整个ring裡的距离不相等,进而导致每个node负责的partition大小不相等。如果一开始就要让partition相等,可以利用下面的这个Java版CassandraTokenCalc(这个Sample是网路上抄来的,不知道第儿手了,别问我来源跟演算法的根据是什么...:P)来算出合适的token,然后手动指派initial_token参数值。
public class CassandraTokenCalc {
 public static void main(String[] args) {
       String input = null;
       int nodeAmount = 0;
       try {
          System.out.print("Number of Cassandra Nodes: ");
          BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
             input = is.readLine();
             nodeAmount = Integer.parseInt(input);
       }
       catch (NumberFormatException ex) {
          System.err.println("Not a valid number: " + input);
       }
       catch (IOException e) {
          System.err.println("Unexpected IO ERROR: " + e);
       }
       BigInteger tok = new BigInteger("170141183460469231731687303715884105728");
       for(int i=0; i<nodeAmount; i++){
          System.out.println("Node: " + i);
          System.out.println("initial_token: " + tok.multiply(BigInteger.valueOf(i)).divide(BigInteger.valueOf(nodeAmount)));
       }
 }
}
执行后的结果类似下面这样
Number of Cassandra Nodes: 3
Node: 0
initial_token: 0
Node: 1
initial_token: 56713727820156410577229101238628035242
Node: 2
initial_token: 113427455640312821154458202477256070485

如果是现行已建置好的cassandra系统里发现每个node所分配的partition不一致,可利用上面算出来的token值再配合 nodetool...move... 指令来搬移现行的token,进而达到每个partition大小一致的目标。

 

相关资料:http://www.itneng.com/thread-1440-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值