2012-07-20 79 views
5

我正在爲nodetool修復開發一個自動腳本,它將在所有6個Cassandra節點上週末執行。我們在DC1中有3個,在DC2中有3個。只是想了解最壞的情況。如果在節點工具修復之前或期間DC1和DC2之間的連接丟失或複製副本關閉,會發生什麼情況。這可能是網絡問題,網絡升級(通常在週末發生)或其他問題。我瞭解nodetool修復計算該節點上每個數據範圍的Merkle樹,並將其與其他副本上的版本進行比較。所以,如果他們之間沒有連接複製品如何將節點工具修復行爲?它真的會修復節點嗎?在所有節點啓動並且連接恢復後,是否必須重新運行節點工具修復。他們會成爲這個事件的副作用嗎?我隱藏了它,但無法找到很多細節。任何見解都會有所幫助。Cassandra副本在節點工具修復過程中關閉?

謝謝。

回答

1

假設您使用的是vnodes,默認意味着每個節點有256個範圍,但是想法是相同的。

如果網絡問題發生在nodetool修復已經啓動之後,您會在日誌中看到某些成功修復的範圍,其他範圍不成功。該錯誤會說範圍修復失敗,因爲節點「192.168.1.1已死」類似的東西。

如果網絡錯誤發生在nodetool修復開始之前,所有範圍都將失敗,並出現相同的錯誤。

在這兩種情況下,您都需要在網絡問題解決後運行另一個節點工具修復。

我不知道您在這6個節點中擁有的數據量,但根據我的經驗,如果羣集可以處理它,最好在每週的不同日期每週運行一次節點工具修復。例如,您可以在週日修復節點1,在週一修復節點2等等。如果你有少量的數據,或者一天中的增加/更新不是太多,你甚至可以每天進行一次修復。當你有一個已經修復的集羣並且你經常運行nodetool修復時,它會花費更少的時間來完成,但是如果你有太多的數據,它可能是不可能的。

關於副作用,如果您使用一致性級別1,則只能記錄數據的差異,如果碰巧對「未修復」節點運行查詢,則數據將與「已修復」 「節點。例如,可以通過將一致性級別提高到2來解決此問題,然後如果2個節點「未配對」並且使用這2個節點解析了您運行的查詢,您將再次看到差異。在這裏有一個權衡,因爲避免查詢中的這種「差異」的最佳選擇是使一致性級別=複製因子,當1個節點關閉整個羣集時,這會帶來另一個問題,您將開始接收您的查詢超時。

希望它有幫助!

1

有多個可用的修復選項,您可以根據您的應用程序使用情況選擇一個。如果您使用的是DSE Cassandra,那麼我會建議安排OpsCenter修復,通過給予持續時間小於gc_grace_seconds來進行增量修復。

以下是做修復的不同的選項:

  1. 默認(無):將修復所有3個分區範圍:1初級和2個副本通過在它被運行的節點擁有。總共涉及5個節點2個節點將固定1個分區範圍,2個節點將固定2個分區範圍,1個節點將固定3個分區範圍。
  2. -par:將並行執行上述操作。
  3. -pr:將僅修復其運行節點的主分區範圍。如果您正在使用EACH_QUORUM的寫入一致性,那麼還應使用-local選項以減少交叉DC流量。

如果您已經在生產過程中,我會建議使用選項3,以避免由於修理造成的任何性能影響。

如果您想了解更多詳細的維修信息,請看看這個here

相關問題