在 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 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
...