将数据迁移到新集群后,Cassandra集群中的数据不一致

时间:2020-07-27 06:36:52

标签: cassandra cqlsh cassandra-3.11

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

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

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

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

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

我尝试使用cqlshCONSISTENCY ALL上运行查询,但是问题仍然存在。

我错过了之前和之后要考虑的重要步骤吗?

是否有任何程序可以找出导致此问题的根本原因?

我目前正在运行"nodetool repair" ,但我怀疑在使用Consistency ALL时能否解决此问题。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

您可以通过在加载数据的同时查看日志来验证这一点,尤其是对于丢失的突变。您还可以检查nodetool netstats的输出。如果您看到阻止读取修复,那就是另一个确认,表明副本不同步。

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

[EDIT]根据下面的评论,听起来您可能没有使用sstableloader从源群集中所有节点上加载快照。如果您错过了将SSTables加载到目标群集的操作,那么就可以解释为什么数据丢失了。