当缺少具有vnodes的令牌范围时,如何引导Cassandra节点?

 手机用户2602939883 发布于 2023-02-07 18:02

我在Cassandra 1.2.11(DSE)上的AWS上有一个12节点集群.我失去了其中一个节点,因为它丢失了亚马逊(包含数据)的短暂驱动器.为了解决这个问题,我删除了有效的节点nodetool removenode $hostid.群集似乎仍然是均衡的,等等.

问题是,当我尝试引导新节点时,我现在遇到如下错误:

java.lang.IllegalStateException: unable to find sufficient sources for streaming range (-2556758013916855401,-2545694469859252228]
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:975)
at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:741)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:585)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:482)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:348)
at com.datastax.bdp.server.DseDaemon.setup(DseDaemon.java:351)
at org.apache.cassandra.service.CassandraDaemon.init(CassandraDaemon.java:381)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:212)
Cannot load daemon
Service exit with a return value of 3

没有意义的是,除了正在使用的Opscenter之外SimpleStrategy,其余的键空间都在使用NetworkTopologyStrategy并且RF为3.我试图解决这个问题的方法是确定哪个节点的范围是失败并运行a nodetool repair -pr然后再次尝试引导程序.虽然这可能最终在整个集群周围运行修复(可能需要数天),但我在一个节点上运行并且集群在降级状态下运行.如果我失去了另一个节点,我有点搞砸了.

我应该在这做什么,如何解决这个问题并强制节点引导?

1 个回答
  • 我想出了这个问题.问题是Opscenter正在使用SimpleStrategy并且默认replication_factor值为1.因此,当该节点丢失时,它无法引导新节点.解决方案是使用以下命令更新Opscenter密钥空间:

    UPDATE KEYSPACE OpsCenter
      WITH placement_strategy = 'NetworkTopologyStrategy'
       AND strategy_options = {Cassandra : 3};
    

    这允许引导程序发生.现在所有节点都需要进行修复,并且可能会在修复完成之前提供对OpsCenter密钥空间请求的未命中.但由于OpsCenter是正确群集操作的非必需密钥空间,因此在此处具有可替换节点更好.

    2023-02-07 18:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有