2016-03-14 19 views
1

我已經將頭部放入整個Cassandra世界中,並將一個運行古老版Cassandra(1.0.8)的8節點羣集遷移到新羣集運行2.1.13 ..我做了一堆谷歌搜索,但無法找到任何關於如何管理此遷移的決定性結果,而不是花費我的時間進一步google搜索,並因缺乏對我的問題的良好答案而感到沮喪,於是我決定跳進它併爲我的新羣集啓動一個節點。從數據,摘要,索引和過濾文件中恢復cassandra節點

隨着我的新節點,我繼續到我舊節點上的DESC KEYSPACE [keyspace],並對其中的輸出進行了一些修改(它創建了columnfamilies而不是表格,有些東西是用除新的CQL想要它)我能夠在我的新節點上創建所需的表。

然後,我開始將/ raid0/cassandra/data/[keyspace]的內容傳輸到位於/ raid0/cassandra/data/[keyspace]的新節點,並且這樣做我想我可以運行nodetool修復或nodetool刷新,或一些其他好的nodetool命令,以使其重建所有從數據文件夾中的所有內容,但似乎我正在嘗試不工作,因爲沒有進入我的表,他們仍然只是返回0時,我運行SELECT COUNT(*)FROM [table];在cqlsh中。

任何人都能幫助我弄清楚如何才能將數據正確導入到新節點的密鑰空間中?

謝謝

回答

1

1.0將2.1的一大步 - 操作上,你可能會一旦它做是爲了更快樂,但它不會成爲一個超級簡單的過程。

首先要注意的是:卡桑德拉的快照是你的朋友。他們是硬鏈接,他們只需要幾秒鐘的時間,如果發生不好的事情,他們會真的幫助你回滾。在做任何事之前,請在每個節點上拍一張快照。現在

,從1.0到2.1的升級,你實際上將需要做一堆的升級:

1.0 - > 1.1

1.1 - > 1.2

1.2 - > 2.0

2.0 - > 2.1

聽起來很痛苦嗎?它可能會。卡桑德拉的每個版本都會有 '陷阱' 的名單進行升級:

https://github.com/apache/cassandra/blob/cassandra-1.0/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-1.1/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-1.2/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-2.0/NEWS.txt

https://github.com/apache/cassandra/blob/cassandra-2.1/NEWS.txt

如果我是你的話(和我一直在過去),我會試着在思維上決定是否升級就地或導出數據和重新導入更容易。如果你有幾百個數據集,它可能足夠小,可以導出和重新導入(你可能需要用你最喜歡的編程語言手動完成)。

如果您有相當大量的數據,只需一次升級一個節點,一次只能升級一個節點。在每個主要版本中,運行upgradedesstables。一旦所有的sstables升級,升級到下一個主要版本。

在當我需要用較小的數據集來做到這一點過去,我有專門的一批機器做到了:

  • 我連着大量存儲

  • 爲每版本在卡桑德拉-1.1,1.2,2.0,2.1:

  • 對於集羣中的每個節點:

  • 將數據複製到該節點(每次1個數據節點的價值)

  • 運行upgradesstables

  • 的數據複製關到保持位置

在這個過程的結束,你把所有的sstables for 2.1 - 非常簡單直接,然後將數據文件複製到2.1羣集,並且您將很好。

+0

謝謝你非常透徹的回答,傑夫!這給了我至少一個非常具體的行動計劃,以達到目標! –