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

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

啟動Shard Server 實例1和實例2


啟動Config Server

啟動Route Process

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

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


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

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