我有一個4節點羣集,並且已將所有節點從舊版本升級到Cassandra 1.2.8。集羣中存在的總數據大小爲8 GB。現在,我需要在羣集的所有4個節點上啓用vNode,而無需任何停機時間。我怎樣才能做到這一點?在Cassandra中啓用vNode 1.2.8
1
A
回答
1
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不是您可能足夠快速實現這一目標的大量數據。
1
正如Nikhil所說,你需要增加num_tokens並重啓每個節點。這可以在沒有停機的情況下一次完成。
但是,增加num_tokens不會導致任何數據重新分配,因此您並未真正使用vnodes。你必須通過洗牌手動重新分配(通過Lyuben發佈的鏈接進行解釋,這通常會導致問題),解除每個節點的退役並引導回去(這會暫時讓你的集羣非常不平衡,一個節點擁有所有數據),或者就像創建一個新的數據中心一樣,臨時複製硬件。後者是我所知道的唯一可靠的方法,但它確實需要額外的硬件。
相關問題
- 1. Cassandra負載分配 - 不均勻1.2.8
- 2. 在Cassandra中添加機架是否需要集羣重新平衡? (non-vnode)
- 3. cassandra lucene索引是否可以與vnode一起使用?說num_tokens = 256
- 4. Cassandra未啓動
- 5. Cassandra未啓動
- 6. Spring Boot 1.2.8與Spring雲
- 7. Cassandra 2.1.11不在Docker容器中啓動
- 8. Inode vs Vnode的區別
- 9. 如何使用vnode刪除文件?
- 10. 無法使用Spring Boot配置CommonsMultipartResolver 1.2.8
- 11. Cassandra啓動問題
- 12. Cassandra啓動問題
- 13. 無法啓動Cassandra
- 14. Cassandra啓動錯誤
- 15. 無法啓動cassandra
- 16. 用「./bin/cassandra -f」啓動cassandra,如何退回終端窗口?
- 17. Cassandra 2.1.8:節點拒絕在removeUnfinishedCompactionLeftovers中使用NPE啓動
- 18. 通過hector-API在Cassandra Column系列中啓用緩存?
- 19. 啓動Cassandra時出錯無法啓動
- 20. Cassandra節點不啓動
- 21. cassandra節點不啓動
- 22. 啓動cassandra cqlsh python not found
- 23. 啓動Cassandra時出錯3.4
- 24. Apache Cassandra啓動問題
- 25. Cassandra 2.0.3 cqlsh無法啓動
- 26. Cassandra節點批量啓動
- 27. 啓動cassandra-cli錯誤
- 28. 當用Cassandra啓動Titan時NoAvailableHostsException
- 29. 在windows上使用zlib 1.2.8編譯時出錯
- 30. Struts 1.2.8中存在的問題HTML taglib和JBoss
增加num_tokens不會導致任何數據重新分配。 – Richard
@Richard你是對的。我的錯。 – Nikhil