首页 > 解决方案 > 将数据迁移到新集群后,Cassandra 集群中的数据不一致

问题描述

将数据移动到新集群后,我发现一些数据不一致。

旧集群总共有 9 个节点,每个节点上都有 2+ TB 的数据。新集群与旧集群具有相同的节点集,并且配置相同。

这是我按顺序执行的操作:

  1. nodetool snapshot.
  2. 将该快照复制到目标
  3. 在目标集群上创建了一个新的键空间。
  4. 用于sstableloader加载的实用程序。
  5. 重新启动所有节点。

成功完成传输后,我运行了几个查询来比较(旧集群与新集群),发现新集群不一致,但我看到的数据正确分布在每个节点上(nodetool status)。相同的查询为某些分区返回不同的结果集,我第一次得到零行,第二次得到 100 行,200 行,最终它对于少数分区和记录计数与旧集群匹配变得一致。
新集群中很少有分区没有数据,而旧集群有这些分区的数据。

cqlsh我尝试在with上运行查询,CONSISTENCY ALL但问题仍然存在。

我是否错过了之前和之后需要考虑的任何重要步骤?

是否有任何程序可以找出其根本原因?

我目前正在跑步"nodetool repair" ,但我怀疑这是否可以解决,因为我尝试使用 Consistency ALL。

非常感谢您的帮助!

标签: cassandracassandra-3.0cqlsh

解决方案


结果最终变得一致的事实表明副本不同步。

您可以通过查看加载数据时的日志来验证这一点,特别是对于丢弃的突变。您还可以检查nodetool netstats. 如果您看到阻止读取修复,这是副本不同步的另一个确认。

如果您还有其他可以测试的分区,请TRACING ON在查询时在 cqlsh中启用CONSISTENCY ALL. 您将看到跟踪输出中是否存在摘要不匹配,这也应该触发读取修复。干杯!

[编辑] 根据您在下面的评论,听起来您可能没有使用sstableloader. 如果您错过了将 SSTables 加载到目标集群,那么这可以解释为什么数据丢失了。


推荐阅读