运行nodetool decommission后丢失数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行nodetool decommission后丢失数据相关的知识,希望对你有一定的参考价值。

我有一个3节点集群,在不同的区域中有1个种子和节点。全部使用GoogleCLoudSnitch在GCE中运行。

我想更改每个节点上的硬件,所以我开始在一个完全连接到集群的不同区域添加一个新种子。然后我开始使用“nodetool decommission”,完成后我删除了节点,并且“nodetool status”表明节点不在集群中。我为所有节点做了这个,最后我在不同区域的“额外”种子上做了这个,只是为了删除它以回到3节点集群。

我们丢失了数据!可能是什么问题?我看到一个突击队,“nodetool rebuild”,我跑了,实际上得到了一些数据。 “nodetool cleanup”也没有帮助。我应该在“退役”之前运行“nodetool flush”吗?

在运行“退役”时,大多数键空间都有..

{'class' : 'NetworkTopologyStrategy', 'europe-west1' : 2}"

我是否应该首先更改密钥空间以包含新的区域/数据中心,这将是“'europe-west3':1”,因为该数据中心中只存在一个节点?我还注意到群集中的一些键空间有误。

{ 'class' : 'SimpleStrategy', 'replication_factor' : 1 }

这会导致数据丢失吗?似乎是在“SimpleStrategy密钥空间”中数据丢失了。

答案

(免责声明:我是ScyllaDB员工)

您是否第一次添加新节点以替换您要停用的节点并相应地配置了密钥空间复制策略? (您只在描述中提到了新的种子节点,但没有提到您是否为其他节点执行了此操作)。

您的数据丢失很可能是以下结果:

  • 不改变键空间以包含具有适当复制策略和复制因子的新区域/区域。
  • 配置了简单策略(无netwrok感知)复制策略和复制因子1的Keyspace。这意味着数据仅存储在1个节点中,一旦该节点关闭并退役,您基本上就丢失了数据。

您是否有机会拍摄快照并将其存储在群集之外?如果你这样做,你可以尝试恢复它们。

我强烈建议您查看这些程序,以便更好地理解并执行您希望执行的过程的正确方法:

以上是关于运行nodetool decommission后丢失数据的主要内容,如果未能解决你的问题,请参考以下文章

运行 nodetool cleanup 时出现 java.lang.ClassCastException 和 java.lang.AssertionError

nodetool gcstats“GC回收(MB)”值高

Cassandra内建的工具nodetool - 监控篇

如何在 python 中执行 nodetool status 命令?

Doris decommission be节点卡住

“nodetool repair”操作有多贵?