2017-01-16 24 views
0

我想了解如何在Cassandra中的多個節點上覆制數據。假設我們有6個節點,複製因子是3.爲了簡單起見,我們假設單個數據中心和單個機架。由於RF是3,數據存儲在3個副本中。我想了解3副本是如何決定的。節點如何決定在Cassandra中進行復制

參考http://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2中的例子(第一幅圖像的第二部分,即虛擬節點),假設我們的行落在由分區器決定的虛擬節點'E'下。所以根據虛擬節點在不同節點間的分佈情況,該節點必須出現在節點1,5,6中。

但是即使在SimpleStrategy的簡單情況下,它也會提到文檔 - http://docs.datastax.com/en/cassandra/2.1/cassandra/architecture/architectureDataDistributeReplication_c.html,節點上的第一個副本由分區器決定。其他副本順時針放置在下一個節點上。那麼數據將存儲在E,F,G虛擬節點中還是可能是節點1,2,3?

哪一個是正確的?第一個鏈接或文檔?

謝謝!

回答

1

一個你的分區的數據結束了它是否真的感興趣,你的集羣中,你可以使用:

nodetool getendpoints 

https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsGetEndPoints.html

請考慮該文件被簡化帳戶讓人們瞭解它時更容易第一次見。實際上,它在類固醇上一致哈希。

以前,每個節點都有一個令牌,而令牌是用於一致散列的環上的邊界。基本上你有一個完整的範圍劃分成你在集羣中擁有的節點數量。當你需要在某個分區上進行操作時,你需要使用分區鍵,對其進行散列,然後知道要去哪個節點。基本上在哈希後,你得到一個在-2^63到2^63 - 1範圍內的數字。然後你在環上順時針旋轉,直到你「找到」一個標記,這就是你最初知道分區屬於哪個節點的方式。如果您擁有更大的複製因子,則只需在環上繼續順時針旋轉,直到找到滿足複製因子所需的所有節點。這就是您如何知道羣集中的哪些節點具有您的分區。

虛擬節點有一個屬性num_tokens,每個節點在加入環時選擇許多隨機令牌(前面提到的範圍內),然後將它們用於一致性散列。基本上,每個節點都會看到新節點想要擁有環的一部分並將數據流傳輸給它。同樣,當新的寫入進來時,它們被髮送到將要擁有它們的新節點(直到節點完全加入該環,當計算一致性級別時,其響應被忽略)。

這是它是怎麼之前(在集羣的每個節點單令牌): Standard Consistent Hashing

這是環如何看起來像虛擬節點: Consistent Hashing with vnodes

絕對適用同樣的規則與虛擬節點和普通的一致性哈希,你繞圈選擇 的副本。如果您在迴環時再次遇到同一個節點,則只需跳過它並繼續,直到找到所有擁有數據的節點,並根據所需的複製因子。

+0

謝謝。讓我試試命令回到你身邊。 – mac

+0

沒問題,希望我幫忙;) –

+0

你是否試過命令,是否有效? –

1

兩者都是正確的,但我可以理解混淆。 讓我解釋一下:

在這種情況下,你的行落入一定的範圍。分區器知道一個節點主要負責這個範圍。它不知道其他節點。但是它可以基於第一個節點推斷其他節點。

在這種情況下,第一個節點是五。它擁有令牌範圍E.現在讓我們思考這個聲明。

附加複製品被放置在順時針環上的下一個節點上。

如果您使用SimpleStrategy,則從第一個節點順時針選擇下一個節點。在這種情況下是六個和一個。 選擇了一個是因爲令牌範圍從最大值到最小值迴繞。

請注意,節點是順時針排列的。五,六,最後一個。當令牌範圍從最大值到最小值迴繞時。

這是第一個鏈接中的圖片試圖通過給3個節點E令牌範圍來解釋。有些節點負責這個令牌範圍,因爲它們從早期節點繼承行。他們負責某些範圍,因爲他們是在下一個線。

+0

我假設你是指第一個圖像,第二部分(與虛擬節點)。如果是這種情況,虛擬節點E落入節點1,5,6,並且虛擬節點B落入節點1,4,6。假設環中的節點按1,2,3,4,5,6順序排列。現在如果一行落在虛擬節點E之下,它將被複制到節點1,5,6。但是如果它落在虛擬節點B之下,它將按照第一個鏈接落在1,4,6之下。但它與第二個鏈接相矛盾的權利? – mac

+0

我指的是第一張圖片的第一部分。沒有vnodes的環。沒有vnodes時,主令牌範圍之後的令牌範圍由順時針方向屬於下一個節點。但是,對於vnode,所有範圍都隨機分配給節點。這意味着任何節點都可以保存下一個令牌範圍。他們接下來是因爲他們負責主令牌範圍之後的令牌範圍。 –

+0

是的,你指的是正確的「額外的副本放在下一個節點順時針環。」但我與他們給出的例子相矛盾的例子與文檔相矛盾。可能是這個例子只是爲了基本的理解。謝謝你的回答 – mac

相關問題