2013-09-30 59 views
1

我有一個4節點羣集,並且已將所有節點從舊版本升級到Cassandra 1.2.8。集羣中存在的總數據大小爲8 GB。現在,我需要在羣集的所有4個節點上啓用vNode,而無需任何停機時間。我怎樣才能做到這一點?在Cassandra中啓用vNode 1.2.8

回答

1

TL; DR;

沒有need to restart servers一旦配置已被編輯

的問題是使虛擬節點意味着大量的數據被隨機重新分配(文檔說在靜脈類似於經典的「nodetool移動」

1

conf/cassandra.yaml你需要註釋掉initial_token參數,並啓用num_tokens參數(默認爲256我相信)。這樣做對每個節點。然後,你將不得不重新啓動每個節點上的卡桑德拉服務。並等待d ata在整個集羣中重新分配。 8 GB應該不會花費太多時間(假設您的節點都在同一個羣集中),並且讀取請求仍然可以正常工作,但在數據重新分配完成之前,您可能會看到性能下降。

編輯:這是遷移數據的潛在戰略:

  • 退出運行兩個集羣的節點。令牌空間應該在其他兩個節點之間分配50-50。
  • 在兩個退役的節點上,刪除現有數據,並使用不同的集羣名稱和啓用的num_token參數重新啓動Cassandra守護程序。
  • 將8 GB數據從舊羣集遷移到新羣集。你可以在Python中編寫一個快速腳本來實現這一點。由於數據量足夠小,這不應該花費太多時間。
  • 一旦數據在新集羣中遷移,就會從舊集羣中取消舊的兩個節點。刪除數據並重新啓動Cassandra,其中新集羣名稱num_tokens參數。它們將自舉,數據將從新集羣中的兩個現有節點進行流式傳輸。優選地,一次只引導一個節點。

通過這些步驟,您不應該面對服務完全停止的情況。您將在一段時間內以降低的容量運行,但由於8GB不是您可能足夠快速實現這一目標的大量數據。

+0

增加num_tokens不會導致任何數據重新分配。 – Richard

+0

@Richard你是對的。我的錯。 – Nikhil

1

正如Nikhil所說,你需要增加num_tokens並重啓每個節點。這可以在沒有停機的情況下一次完成。

但是,增加num_tokens不會導致任何數據重新分配,因此您並未真正使用vnodes。你必須通過洗牌手動重新分配(通過Lyuben發佈的鏈接進行解釋,這通常會導致問題),解除每個節點的退役並引導回去(這會暫時讓你的集羣非常不平衡,一個節點擁有所有數據),或者就像創建一個新的數據中心一樣,臨時複製硬件。後者是我所知道的唯一可靠的方法,但它確實需要額外的硬件。