2017-05-30 49 views
2

我們有一個RF = 2的3節點Cassandra集羣。讀寫一致性設置爲1。我們也使用Vnodes。可以將這些節點標記爲N1,N2和N3。假設N3下降。我的印象是,無論節點何時關閉,其他節點都會存儲提示,並且每當N3出現時,提示就會發送到N3,從而確保數據在副本之間保持一致。但是,當我瀏覽文檔時,我遇到了參數max_hint_window_in_ms,默認爲3小時。所以,如果一個節點死了超過3個小時,它被認爲是永久死亡,並且沒有提示被存儲。到現在爲止還挺好。理解Cassandra中的指示性切換和數據複製

所以,我現在的理解是,如果一個節點停下來說了10個小時,那麼前3個小時的提示會在它返回時轉移到這個節點,但是這個7小時的寫入會對於這個節點會丟失。此外,如果爲特定的令牌範圍啓動讀取查詢,並且由於此節點也可以爲讀取令牌範圍的請求提供服務,它將返回空值而不是存儲在某個其他節點中的實際數據。我的理解是否正確?那麼,應該做什麼?

+0

這是被測試和行爲是意想不到的?或者,如果情景發生,您是否在尋找預期的行爲?由於您的一致性級別設置爲「1」,因此所有讀取/寫入都應成功(假設吞吐量不大)。 – daniel

+0

我想評估一下,如果我的某個節點發生故障超過3小時(默認值爲max_hint_window_in_ms),那麼行爲將會是什麼。 – Ankush92

回答

2

那麼應該做什麼?

該文檔指出,當您將向下節點(N3)帶回時,您必須對其運行修復。

儘管如此,在我們的大多數羣集中,我發現簡單地移除節點(當它停止時)會更容易,然後將其重新引導到羣集中。這通常比計算Merkle樹和修復數據流更快。但是,如果每個節點沒有大量數據(比如小於20GB),那麼運行修復應該不會太痛苦。

+0

我想你是對的。我們每個節點的數據量大約爲100 gb,每天增長約5-10 gb。修理相當痛苦。必須讓他們過夜。但是由於暗示的切換是修復過程的一部分,並且它們僅保留3小時(默認值),即使在維修之後,我們是否仍然會在3小時後丟失數據? – Ankush92

+1

@ Ankush92不,您的RF = 2確保至少會有一個副本被寫入。修復/引導時,目標節點將使用該副本向其傳輸數據。 – Aaron