2017-08-07 70 views
2

我們正在運行多個運行Cassandra的Kubernetes羣集。 我們通常的做法是在進行Cassandra pod的滾動重新啓動時登錄每個並提交nodetool drain,然後觸發該pod的重新創建。但經常當豆莢重新啓動時,我們得到如下錯誤:爲什麼我的Cassandra提示文件不斷被破壞

ERROR [HintsDispatcher:2] 2017-08-07 11:09:32,489 HintsDispatchExecutor.java:243 - Failed to dispatch hints file 5fdd139d-4465-4825-85ef-f380bddcb67d-1502100535128-1.hints: file is corrupted ({}) 

這些損壞的文件阻止Cassandra啓動。有沒有辦法告訴Cassandra刷新所有緩衝區,並在停止之前停止寫入,以確保沒有損壞的文件被遺留?

+0

包括C *版本請 –

回答

2

你可以嘗試禁用暗示切換,或嘗試後瀝乾截斷提示:

nodetool truncatehints

如果你關心的一致性,處理後進行修復。

警告:如果您正在使用任何一致性設置或RF = 1,這可能會導致一些數據丟失。

+0

有可能出現這種情況,這可能會導致不一致或在某些最壞的情況下數據丟失, –

+1

您對錯誤是正確的。關於數據丟失首先取決於一致性設置以及羣集的處理方式。如果在rf> = 3的法定運行中運行,並且在排空節點的情況下執行滾動重新啓動,則數據丟失幾乎是不可能的。其次,在運行集羣數據丟失時,由於禁用了hinted handoff,只有在使用「ANY」一致性時纔可能發生數據丟失推薦與Cassandra合作的方式。 – nevsv

+0

你的權利,它不應該,但不知道他們的版本/用例是最壞的情況下可能的。刪除諸如提示和提交日誌之類的東西應該通過個別用例進行徹底的思考。我想聽到他們使用的版本,但升級修復(https://issues.apache.org/jira/browse/CASSANDRA-12728)_may_會更安全。 –