這是一種將海量的數(shù)據(jù)水平擴(kuò)展的數(shù)據(jù)庫集群系統(tǒng)數(shù)據(jù)分表存儲在sharding 的各個(gè)節(jié)點(diǎn)上使用者通過簡單的配置就可以很方便地構(gòu)建一個(gè)分布式MongoDB 集群。 MongoDB 的數(shù)據(jù)分塊稱為 chunk。每個(gè) chunk 都是 Collection 中一段連續(xù)的數(shù)據(jù)記錄通常最大尺寸是 200MB超出則生成新的數(shù)據(jù)塊。
這是一種將海量的數(shù)據(jù)水平擴(kuò)展的數(shù)據(jù)庫集群系統(tǒng)數(shù)據(jù)分表存儲在sharding 的各個(gè)節(jié)點(diǎn)上使用者通過簡單的配置就可以很方便地構(gòu)建一個(gè)分布式MongoDB 集群。
MongoDB 的數(shù)據(jù)分塊稱為 chunk。每個(gè) chunk 都是 Collection 中一段連續(xù)的數(shù)據(jù)記錄通常***尺寸是 200MB超出則生成新的數(shù)據(jù)塊。
要構(gòu)建一個(gè) MongoDB Sharding Cluster需要三種角色
1、 Shard Server
即存儲實(shí)際數(shù)據(jù)的分片每個(gè)Shard 可以是一個(gè)mongod 實(shí)例也可以是一組mongod 實(shí)例構(gòu)成的Replica Set。為了實(shí)現(xiàn)每個(gè)Shard 內(nèi)部的auto-failoverMongoDB 官方建議每個(gè)Shard為一組Replica Set。
2、 Config Server
為了將一個(gè)特定的collection 存儲在多個(gè)shard 中需要為該collection 指定一個(gè)shard key例如{age: 1} shard key 可以決定該條記錄屬于哪個(gè)chunk。Config Servers 就是用來存儲所有shard 節(jié)點(diǎn)的配置信息、每個(gè)chunk 的shard key 范圍、chunk 在各shard 的分布情況、該集群中所有DB 和collection 的sharding 配置信息。
3、Route Process
這是一個(gè)前端路由客戶端由此接入然后詢問Config Servers 需要到哪個(gè)Shard 上查詢或保存記錄再連接相應(yīng)的Shard 進(jìn)行操作***將結(jié)果返回給客戶端??蛻舳酥恍枰獙⒃景l(fā)給mongod 的查詢或更新請求原封不動地發(fā)給Routing Process而不必關(guān)心所操作的記錄存儲在哪個(gè)Shard 上。
下面我們在同一臺物理機(jī)器上構(gòu)建一個(gè)簡單的 Sharding Cluster架構(gòu)圖如下

創(chuàng)建數(shù)據(jù)目錄和日志目錄

啟動Shard Server 實(shí)例1和實(shí)例2


啟動Config Server

啟動Route Process

mongos 啟動參數(shù)中chunkSize 這一項(xiàng)是用來指定chunk 的大小的單位是MB默認(rèn)大小為200MB為了方便測試Sharding 效果我們把chunkSize 指定為 1MB。
配置Sharding
接下來我們使用MongoDB Shell 登錄到mongos添加Shard 節(jié)點(diǎn)

驗(yàn)證Sharding正常工作
我們已經(jīng)對test.users 表進(jìn)行了分片的設(shè)置下面我們們插入一些數(shù)據(jù)看一下結(jié)果


我們看一下磁盤上的物理文件情況

看上述結(jié)果表明test.users 集合已經(jīng)被分片處理了但是通過mongos 路由我們并感覺不到是數(shù)據(jù)存放在哪個(gè)shard 的chunk 上的這就是MongoDB 用戶體驗(yàn)上的一個(gè)優(yōu)勢即對用戶是透明的。
本文出自 “phper-每天一點(diǎn)點(diǎn)~” 博客,請務(wù)必保留此出處http://janephp.blog.51cto.com/4439680/1330656