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



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

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

以下是我按顺序执行的操作:

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

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

我尝试使用CONSISTENCY ALLcqlsh上运行查询,但问题仍然存在。

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

是否有任何程序可以找出造成这种情况的根本原因?

我目前正在运行"nodetool repair",但我怀疑这是否能解决问题,因为我尝试了Consistency ALL。

非常感谢您的帮助!

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

您可以通过查看加载数据时的日志来验证这一点,尤其是删除的突变。您也可以检查nodetool netstats的输出。如果您看到了阻塞读取修复,这是副本不同步的另一个确认。

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

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

最新更新