MongoDB架構——sharding分片

這是一種將海量數據水平擴展的數據庫集羣系統,數據分表存儲在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"})

**小結:
對於寫入負載比較大時,片鍵至關重要,鍵值變化較大的健作爲片鍵爲好**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章