环境:具有多个区域的C* 3.x,其中每个区域具有10个节点。
我们观察到了几种数据不一致的情况。除非设置了一致性,否则在一个数据中心中无法找到大约1K行(在500+K行中)(而在另一个数据中心中可以找到)。
我根据documentation理解Frequent data deletions and downed nodes are common causes of data inconsistency
我们随机检查一些项目,我们从不对它们执行删除。我们相信这对大多数行都是正确的。因此,我们想知道不一致数据可能的其他原因是什么,以及除了定期修复外,我们如何防止它。
1条答案
按热度按时间rbpvctlc1#
因此,如果您确定没有执行删除操作,则导致数据不一致的其他主要原因是:
gc_grace_seconds
设置得太低或设置为零。使用TTL,您需要确保给tombstone一个复制的机会。这就是
gc_grace_seconds
默认为864000秒(10天)的原因。如果该值太低,tombstone被标记为删除得太快。因此,tombstone * 后面 * 的数据会重新出现。在原地更新和时钟不同步的情况下,新写入的数据是有效的,并且被复制,但是
WRITETIME
比一个或多个节点的系统时钟落后太多。这意味着新写入的数据将不会生效,直到系统时间〉=数据的WRITETIME
。您还可能遇到这样一种情况:所涉及的DC受到大量写入的冲击,导致写入背压逐渐增大到写入被丢弃的程度。如果您看到一个或多个节点出现CPU或磁盘I/O峰值,则可能发生了这种情况。
最后一点,如果您的节点经常出现故障,那么它们的邻居节点将建立提示。这可能发生在网络连接/路由不好的情况下,使一些节点对其他节点“出现”故障。在任何情况下,这些提示都会在3小时后自动停止收集。此设置可以通过cassandra. yaml中的
max_hint_window
进行配置。无论哪种情况,不一致的数据都不会自行发生,它通常是另一个问题的症状。
**TL DR;**检查:
gc_grace_seconds
。