這是一種將海量數據水平擴展的數據庫集羣系統,數據分表存儲在sharding各個節點上,用戶通過簡單的配置可以完成一個分佈式MongoDB集羣。MongoDB的數據分塊稱爲chunk,每個chunk都是Collection中一段連續的數據記錄,最大尺寸200MB,超出則生成新的數據塊。
一.MongoDB中的自動分片
分片就是將集合分成多個小塊。在分片前需要運行一個路由進程,名爲mongos。這個進程知道知道數據具體的存放分片所以需要連接mongos來發送請求
二.片鍵
設置分片時,需要從集合中選擇一個鍵,作爲拆分數據的依據,稱爲片鍵。
三.建立分片
建立一個片,需要以下3種角色:
- 1.Shard Server
是存儲實際數據的分片,每個Shard可以是一個MongoDB實例,也可以是一組複製集。建議是複製集,這樣可以很好實現auto-failover
- 2.Config Server
存儲所有Shard節點的配置信息、每個Chunk的Shard Key範圍、Chunk在各個Shard的分佈情況、該集羣中所有DB和集合的sharding配置信息
- 3.mongos
客戶端接入Shard的一個前端路由,mongos回去訪問Config Servers需要到哪個Shard上操作,然後再連接Shard,最後返回給客戶端。
1.啓動Config Server配置服務器
首先要啓動配置服務器和mongos。其中配置服務器必須先啓動
2.啓動mongos路由
3.啓動Shard Server服務器
啓動片(Shard Server),是普通的實例
4.配置Sharding
使用shell登錄到mongos,添加shard節點,並打開test數據庫和personalinfo集合的分片功能:
代碼說明:
db.runCommand({addshard:”localhost:20000”}):添加片
db.runCommand({enablesharding:”test”}):設置分片儲存的數據庫
db.runCommand({shardcollection:”test.personlinfo”,key:{_id:1}}):設置分片的集合名稱,必須制定Shard Key,系統會自動創建索引
5.驗證Sharding工作
按命令出現上圖則表示分片處理成功。
四.管理維護Sharding
1.列出所有Shard Server:
注意一定要在admin下查看纔可以
2.查看Sharding信息
printShardingStatus可以查看Sharing的詳細信息
3.判斷是否是Sharding
>db.runCommand({isdbgird:1})
不再贅述
4.對現有集合進行Sharding
對未分片的test.users進行分片處理:
>use admin
>db.runCommand({shardcollection:"test.users",key:{_id:1}})
5.新增Shard Server
啓動一個新的Shard Server進程:
>mongod --shardsvr --port=20002 --dbpath=..... --logpath=.... --directoryperdb
//將新啓動的Shard Server加入到集羣:
>mongo admin --port=40000
>db.runCommand({addshard:"localhost:20002"})
//可用printShardingStatus()查看
6.移除Shard Server
>db.runCommand({"removeshard":"localhost:20002"})
**小結:
對於寫入負載比較大時,片鍵至關重要,鍵值變化較大的健作爲片鍵爲好**