2011-03-28 55 views

回答

0

據我所知,沒有自動化解決方案來備份Riak中的一個存儲桶。您必須使用riak-admin命令行工具來負責備份單個物理節點。如果你希望它快但不安全(r = 1),你可以寫一些東西來檢索單個桶中的所有密鑰並使用較低的r值。

桶是一個邏輯名稱空間,所有的鍵都存儲在同一個bitcask結構中。這就是爲什麼獲得單個節點的唯一方法是編寫一個工具來自己進行流式處理。

+0

我們在使用riak-admin工具進行備份時遇到了問題。備份速度很慢,我們永遠無法讓它們恢復正常。如果這是您當前的備份解決方案,我會建議您測試您可以儘快恢復! 我們當前的解決方案是停止Riak節點,拍攝/ var/lib/riak目錄的快照,並啓動節點。如果我們使用帶有快照的文件系統(例如XFS),我們只會這樣做。我們已經對此進行了測試,並且沒有遇到任何問題。注:這假設你正在使用Bitcask。 – 2011-04-14 10:15:23

3

備份只是一個單一的桶將是中了Riak困難的操作。

所有的解決方案都將歸結爲以下兩個步驟:

  1. 列出所有桶裏的對象。這是一個棘手的部分,因爲在Riak集羣的任何地方沒有任何存儲桶的「清單」或內容列表。

  2. 對上述列表中的每個對象發出GET,並將其寫入備份文件。這部分通常很簡單,但爲了獲得最佳性能,您希望確保您以多線程方式並行發佈這些GET,並使用某種連接池。

至於列出所有的對象,你有三種選擇之一。

一個是通過HTTP(例如/buckets/bucket/keys?keys=stream)或協議緩衝區做在剷鬥串流列表按鍵操作 - 詳見http://docs.basho.com/riak/latest/dev/references/http/list-keys/http://docs.basho.com/riak/latest/dev/references/protocol-buffers/list-keys/。在任何情況下,您都不應該執行非流式常規列表鍵操作。 (它會掛起整個羣集,並且一旦密鑰數量變得足夠大,最終會超時或崩潰)。

二是發出二級索引(2i)查詢來獲取該對象列表。有關討論和注意事項,請參閱http://docs.basho.com/riak/latest/dev/using/2i/

如果您使用Riak Search並且可以通過單個分頁搜索查詢檢索所有對象,則會有三個。 (但是,Riak搜索具有10,000條結果的查詢結果限制,因此,這種方法遠非理想)。

對於獨立的應用程序,可以備份單個桶,看看Riak Data Migrator,使用該流列表鍵的方法結合高效並行獲取一個實驗的Java應用程序的一個例子。