我们正在虚拟机上的特定集群中运行启用了 cassandra 和 SolR 的 DSE 3.2.2 集群、3 个节点和 2 的复制因子。
使用具有默认一致性级别(最近更改为仲裁)的 java 客户端将数据直接写入 c*。
问题在于,查询索引时找到的文档数量变化很大。因此,对某些数值使用统计组件也会产生不一致的结果。
如果当前没有写入数据,也会出现这种情况。此后,我手动触发了该列族上的节点工具修复,这触发了二级索引的重新索引(大约需要 5-6 小时)。之后,结果仍然不一致。
在我们的用例中,过时几秒钟的数据不是问题,因此 the workaround via session stickyness没有为我解决这个问题。问题是数据在几天后仍然不一致。
接下来是 complete re-index with wiping the data已在列表中,但需要一些时间才能完成。
更新:我将升级到最新版本的 C* 和 DSE,而不是删除和重新索引,然后运行修复,然后运行重新索引并尽快返返回告(至少几天) .
非常感谢任何有关查询不一致的建议或分享经验!
更新#1
查询结果仍然不一致。每个节点似乎都为我的查询返回不同数量的文档。 集群已升级到 4.5.1,sstables 已升级,已执行修复,并且已使用 SolR GUI 的完整重新索引触发器重建了整个 SolR 索引。
数据源表仍使用“旧”紧凑存储选项。
更新#2
在最新的评论之后,我不确定是否同时运行了进一步的插入。所以我确保推迟任何插入,运行nodetool修复,完全重建索引。
查询似乎没问题! 这似乎意味着在我上次尝试之后不一致已经重新出现,并且是重建索引后一些插入的结果。我将尝试确认是否再次开始插入。
更新 #3 看来事情又稳定了!升级似乎最初已经解决了问题,但由于changed default transport from tcp to http的问题我们在日志文件中发现,不一致之处仍然存在。两天前切换回http,修复并重新索引。所有插入都没有任何问题。谢谢您的帮助!我稍后会研究 tcp<->switch。
最佳答案
长期索引不一致主要是由 Cassandra 节点上的“丢弃突变”引起的:当由于满足所需的 CL 而向客户端正确确认写入时会发生这种情况,但某些“超出 CL”的节点实际上并未这样做写它,这意味着他们也没有索引它。
这种不一致由 Cassandra 通过读取修复和提示切换自动解决,但也可能需要手动节点修复;无论如何,重新索引没有帮助,因为不一致首先出现在数据库级别。
从 3.2.5 开始的 DSE 版本应包含 Cassandra 错误修复,可大大减少丢失的突变:https://issues.apache.org/jira/browse/CASSANDRA-6510
请告诉我们您的 DSE 版本以及升级是否有帮助。
关于solr - DSE SolR 查询结果不一致结果集不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018710/