关键问题的 Datastax 不匹配
Datastax Mismatch for Key Issue
我们当前的设置包含具有 3 个节点的 DSE 5.0.2 版本cluster.Currently我们面临重负载和节点故障的问题issue.Debug.log详情如下:
DEBUG [ReadRepairStage:8] 2016-09-27 14:11:58,781 ReadCallback.java:234 - 摘要不匹配:
org.apache.cassandra.service.DigestMismatchException:密钥 DecoratedKey 不匹配(5503649670304043860、343233)(45cf191fb10d902dc052aa76f7f0b54d vs ffa7b4097e7fa05de794371092c51c68)
在 org.apache.cassandra.service.DigestResolver.resolve(DigestResolver.java:85) ~[cassandra-all-3.0.7.1159.jar:3.0.7.1159]
在 org.apache.cassandra.service.ReadCallback$AsyncRepairRunner.run(ReadCallback.java:225) ~[cassandra-all-3.0.7.1159.jar:3.0.7.1159]
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77]
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77]
在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_77]
我是从您发布的错误的含义角度来回答这个问题的。但是,我认为仅此一项不会导致您出现问题。如果没有看到集群中节点的所有日志,很难判断。
你发的Digest mismatch
其实是来自读修。此文档 link 对其进行了较高级别的解释(注意与文档所说的相反,读取修复也可能在其他 CL 处阻塞):
https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesReadRepair.html
如果您看到太多读取修复并且您有多个 DC,您可能需要考虑将 read_repair_chance
设置得更低并增加 dclocal_read_repair_chance
,默认情况下,它们分别为 0.1 和 0,所以并不总是最优化。
我已经看到这些导致读取超时,因为摘要不匹配会导致阻塞读取修复。如果您认为这会导致问题,您最好的选择是 运行 cqlsh 中带有跟踪的查询或使用概率跟踪来记录您可以在回顾时查看跟踪的查询
文档links:
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/tracing_r.html
https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsSetTraceProbability.html
我们当前的设置包含具有 3 个节点的 DSE 5.0.2 版本cluster.Currently我们面临重负载和节点故障的问题issue.Debug.log详情如下:
DEBUG [ReadRepairStage:8] 2016-09-27 14:11:58,781 ReadCallback.java:234 - 摘要不匹配: org.apache.cassandra.service.DigestMismatchException:密钥 DecoratedKey 不匹配(5503649670304043860、343233)(45cf191fb10d902dc052aa76f7f0b54d vs ffa7b4097e7fa05de794371092c51c68) 在 org.apache.cassandra.service.DigestResolver.resolve(DigestResolver.java:85) ~[cassandra-all-3.0.7.1159.jar:3.0.7.1159] 在 org.apache.cassandra.service.ReadCallback$AsyncRepairRunner.run(ReadCallback.java:225) ~[cassandra-all-3.0.7.1159.jar:3.0.7.1159] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_77] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_77] 在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_77]
我是从您发布的错误的含义角度来回答这个问题的。但是,我认为仅此一项不会导致您出现问题。如果没有看到集群中节点的所有日志,很难判断。
你发的Digest mismatch
其实是来自读修。此文档 link 对其进行了较高级别的解释(注意与文档所说的相反,读取修复也可能在其他 CL 处阻塞):
https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsRepairNodesReadRepair.html
如果您看到太多读取修复并且您有多个 DC,您可能需要考虑将 read_repair_chance
设置得更低并增加 dclocal_read_repair_chance
,默认情况下,它们分别为 0.1 和 0,所以并不总是最优化。
我已经看到这些导致读取超时,因为摘要不匹配会导致阻塞读取修复。如果您认为这会导致问题,您最好的选择是 运行 cqlsh 中带有跟踪的查询或使用概率跟踪来记录您可以在回顾时查看跟踪的查询
文档links:
https://docs.datastax.com/en/cql/3.3/cql/cql_reference/tracing_r.html
https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsSetTraceProbability.html