[英]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.