当前位置: 首页 > 知识库问答 >
问题:

在执行节点恢复后在cassandra上发出num _ tokens-Cassandra 3 . 11 . 10和3.11.11

赵雪峰
2023-03-14

从3.0.13升级到3.11.10后,当我从节点重新获取数据时,我遇到了问题。恢复完成后,令牌数量从256更改为512.Incassandra.yaml它仍然num_token: 256,所以我不知道这里发生了什么。

这些是我正在执行的步骤

rm -rf /var/lib/cassandra/data/*
rm -rf /var/lib/cassandra/commitlog/*
rm -rf /var/lib/cassandra/saved_caches/*
rm -rf /var/lib/cassandra/hints/*
rm -rf /var/log/cassandra/*
tar -xvf $BACKUP_LOC/$BACKUP_NAME.tar -C /
find ${DATA_DIR} -mindepth 2 -path "*/snapshots/${BACKUP_NAME}/*" -type f \-exec bash -c 'dir={} && cd ${dir%/*} && mv {} ../..' \;

nodetool -u $NODETOOL_USR -pw $NODETOOL_PASSWD -h $(hostname) refresh $keyspace $table --ssl" >>$BACKUP_LOC/nodetool_refresh_commands.sh

当我在执行上述步骤后重新启动节点时,它将令牌从256更改为512。

错误:

错误 [main] 2021-10-07 15:16:24,060 卡桑德拉大.java:803 - 致命配置错误组织.apache.cassandra.exceptions.ConfigurationExcept: 无法将令牌数量从 512 更改为 256 在 org.apache.cassandra.service.存储服务.joinTokenRing(存储服务.java:1102) ~[apache-cassandra-3.11.11.jar:3.11.11] 在组织.apache.cassandra.service.存储服务.initServer(存储服务.java:760) ~[apache-cassandra-3.11.11.jar:3.11.11] 在组织org.apache.cassandra.service.StorageService.initServer(StorageService.java:694) ~[apache-cassandra-3.11.11.jar:3.11.11] at org.apache.cassandra.service.cassandraDaemon.setup(cassandraDaemon.java:395) [apache-cassandra-3.11.11.jar:3.11.11] 在 org.apache.cassandra.service.cassandraDaemon.activate(卡桑德拉daemon.java:633) [apache-cassandra-3.11.11.jar:3.11.11] 在 org.apache.cassandra.service.cassandraDaemon.main(卡桑德拉守护进程.java:786) [apache-cassandra-3.11.11.jar:3.11.11] 信息 [存储服务快照钩子] 2021-10-07 15:16:24,064 提示服务.java:209 - 暂停提示调度信息 [存储服务shutdownHook] 2021-10-07 15:16:24,064 Gossiper.java:1683 - 宣布关闭

有什么想法吗?谢谢,

共有1个答案

尉迟阳煦
2023-03-14

这里的问题是你已经删除了data/目录的所有内容,包括系统键空间/表:

rm -rf /var/lib/cassandra/data/*

您不应该从备份中恢复系统表——您应该只恢复应用程序键空间/表。

此异常最可能的原因是:

ERROR [main] 2021-10-07 15:16:24,060 CassandraDaemon.java:803 - \
  Fatal configuration error org.apache.cassandra.exceptions.ConfigurationException: \
  Cannot change the number of tokens from 512 to 256

系统本地表已损坏。

如果您尝试转储system.local的其中一个SSTables的内容,您将看到它将包含512个令牌。例如:

$ sstabledump me-1234-big-Data.db
...
          { "name" : "tokens", "path" : [ "-1090765148586270517" ], "value" : "", "tstamp" : "2021-10-12T01:23:45.678Z" },
          { "name" : "tokens", "path" : [ "-1118040538640756774" ], "value" : "", "tstamp" : "2021-10-12T01:23:45.678Z" },
          { "name" : "tokens", "path" : [ "-1256255083036528868" ], "value" : "", "tstamp" : "2021-10-12T01:23:45.678Z" },
...
$ sstabledump me-1234-big-Data.db | grep -c tokens
512

一旦system.local表损坏,就没有可用的解决方法。唯一的解决办法是完全擦除所有C*目录并重新引导节点。干杯!

 类似资料:
  • 我试图在正式生产环境中对cassandra节点运行nodetool修复,但没有成功,它给出了以下错误。 **在 /10.253.189.222 中验证失败(进度:0%) DEBUG[ReadRepairStage:99093]2018-11-22 06:29:35,411 ReadCallback.java:234摘要不匹配:org . Apache . Cassandra . service .

  • 问题内容: 我正在用Java为具有特定脚本功能的领域特定语言编写解释器。我已经实现了解析器,现在需要做一个后端。为此,我正在考虑编写自己的解释器(使用抽象语法树或某些自定义字节码)或目标JVM(在运行时发出并执行Java字节码)。 对此领域有更多经验的人可以说针对JVM的方法可行吗?您建议使用哪些库来发出Java字节码? 问题答案: 这是使用ObjectWeb ASM(我推荐的一个库)构成的一个有

  • 问题内容: 考虑一下elasticsearch.yml中的以下设置 当前设置:说,我有3个数据节点。现在,如果我决定重新启动数据节点(由于设置上的微小更改),则根据期望的data_nodes设置,恢复将在节点重新启动后立即开始。将有许多未分配的分片,这些分片将根据包含的数据缓慢分配。 为了避免这种情况,有没有办法将所有未分配的分片分配到特定节点?(在我的情况下是重新启动的节点),一旦完成,ES应该

  • 我编写了一个通用管道,它接受几个参数,以便将预定义GitHub存储库中的版本部署到特定节点。我想将这个管道托管在GitHub上的Jenkinsfile上,所以我将作业配置为使用“来自SCM的管道脚本”。事实是,当我尝试构建作业时,Jenkinsfile在每个节点上都被签出。是否可以仅在主节点上签出和执行Jenkinsfile,并按预期运行管道? 编辑:正如我之前所说,管道工作得很好,并且按照预期将

  • 我在cassandra集群中添加了一个新节点(新节点不是种子节点)。现在我的集群上有3个节点: 我的复制因子为3: 我还尝试更改该选项,但数据仍然没有复制到新节点:auto_bootstrap:true 你能帮我理解为什么数据没有在新节点上复制吗? 请让我知道,如果你需要从我的配置进一步的信息。 谢谢你的帮助

  • 前面所讲,都是将工作丢到后台去运行,那么,有没有可以将后台工作拿到前台来执行的办法呢?答案是肯定的,使用  fg 命令即可。 fg 命令用于把后台工作恢复到前台执行,该命令的基本格式如下: [root@localhost ~]#fg %工作号 注意,在使用此命令时,% 可以省略,但若将 全部省略,则此命令会将带有 + 号的工作恢复到前台。另外,使用此命令的过程中, % 可有可无。 例如: [roo