幫助理解 Cassandra 中的提示切換和數據複製
我們有一個 RF = 2 的 3 節點 Cassandra 集群。讀寫一致性設置為 ONE。我們也在使用 Vnodes。讓我們將這些節點標記為 N1、N2 和 N3。假設 N3 出現故障。我的印像是,每當一個節點出現故障時,其他節點都會儲存提示,而每當 N3 出現時,提示就會發送到 N3,從而確保數據在副本之間保持一致。但是,當我瀏覽文件時,我遇到了預設為 3 小時的參數 ‘’。因此,如果一個節點死亡超過 3 小時,則認為它是永久死亡並且不儲存任何提示。到目前為止,一切都很好。
所以,我現在的理解是,如果一個節點關閉了 10 個小時,那麼前 3 個小時的提示將在它恢復時轉移到這個節點,但是這 7 個小時的寫入將因此失去節點。此外,如果針對特定令牌範圍觸發讀取查詢,並且由於該節點也有資格為令牌範圍的讀取請求提供服務,則它將返回 null 而不是儲存在某個其他節點中的實際數據。我的理解正確嗎?那麼,應該怎麼做呢?
您的理解是正確的,超過預設的 3 小時後,不再儲存提示。這是為了避免其他活動節點長時間過載。
如果任何節點碰巧宕機的時間超過了hint_window,則絕對有必要重建節點,甚至從其數據目錄中刪除所有文件並讓它作為一個全新的節點引導。如果您要啟動同一個節點,則可能必須使用 replace_address。
如果您使用預設的提示切換週期(3 小時)並且您的節點停機時間超過了,那麼將不會為該節點儲存任何提示。假設它在您提到的 10 小時後上線,那麼您必須在它上線後立即進行全面修復,但是如果它停機超過 2-3 天,修復將有大量數據流,並可能導致一些意外問題,所以考慮在從 down 節點刪除所有 data/saved_caches 和送出日誌文件後進行重建/引導。話雖如此,在一致性 ONE 的情況下,失去數據的可能性很高,如果您在修復完成之前查詢節點,它可能會返回陳舊或 null,因為數據從未寫入它,也沒有通過修復傳播。