2014-01-15 71 views
1

我有一個包含3個複製的20個節點的生產集羣,我希望將一部分數據(即〜600GB(帶有3個複製))複製到我的測試環境中,只有一個複製。將數據從cassandra複製到cassandra

我知道我們可以使用sstableloader,但是我們是否需要將網絡上的所有600GB複製到另一個羣集?

他們是否只將一個數據副本移動到其他集羣?

這樣做的最佳方法是什麼?

回答

2

我假設你正在使用RandomPartitioner。你在做什麼取決於你的測試環境中有多少個節點。

在SimpleStrategy的情況下:

答:如果您使用的是20個節點在測試環境:

  1. 分配同樣要在您的測試環境中的每個節點;
  2. 同時在所有節點上使用nodetool快照;
  3. 將來自具有相同標記的生產節點的快照目錄中的數據複製到具有相同標記的測試節點;
  4. 要將複製因子更改爲1,只需使用如下新複製設置更新密鑰空間:http://wiki.apache.org/cassandra/Operations#Replication
  5. 在每個節點上運行清理。

B.如果使用低於生產節點的數量:

  1. 均勻分配令牌新節點得到一個平衡環;
  2. 同時在所有節點上使用nodetool快照;
  3. 您將不得不將所有生產節點中的所有數據複製到測試環境中的每個節點;
  4. 如果您使用的是LevelCompaction,請確保在啓動節點之前使用該壓縮功能從列族的日期目錄中刪除metadata.json。這使得LevelCompaction可以在新設置上正確地壓縮和分組標籤。
  5. 同上4;
  6. 同上5;

如果您不關心恢復的測試版本中某個時間點的數據一致性,則可以跳過快照並直接複製數據目錄。

需要考慮的事項:

此過程會顯着影響磁盤I/O。如果您是在活動羣集上執行此操作,請使用快照至少鎖定某個時間點的狀態並逐漸複製。

在NetworkTopologyStrategy的情況下:

您可以重複上述過程,但只有從處於一個機架,並形成數據的100%的節點的組合複製。如果您絕對關心可能錯過的寫入其他機架上未複製到此機架中的節點的節點,那麼您將不得不復制上述所有節點中的所有內容。

的理想解決方案:

如果你要天天做這個測試就像我爲我的公司做的,你想使周圍的一些自動化。在我看來,備份和恢復的最佳自動化是Netflix的Priam https://github.com/Netflix/Priam

我在S3中存儲了生產備份。代碼將啓動測試中的新機器,爲一個區域分配相同的標記,並將priam快照時間設置爲最後一天備份的範圍,然後測試節點將自動從s3備份接收數據。

希望我的回答對你有幫助。

+0

謝謝你arya。但我們使用murmur3partitioner和vnodes而不是令牌。我們使用SimpleStrategy和CF進行大小分層壓縮。測試集羣中只有3個節點。如何將20個節點數據複製到3個節點中。我需要將數據分配到3個節點嗎? – Rock