卡桑德拉1.2和虛擬節點之前,您必須添加新節點後的數據做自己的再分配。
如果兩個節點是目前均衡即,具有各環的50%,則該令牌將是
node1: 0
node2: 85070591730234615865843651857942052864
(或移位,但我假設節點1具有令牌0)。節點2的令牌是2^127/2。你想結束於
node1: 0
node2: 567137278201564105772291
node3: 113427455640312821154458202477256070484
其中node2的標記是2^127/3,而node3是(2^127/3)* 2。你需要做的是引導節點3,並將initial_token設置爲上面的令牌。這從node1複製數據,因爲node3的令牌先於node1's(令牌環繞)。
現在,節點3將有數據的1/6,節點2仍然有1/2和節點1將存儲的1/2,但只負責三分之一。您現在可以在node1上運行'nodetool cleanup'來移除它複製到node3的數據。這會將節點1的數據減少到大約677MB。
現在您需要將node2的令牌移動到其最終位置。這會將數據從節點2複製到節點3,從而使節點3達到數據1/3的配額,大約爲667 MB。現在,您可以在node2上運行'nodetool cleanup'以刪除剛剛複製到node3的數據。現在重新平衡已經完成。
這意味着在重新平衡期間,任何節點都不會存儲超過1 GB的數據。
一般來說,如果你有更多的節點或更高的複製因子,你總是可以做再平衡,而不如果在節點上的每個舉動剛搬來後運行清理增加存儲在任何現有節點的數據。最後,如果您擁有Cassandra 1.2和虛擬節點,可以隨機選擇令牌,只要添加新節點就可以實現均勻加載,而不需要任何重新平衡(手動或自動)。這不僅更簡單,而且還可以節省數據的一小部分複製數據以添加一個節點。
您正在使用哪種卡桑德拉版本?如果1.2,你有什麼設置num_tokens? – Richard 2013-04-25 10:42:30
我正在使用1.1.9 – odiszapc 2013-04-26 00:13:13