在 Cassandra 修理

Cassandra 反熵修理:

Cassandra 的抗熵修复有两个不同的阶段。要进行成功的高效维修,了解这两者非常重要。

  • Merkle Tree 计算 :计算节点及其副本之间的差异。

  • 数据流 :根据 Merkle Tree 计算的结果,数据被安排从一个节点流式传输到另一个节点。这是尝试在副本之间同步数据。

停止修复

你可以通过从 nodetool 发出 STOP VALIDATION 命令来停止修复:

$ nodetool stop validation

我怎么知道维修何时完成?

你可以通过检查 nodetool compactionstats 来检查修复的第一阶段(Merkle Tree 计算)。

你可以使用 nodetool netstats 检查修复流。修复流也将在你的日志中可见。你可以在系统日志中为他们提供如下所示:

$ grep Entropy system.log

INFO [AntiEntropyStage:1] 2016-07-25 07:32:47,077 RepairSession.java (line 164) [repair #70c35af0-526e-11e6-8646-8102d8573519] Received merkle tree for test_users from /192.168.14.3
INFO [AntiEntropyStage:1] 2016-07-25 07:32:47,081 RepairSession.java (line 164) [repair #70c35af0-526e-11e6-8646-8102d8573519] Received merkle tree for test_users from /192.168.16.5
INFO [AntiEntropyStage:1] 2016-07-25 07:32:47,091 RepairSession.java (line 221) [repair #70c35af0-526e-11e6-8646-8102d8573519] test_users is fully synced
INFO [AntiEntropySessions:4] 2016-07-25 07:32:47,091 RepairSession.java (line 282) [repair #70c35af0-526e-11e6-8646-8102d8573519] session completed successfully

也可以使用此(Bash)命令监视活动修复流:

$ while true; do date; diff <(nodetool -h 192.168.0.1 netstats) <(sleep 5 && nodetool -h 192.168.0.1 netstats); done

参考: 我怎么知道 nodetool 修复是否完成

如何检查卡住或孤立的修复流?

在每个节点上,你可以使用 nodetool tpstats 监视此情况,并检查 AntiEntropy 行上的阻止内容。

$ nodetool tpstats
Pool Name                    Active   Pending      Completed   Blocked  All time blocked
...
AntiEntropyStage                  0         0         854866         0                 0
...
AntiEntropySessions               0         0           2576         0                 0
...