簡體   English   中英

Cassandra集群上的數據分區和復制

[英]Data Partitioning and Replication on Cassandra cluster

我有一個3節點的Cassandra集群,RF = 3。 現在,當我執行nodetool status時,我將集群中每個節點的擁有 nodetool status為100%。

但是當我在集群中有5個節點時,RF = 3。 擁有率為60%(大致如下圖所示)。

現在根據我的理解,分區器將計算對應於第一個副本節點的散列,並且還將根據其他節點上的RF復制數據。 現在我們有一個5節點集群,RF是3。

3個節點不應該均勻地擁有所有數據(100%),因為分區器將根據分區策略指向一個節點,然后將相同的數據復制到等於RF-1的其余節點? 這就像數據在所有節點(5)之間均勻分布,即使RF為3。

在此輸入圖像描述

編輯1

根據我的理解,每個節點擁有 60%(大約)的原因是因為RF是3.這意味着每行將有3個副本。 這意味着將有300%的數據。 現在集群中有5個節點,分區器將使用默認的隨機散列算法,該算法將數據均勻地分布在集群中的所有節點上。

但現在問題是我們檢查了我們集群的所有節點,並且所有節點都包含所有數據,即使RF是3。

編輯2

@Aaron我按照評論中的說明做了。 我創建了一個包含3個節點的新集群。

在此輸入圖像描述

我創建了一個Keyspace“測試”,並將類設置為simplestrategy,將RF設置為2。

在此輸入圖像描述

然后我創建了一個具有分區鍵(id,name)的表“emp”。

在此輸入圖像描述

現在我在第一個節點中插入了一行。

根據您的解釋,它應該只有2個節點,因為RF = 2。

但是當我登錄所有3個節點時,我可以看到所有節點中的行都被復制了。

我認為,因為密鑰空間在所有節點中被復制,因此數據也被復制。

所有權的百分比不會受到實際數據的影響(根本不會)。 您可以將新節點添加到單個節點集群(RF = 1),並且每個節點立即說出50%。

所有權百分比純粹取決於節點負責的令牌范圍的百分比。 添加節點時,將重新計算令牌范圍,但在發生流式事件之前,數據實際上不會移動。 同樣,在cleanup之前,數據實際上不會從其原始節點中刪除。

例如,如果您有一個RF節點為3的3節點集群,則每個節點將為100%。 添加一個節點(RF = 3),所有權百分比降至約75%。 添加第5個節點(同樣,保持RF = 3),每個節點的所有權正確下降到大約3/5或60%。 同樣,RF為3時,每個節點都負責一組主要,次要和第三個令牌范圍。

默認的隨機散列算法,它將數據均勻地分布在集群中的所有節點上。

實際上,使用Murmur3分區程序的分布式哈希將均勻地分配令牌范圍, 而不是數據。 這是一個重要的區別。 如果您將所有數據寫入單個分區,我保證您無法均勻分發數據。

添加它們時復制到另一個節點的數據不會自動清除 - 在將新節點添加到群集后,需要在“舊”節點上調用nodetool cleanup 這將刪除移動到其他節點的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM