2016-09-28 166 views
5

我們計劃升級目前運行在2.0.9到2.2.6的羣集。根據文檔和一些博客,人們升級cassandra inplace即從環中刪除一個節點,將其升級並重新添加回去。我們懷疑遵循這種方法,因爲事情可能會出錯(這是一個擁有大量QPS的高事務數據庫)。Cassandra版本從2.0.9升級到2.2

因此,我們打算爲要升級cassandra版本(2.2)的集羣添加一個新的數據中心。所以安裝應該有兩個數據中心一箇舊(2.0.9)和其他新(2.2.6)

這個數據中心只是一個備份。當數據中心變得穩定時,我們將改變客戶端與該數據中心的連接,如果它運行良好,那麼我們將與該數據中心一起關閉舊數據中心,否則我們可以退回到舊數據中心並調試出錯的地方。

這個過程是否可行,或者我們應該到位升級?

跨數據中心可以存在兩個cassandra版本(2.0和2.2)。

這種方法是否存在垮臺?

回答

3

可以2個卡桑德拉版本(2.0和2.2)跨數據中心存在。

不,他們不能。

這個過程是否可行,或者我們應該到位升級?

您需要執行就地升級。這是因爲Cassandra無法跨版本傳輸。執行就地升級允許新版本從舊版本讀取SSTables。

是否有這種方法的垮臺?

正如我所提到的,您將無法將數據從現有節點傳輸到新的2.2 DC。所以引導,重建和修復都是不可能的。

你有的另一個問題是,2.2.6與2.0.9不是「升級兼容」。從這個DataStax文檔:Apache Cassandra versions requiring intermediate upgrades ...

阿帕奇卡桑德拉2.2.x的限制

  • 從卡桑德拉2.1版本升級後或等於2.1.9直接卡桑德拉2.2.x中
  • 不支持從Cassandra 2.0及更早版本直接升級。

你會第一必須升級整個羣集到Cassandra 2.1。一旦升級到2.1完成,然後您可以將您的節點升級到2.2.6。

+0

Hi @Aaron, 謝謝。它非常奇怪爲什麼兩個cassandra版本不能跨數據中心存在,但可以存在於同一個數據中心(Cluster)中。這有什麼特別的理由嗎?如果cassandra無法在不同版本的數據中心之間傳輸數據..我可以先在新數據中心中擁有相同版本,然後在引導,重建和修復後,我在新數據中心升級版本,升級後更改客戶端連接?這是可行的嗎? ......即使在這種方法中,我也知道兩個數據中心有兩個不同的版本。這會工作嗎? 謝謝。 – johri21

+1

@ johri21是的。 *該*應該起作用。 – Aaron

1

Cassandra是一個無主分佈式數據存儲。對於卡桑德拉來說,沒有像「備份」數據中心那樣的東西。如果您要添加另一個運行2.2的DC,則可以選擇混合版本的集羣設置,就像單獨升級節點一樣。我看到的唯一優勢是性能問題應該由於添加節點而不太可能。但是,添加另一個DC會使您的羣集設置更加複雜,並可能會引入一些您還不知道的問題,但與運行不同版本無關。你如何引導新的DC?如何降低舊的DC效果表現?對運行的影響將是這種方法相比,更新各個節點更大..

如果你真的不想做滾動升級,我建議做設置第二DC作爲一個單獨的集羣,導入備份並做一些(加載)測試。如果您滿意,還可以更改代碼以寫入兩個羣集,並最終切換到新羣集。如果您不想花費太多精力,只需進行滾動升級。

+0

嗨Stefan, 第一個前奏我有一個運行2.0.9 cassandra版本的4節點羣集。現在我打算用2.2 cassandra版本設置不同的DC。這應該從舊DC(2.0.9)開始引導。我知道這需要一段時間(引導)。優點是從我的應用程序讀取和寫入將從2.0.9服務,這是完美的工作,所有這一切,而讀取和寫入將同步到新的DC(異步)。 然後在一個貧困時期(流量很低時),我只需將聯繫點改爲我的新DC(2.2)。一切正常後,我會關閉舊的DC。 – johri21