新聞中心

在南譙等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),全網(wǎng)整合營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),南譙網(wǎng)站建設(shè)費(fèi)用合理。
為什么要分片?
- 在復(fù)制中,所有寫操作都將轉(zhuǎn)到主節(jié)點(diǎn);
- 對(duì)延遲敏感的查詢?nèi)詴?huì)轉(zhuǎn)到主查詢;
- 單個(gè)副本集限制為 12 個(gè)節(jié)點(diǎn);
- 當(dāng)活動(dòng)數(shù)據(jù)集很大時(shí),會(huì)出現(xiàn)內(nèi)存不足;
- 本地磁盤不夠大;
- 垂直擴(kuò)展價(jià)格昂貴。
MongoDB 中的分片
下圖顯示了 MongoDB 中使用分片集群結(jié)構(gòu)的分布。
圖:MongoDB 中的分片
在上圖中,有三個(gè)主要組件
- Shards(碎片):用于存儲(chǔ)實(shí)際的數(shù)據(jù)塊,在生產(chǎn)環(huán)境中,每個(gè)分片都是一個(gè)單獨(dú)的副本集,它們提供了高可用性和數(shù)據(jù)一致性;
- Config Servers(配置服務(wù)器):用于存儲(chǔ)集群的元數(shù)據(jù),此數(shù)據(jù)包含集群數(shù)據(jù)集到碎片的映射。查詢路由器使用此元數(shù)據(jù)將操作定向到特定的碎片。在生產(chǎn)環(huán)境中,分片群集恰好具有 3 個(gè)配置服務(wù)器;
- Query Routers(查詢路由器):查詢路由器基本上都是 mongo 實(shí)例,可與客戶端應(yīng)用程序接口并將操作定向到適當(dāng)?shù)姆制?。查詢路由器處理操作并將其定位到分片,然后將結(jié)果返回給客戶端。分片群集可以包含多個(gè)查詢路由器來(lái)劃分客戶端請(qǐng)求負(fù)載??蛻舳藢⒄?qǐng)求發(fā)送到一個(gè)查詢路由器。通常,分片群集具有許多查詢路由器。
分片實(shí)例
分片結(jié)構(gòu)端口分布如下:
Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000
步驟 1) 啟動(dòng) Shard Server
[root@100 /]# mkdir -p /www/mongoDB/shard/s0
[root@100 /]# mkdir -p /www/mongoDB/shard/s1
[root@100 /]# mkdir -p /www/mongoDB/shard/s2
[root@100 /]# mkdir -p /www/mongoDB/shard/s3
[root@100 /]# mkdir -p /www/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork
....
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork
步驟 2) 啟動(dòng) Config Server
[root@100 /]# mkdir -p /www/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork
注意:這里我們完全可以像啟動(dòng)普通 mongodb 服務(wù)一樣啟動(dòng),不需要添加 shardsvr 和 configsvr 參數(shù)。因?yàn)檫@兩個(gè)參數(shù)的作用就是改變啟動(dòng)端口的,所以我們自行指定端口就可以了。
步驟 3) 啟動(dòng) Route Process
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
mongos 啟動(dòng)參數(shù)中,chunkSize 這一項(xiàng)是用來(lái)指定 chunk 的大小的,單位是 MB,默認(rèn)大小為 200MB。
步驟 4) 配置 Sharding
接下來(lái),我們使用 MongoDB Shell 登錄到 mongos,并添加 Shard 節(jié)點(diǎn)。
[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({ addshard:"localhost:27029" })
{ "shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" }) #設(shè)置分片存儲(chǔ)的數(shù)據(jù)庫(kù)
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }
步驟 5) 程序代碼內(nèi)無(wú)需太大更改,直接按照連接普通的 mongo 數(shù)據(jù)庫(kù)那樣,將數(shù)據(jù)庫(kù)連接接入接口 40000。
網(wǎng)站名稱:MongoDB分片
網(wǎng)站地址:http://fisionsoft.com.cn/article/ccidogh.html


咨詢
建站咨詢
