2013-07-12 21 views
3

定期運行我的Cassandra節點上的nodetool repair是否會使它們癱瘓?「nodetool修復」操作的價格是多少?

Planet Cassandra FAQ筆記(強調),該

反熵節點修復 - 對於數據未頻繁地讀取,或對已經下較長時間的節點,在該節點上更新數據修復過程(也稱爲反熵修復)確保副本上的所有數據都保持一致。節點修復(使用nodetool實用程序)應作爲常規集羣維護操作的一部分常規運行。

這是我見過的定期運行nodetool repair的唯一參考。定期運行它不會是一個問題,如果它很便宜,但它有多昂貴?它是否等同於節點上每個記錄的一致性檢查讀取?還是比這更聰明?文檔中提到了Merkle樹的使用,但是這並不能讓我知道操作有多昂貴。

如果節點上有500 GB的數據,並且該節點實際上與其他節點一致(修復是無操作),則修復從磁盤讀取的數據量(讀取所有500 GB需要幾個小時)?關於通過局域網發送多少數據(通過局域網發送所有500 GB可能需要一個小時左右)。

回答

15

某些用例比其他用例更依賴於定期修復。如果您執行的刪除次數少於ConsistencyLevel.ALL,那麼您應該運行修復以確保刪除的列不會恢復正常。如果你不刪除,你可以依靠暗示的切換和閱讀修復來保持在很多情況下的一致性。如果您讀寫密度較低,或者經常發生服務器停機或超載,則可能需要運行修復。

通過全部讀取您所運行的節點上的數據(可選地,使用-pr(主要範圍)選項,僅限於節點擁有主要範圍的範圍)並建立梅克爾樹。它還會向所有存儲這些範圍的副本的所有節點發送消息,以執行相同的操作 - 它們只會讀取在初始修復節點上覆制的數據。

要在具有500 GB的節點上構建Merkle樹,將讀取完整的500 GB(使用-pr時,它將大致是複製因子較低的因素)。但是,Merkle樹的大小是恆定的(幾MB),所以如果節點同步,通過網絡發送的數據非常少。

運行計劃修復的最佳方式是依次在每個節點上使用-pr運行。這避免了多次修復相同的數據。另外,只能同時在一個節點上運行,以避免給羣集帶來額外負擔。

+1

您可否詳細說明「刪除的列回覆生活」部分?你是否在談論刪除的列在刪除發生後持續出現一段時間,或者說Cassandra的「最終一致性」如果不使用'ConsistencyLevel.ALL'實際上不起作用?我的理解是,即使使用'ConsistencyLevel.ANY',刪除應該最終在整個羣集中傳播,因爲更改總是會最終傳播。那是不正確的? – aroth

+0

@aroth你有沒有得到上述查詢的答案? – Naresh

+0

@Naresh - 不,不過,我一直在生產中使用較低的一致性水平,並且在實踐中沒有觀察到任何此類問題。當然,這是一個軼事,一個樣本大小,並不意味着壞事不能/不會發生。所以拿一粒鹽吧。 – aroth