Monday, May 12, 2014

Cassandra 1.x升級2.0.x心得

很久以前Cassandra 還在0.6.8版的時候開始使用,後來升級到1.1.5然後又升級到1.2.3,中間似乎沒有很容易,在1.2.3版本用了一陣子之後,經過很久又重啟計畫,打算把之前的東西搬出來用,看看版本好像該更新了,於是打算升到目前最新的2.0.7,結果發現事情似乎不是那麼簡單....

當然,最後還是搞定了,所以來簡述一下過程。

首先,要升級到新版本的cassandra需要用新版本的"nodetool upgradesstables"跑過比較不會有問題(版號差沒多少可能不需要),但是要跑nodetool需要把cassandra執行起來才行,而舊版本的partitioner設定很有可能是 RandomPartitioner ,如果是這樣的話,會遇到下面這個錯誤
ERROR 18:20:16,495 Cannot open \var\lib\cassandra\data\system\compaction_history\system-compaction_history-jb-13; partitioner org.apache.cassandra.dht.RandomPartitioner does not match system partitioner org.apache.cassandra.dht.Murmur3Partitioner. Note that the default partitioner starting with Cassandra 1.2 is Murmur3Partitioner, so you will need to edit that to match your old partitioner if upgrading.

如果是這個問題,很簡單,到cassandra\conf\cassandra.yaml裡面找到"partitioner: org.apache.cassandra"這行,然後把org.apache.cassandra.dht.Murmur3Partitioner改成org.apache.cassandra.dht.RandomPartitioner,應該就能順利讓cassandra跑起來了。

然後,Cassandra要升到2.0.x的版本,需要從1.2.9以上才可以,所以我先從1.2.3升到1.2.13(現在只抓的到這個),然後在升到2.0.7,每次升級都要改conf(這個有需要的話才要改)、還有跑"nodetool upgradesstables"。

最後測了一下,可以正常使用,從古早版本寫的資料也都建在可以存取,可賀可喜,收工。