【问题标题】:Rebalancing Cassandra 1.2 cluster when a seed node (from total of 2) is died using virtual nodes当种子节点(总共 2 个)使用虚拟节点死亡时重新平衡 Cassandra 1.2 集群
【发布时间】:2014-07-04 19:59:43
【问题描述】:

我的本​​地机器上有一个 Cassandra 1.2 集群,并修改了主机:

#cassandra nodes
m.y.i.p               m.y.i.p   (Node 1)<---- seed 1
m.y.i.p               127.0.0.3 (Node 2)
m.y.i.p               127.0.0.4 (Node 3)<---- seed 2
m.y.i.p               127.0.0.5 (Node 4)
m.y.i.p               127.0.0.6 (Node 5)

... 所以集群总共有 5 个节点。我正在使用虚拟节点,所以我不必在任何地方设置 initial_token。

我遵循的步骤:

  1. 启动种子节点(1 和 3)
  2. 启动节点 2 和 4。
  3. 关闭节点 3。
  4. 尝试加入节点 5。

问题出在第 4 步,当我尝试加入 Node 5 时,Cassandra 抛出此异常:

   java.lang.IllegalStateException: unable to find sufficient sources for streaming range (-7204018021044318047,-6965052533844316617]
        at org.apache.cassandra.dht.RangeStreamer.getRangeFetchMap(RangeStreamer.java:205)
        at org.apache.cassandra.dht.RangeStreamer.addRanges(RangeStreamer.java:129)
        at org.apache.cassandra.dht.BootStrapper.bootstrap(BootStrapper.java:81)
        at org.apache.cassandra.service.StorageService.bootstrap(StorageService.java:890)
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:659)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:514)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:411)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:278)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:366)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:409)
java.lang.IllegalStateException: unable to find sufficient sources for streaming range (-7204018021044318047,-6965052533844316617]
        at org.apache.cassandra.dht.RangeStreamer.getRangeFetchMap(RangeStreamer.java:205)
        at org.apache.cassandra.dht.RangeStreamer.addRanges(RangeStreamer.java:129)
        at org.apache.cassandra.dht.BootStrapper.bootstrap(BootStrapper.java:81)
        at org.apache.cassandra.service.StorageService.bootstrap(StorageService.java:890)
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:659)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:514)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:411)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:278)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:366)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:409)
Exception encountered during startup: unable to find sufficient sources for streaming range (-7204018021044318047,-6965052533844316617]
ERROR 16:55:47,634 Exception in thread Thread[StorageServiceShutdownHook,5,main]
java.lang.NullPointerException
        at org.apache.cassandra.service.StorageService.stopRPCServer(StorageService.java:321)
        at org.apache.cassandra.service.StorageService$1.runMayThrow(StorageService.java:479)
        at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
        at java.lang.Thread.run(Thread.java:722)

范围(-7204018021044318047,-6965052533844316617]只是属于死节点(节点3)。由于我使用的是虚拟节点,我认为环必须重新平衡:

添加或删除节点时不再需要重新平衡集群。当一个节点加入 集群,它承担来自集群中其他节点的偶数部分数据的责任。如果一个节点 失败时,负载会均匀分布在集群中的其他节点上。

但我错了,很明显:)。

当前一个节点关闭时,我可以做些什么来加入现有集群中的新节点?请注意,我每个节点有 256 个令牌,nodetool move 不是一个选项(我认为)。

提前感谢您,欢迎提供任何信息!

【问题讨论】:

  • 你的复制因子是多少?如果为 1,那么它将失败,因为数据无法流式传输到新节点。
  • 我正在使用 SimpleStrategy 和 replication_factor 3。但是,我需要有数据来重新平衡吗?我的意思是,如果我只有环,没有任何密钥空间,并且一个节点发生故障,不要再划分令牌吗?谢谢你的回答理查德。
  • 当没有列族时,添加新节点应该始终有效。即使一两个节点已关闭,添加节点也应适用于有或没有数据的 RF 3。这可能是一个错误 - 当使用虚拟节点不起作用时,可能会引导一个新节点关闭。如果有时间,我会尝试重现。
  • 非常感谢理查德,非常友好。我尝试过使用更少的令牌、不同的节点号、其他 RF 和策略......但我总是得到相同的结果,我没有发现配置错误。
  • 它是否从节点 3 开始?为什么需要关闭节点 3?

标签: cassandra cluster-computing


【解决方案1】:

解决方案是手动从令牌中删除节点 3(已关闭)。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 2011-01-15
    • 2014-11-27
    • 1970-01-01
    • 2017-10-27
    • 2021-01-11
    • 2017-06-03
    • 1970-01-01
    • 2019-09-28
    相关资源
    最近更新 更多