2011-11-08 65 views
3

我在我們的開發服務器上玩了一段時間的新產品,現在它是現場直播,我想將現有數據從單個機器(mongod,local)移動到我們的6服務器碎片設置( 2個分片,每個3個副本集) - 是否有任何方法將數據庫克隆到遠程分片?MongoDB:克隆單服務器開發。數據庫到生產分片集羣

(最壞的情況下,一個簡單的轉儲&插入與片鍵例子將是非常好的!)

的感謝!

回答

1

您應該在開發服務器添加到分片environement:

  • 重新啓動開發服務器與--shard選項
  • 您mongos:類型db.runCommand({addshard:「serverhostname [:port]」,name:「migration」});
  • 使用remove shard命令到remove您的碎片「遷移」。
  • 當它完成(你會看到「刪除碎片已成功完成」),你可以停止你的dev的服務器和所有數據已經​​從開發遷移到新的集羣

您不必分片你的數據庫進行遷移,但是如果你想從分片中受益,你需要做到這一點。

該方案的優點是,你必須最小動作採取(一切都是自動的),有無需停機(你把更多的負荷,但是,速度較慢的操作) 然而,這是一個解決方案(慢於手動副本)。

另一個優勢相比,原始文件複製:轉移也將緊湊型(〜碎片整理)數據,這是一件好事:-)

+0

沒問題,所以addshard是開發服務器 - 但我如何指定開發服務器上的特定數據庫已遷移到其他碎片?因爲據我所知,分片並不一定意味着它在所有分片服務器上,如果它只有少量的數據,它就會保持在一個分片==一個盒子裏......因爲在這種情況下,它可能只停留在分片上dev服務器現在...或者我在這裏想錯了嗎? – Tobias

+0

@Tobias:正如我所說的,將「dev」添加到集羣,然後使用removeShard命令將所有數據從dev遷移到集羣的其餘部分。當removeshard命令返回「remove shard completed successfullys」時,所有的數據都已經遷移了 – kamaradclimber

+0

哦,對不起,明白了!非常感謝! – Tobias

0
  • 將您的開發服務器添加到作爲主服務器的副本集,將其他3臺服務器添加爲從服務器。 然後,在其他服務器複製數據後,移除dev-server。

    http://www.mongodb.org/display/DOCS/Replica+Set+Commands

  • 您可以使用mongodump傾倒了數據庫,然後用mongorestore加載數據庫轉儲到您的每一個副本集

    man mongodump的主人,man mongorestore

參見:

http://www.mongodb.org/display/DOCS/Replica+Set+Internals

http://www.mongodb.org/display/DOCS/Sharding+Introduction

http://www.mongodb.org/display/DOCS/Master+Slave

+0

既能解決方案與分片工作?它不像我只有一個副本集,它的兩個副本集都在一個碎片中。 – Tobias

+0

將數據加載到主服務器中可能是最容易的,然後向主服務器添加分片 – Tilo

相關問題