Cassandra

如果 2 個 Cassandra 節點在 RF=2 時出現故障,數據是否仍然可用?

  • September 8, 2022

我是C *的新手,所以任何人都可以幫忙。假設在我的環境中有一個由 6 個節點組成的集群和一個 RF=2 的密鑰空間。有一天,六分之二的節點出現故障,所以我可以從其他 4 個節點獲取數據(也許)我失去了兩個節點上的一些條目的數據),如何做到這一點?

謝謝。

答案取決於幾個因素,但主要取決於兩個不可用節點是否是彼此的“鄰居”。讓我用一個例子來說明。

考慮具有以下令牌分配的集群:

  • node1擁有令牌範圍 0-9
  • node2擁有 10-19
  • node3擁有 20-29
  • node4擁有 30-39
  • 等等

回想一下,副本儲存在“鄰居節點”上,因此RF=2,數據node1複製到node2(其鄰居),node2數據複製到node3等等。

假設我們要檢索由user = 'alice'擁有的數據node1。以下是可能的情況:

  1. 如果我們以一致性級別LOCAL_QUORUM(2 個副本必須響應)進行查詢,並且兩者node1node5關閉,那麼讀取請求將失敗,因為兩個副本(node1node2)都必須響應但只有node2可用。
  2. 如果我們使用 , 和兩者進行查詢,並且LOCAL_QUORUM兩者都關閉,那麼讀取將失敗,因為兩個副本都關閉了。node1``node2
  3. 如果我們使用LOCAL_QUORUM, 和兩者進行查詢,node3並且node4都關閉(不是數據的所有者),那麼讀取請求將返回數據。
  4. 如果我們查詢LOCAL_ONE並且協調器選擇node1但它已關閉,則讀取請求將失敗。沒關係,node2因為使用LOCAL_ONE,只會查詢一個節點。
  5. 如果我們用 查詢LOCAL_ONE,協調器選擇node1,並且node2關閉,數據將被返回。沒關係,node2因為只會查詢一個節點(node1)。

如果您想了解有關讀取和一致性級別的更多資訊,請參閱以下文件:

乾杯!

在一個有 6 個節點的集群中,當 2 個節點宕機時,其 keyspace 的 RF=2,可以查詢剩餘 4 個節點的數據嗎?

因此,在 6 節點集群中 RF=2(節點數量並不重要),所有數據的兩個副本將分佈在這些節點周圍。每個節點都有自己的主要令牌範圍,以及一組輔助範圍以保存來自其他節點的額外數據副本。

在上述場景中,可能存在在這兩個節點上都有其主副本和輔助副本的數據分區。因此,在 RF=2 和 2 個節點停機的情況下,Cassandra 無法再保證 100% 的數據可用性。

剩下的 4 個節點仍然可以提供它們的數據。但是,對於 2 個“DN”節點的令牌在主要和次要範圍內的數據的請求將失敗。

引用自:https://dba.stackexchange.com/questions/316597