配置 Cassandra 以實現跨多個數據中心的一致性
目前,我們在兩個數據中心的每一個中執行一個 4 節點 Cassandra 環。我們想將它們重建成一個 8 節點的環。在其他條件相同的情況下,我們真的很想獲得一致的讀取,因此我們目前執行 QUORUM 讀取和寫入。但是,如果我們失去了一個數據中心,這似乎會導致許多或所有請求由於無法滿足 ConsistencyLevel 而失敗。由於我們計劃向兩個數據中心發送請求,因此切換到 LOCAL_QUORUM 不足以保證一致性。
Cassandra 似乎嚴重缺少僅針對可用節點測量的 ConsistencyLevel 設置。
在這種情況下,如何才能在沒有可用性故障的情況下獲得最大的一致性,以及必須權衡什麼才能獲得它?
您可以在正常操作中使用 QUORUM 讓您的應用程序讀/寫,然後在 DC 故障的情況下故障轉移到 LOCAL_QUORUM。這是您必須自己完成的事情,因為 Cassandra 不會自動執行此操作。或者,如果 DC 出現故障,您可以在打開它以進行讀/寫訪問之前執行 nodetool 修復。顯然,多 DC 場景中的 QUORUM 可能意味著您將遇到延遲問題,具體取決於它們之間的管道,但這是您必須權衡的權衡。
這根本不可能。當您的網路發生分區(即數據中心之間的鏈路斷開)然後又重新連接在一起時,您將如何協調在中斷期間每個數據中心內所做的更改?我要特別詢問兩個數據中心中已更改的記錄。
Cassandra 似乎嚴重缺少僅針對可用節點測量的 ConsistencyLevel 設置。
有一個原因是,在分佈式系統中,諸如 ConsistencyLevel 和 quorum 之類的事情由管理員進行規劃,而不是由系統自動決定。如果他們這樣做了,那麼(再次使用您的範例)您可以將 2 個相鄰節點分區,並且這 2 個節點將決定它們具有仲裁,並且將與其餘節點不一致。