轉載自 http://www.cnblogs.com/spnt/
複本集實現了網站的安全備份和故障的無縫轉移,但是並不能實現資料的大型存放區,畢竟物理硬體是有極限的,這個時候就需要做分布式部署,把資料儲存到其他機器上。Mongodb的分區技術就很完美的實現了這個需求。
理解Mongodb的分區技術即Sharding架構
什麼是Sharding?說白了就是把海量資料水平擴充的叢集系統,資料分表格儲存體在Sharding的各個節點上。
Mongodb的資料分開分為chunk,每個chunk都是collection中的一段連續的資料記錄,一般為200MB,超出則產生新的資料區塊。
構建Sharding需要三種角色,
shard伺服器(Shard Server):Shard伺服器是儲存實際資料的分區,每個Shard可以是一個mongod執行個體,也可以是一組mongod執行個體構成的Replica Sets,為了實現每個Shard內部的故障自動切換,MongoDB官方建議每個Shard為一組Replica Sets。
設定管理員(Config Server):為了將一個特定的collection儲存在多個Shard中,需要為該collection指定一個Shard key,決定該條記錄屬於那個chunk,設定管理員可以儲存以下資訊:
1,所有Shard節點的配置資訊
2,每個chunk的Shard key範圍
3,chunk在各Shard的分布情況
4,叢集中所有DB和collection的Shard配置資訊
路由進程(Route Process):一個前端路由,用戶端由此接入,首先詢問設定管理員需要到那個Shard上查詢或儲存記錄,然後串連相應Shard執行操作,最後將結果返回用戶端。用戶端只需 將原本發給mongod的查詢活更新要求原封不動的發給路由器進程,而不必關心所操作的記錄儲存在那個Shard上。
構建Sharding
由上面分析可得出,構建一個Sharding至少需要4個mongodb進程,兩個Shard Server(做分區),一個Config Server,一個Route Process,然後安排如下
進程 連接埠 檔案目錄
Shard Server1 2000 mongodb5
Shard Server2 2001 mongodb6
Config Server 30000 mongodb7
Route Process 40000 mongodb8
現在開始配置:
1,啟動Shard Server
這裡啟動只多了一個命令:shardsvr,用這個命令就表示這個進程是Shard進程。
2,啟動Config Server
啟動Config Server用的是configsvr命令
3,啟動Route Process
這裡設定chunk大小為1M,方便測試分區效果
4,配置Sharding
所有進程都啟動好以後,剩餘的就是把他們串成串兒了
新開個cmd,然後串連到路由器進程中,使用addshard添加到路由器中
通過上面兩次操作,整個架構已經串成了一串,但是,別著急,架構還不知道分區的資料庫和片鍵呢
指定分區的資料庫是Friends,然後指定按照表FriendUserAttach中的_id分區。
至此整個系統配置完畢。
驗證分區情況,我是用程式插入的資料,因為表是我實際所用的表,在cmd裡插入就太麻煩了,這裡我用用戶端驅動插入10000條資料
用use命令切換到Friends資料庫,然後stats查看目前狀態
欄位說明:sharded為true,說明此表是經過分區處理的
shards部分有兩個Shard Server分別是:"shard0000" 和 "shard0001"。"shard0000"的欄位count為1016,表明此Shard Server上分布的資料量是1016條,size表示此Shard Server上分布的資料庫大小,單位為b。