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