1

我已經搜索了此問題的以前版本,但沒有一個適合我的情況。我有一個運行2.0.x的現有Cassandra集羣。我已經分配了新的虛擬機,所以我不想升級現有的Cassandra節點 - 而是希望遷移到a)新的虛擬機和b)更新版本的Cassandra。Cassandra從2.0.x升級到2.1.x或3.0.x

  1. 我知道就地升級,我會升級到最新的2.0.x,然後升級到最新的2.1.x. AFAIK,這裏沒有SSTable不一致。如果我通過添加新節點進入該路線,我假設我會遵循datastax指令來添加新節點/退役舊節點?

  2. 鑑於上述情況,是否可以從2.0.x移動到3.0.x?我知道SSTable格式是不同的;但是,如果我添加新節點(而不是在磁盤上重新使用SSTables),這是否重要?

這在我看來,#2的工作 - 否則,就意味着任何需要的SSTable升級升級將需要脫機同時採取所有節點;否則,在某個時刻,將在同一集羣中運行混合的2.x.x和3.0.x版本。

我完全錯了嗎?有沒有人有這樣的經驗?

回答

3

是的,可以將數據遷移到不同的環境(使用更新後的Cassandra的新vm使用sstableloader,但需要C * 3.0.5及以上版本,因爲該版本添加了對上一版本上載sstable的支持。

一旦這個過程完成後,建議執行nodetool upgradesstables,以保證有在數據沒有不兼容,並且nodetool cleanup

關於您的評論... it implies that any upgrade requiring SSTable upgrades would require all nodes to be taken offline simultaneously;...是不正確的;做升級一個節點一段時間將創建一個混合集羣,其中包含您提到的兩個版本的節點,這不是最優的,但可以讓您避免生產中的任何停機時間。 (請注意,此操作的影響取決於應用程序中使用的一致性級別。)

+0

另外,你應該在升級之前運行'nodetool drain'。它將刷新memtables。 – questionare

2

不要擔心遷移。您可以簡單地將您的Cassandra 2.0.X羣集遷移到Cassandra 3.0.X.但是,如果將羣集Cassandra 2.0.X遷移到最新的Cassandra 2.X.X,然後Cassandra 3.0.X,則更好。你需要遵循一些步驟 -

  1. 備份數據
  2. 卸載當前版本
  3. 安裝要升級
  4. 當你在做遷移恢復數據

的版本,你需要總是小心你的數據。對於數據備份和恢復,你可以遵循兩個ways-

  1. 創建你sstables的快照,然後安裝卡桑德拉的新版本中,文件放置到數據位置和運行sstableloader後。
  2. 備份您的架構的一個.cql文件,複製所有表.csv,然後在安裝卡桑德拉的新版本之後,源您的架構從.cql和複製從每一個.csv文件中的所有表。

如果您完全相信您將如何完成遷移,那麼您可以編寫一個bash腳本來完成備份和恢復步驟。