成品網(wǎng)站怎樣建設(shè)企業(yè)管理培訓(xùn)視頻免費(fèi)
----前言
mongodb分片
一般用得比較少,需要較多的服務(wù)器,還有三種的角色
一般把mongodb的副本集應(yīng)用得好就足夠用了,可搭建多套mongodb復(fù)本集
mongodb分片技術(shù)
mongodb副本集可以解決數(shù)據(jù)備份、讀性能的問題,但由于mongodb副本集是每份數(shù)據(jù)都一模一樣的,無(wú)法解決數(shù)據(jù)量過大問題
mongodb分片技術(shù)能夠把數(shù)據(jù)分成兩份存儲(chǔ),假如shijiange.myuser里面有1億條數(shù)據(jù),分片能夠?qū)崿F(xiàn)5千萬(wàn)左右存儲(chǔ)在data1,5千萬(wàn)左右存儲(chǔ)在data2
data1、data2需要使用副本集的形式,預(yù)防數(shù)據(jù)丟失
mongodb分片集群三種角色介紹
router角色????????#mongodb的路由,提供入口,使得分片集群對(duì)外透明。router不存儲(chǔ)數(shù)據(jù)
configsvr角色????????#mongodb的配置角色,存儲(chǔ)元數(shù)據(jù)信息。分片集群后端有多份存儲(chǔ),讀取數(shù)據(jù)該去哪個(gè)存儲(chǔ)上讀取,依賴于配置角色。配置角色建議使用副本集
shardsvr角色????????#mongodb的存儲(chǔ)角色,存儲(chǔ)真正的數(shù)據(jù),建議使用副本集
依賴關(guān)系
當(dāng)用戶通過router角色插入數(shù)據(jù)時(shí),需要從configsvr知道這份數(shù)據(jù)插入到哪個(gè)節(jié)點(diǎn),然后執(zhí)行插入動(dòng)作插入數(shù)據(jù)到sharedsvr
當(dāng)用戶通過router角色獲取數(shù)據(jù)時(shí),需要從configsvr知道這份數(shù)據(jù)是存儲(chǔ)在哪個(gè)節(jié)點(diǎn),然后再去sharedsvr獲取數(shù)據(jù)
mongodb分片集群的搭建說明
使用同一份mongodb二進(jìn)制文件
修改對(duì)應(yīng)的配置就能實(shí)現(xiàn)分片集群的搭建
--第一步,分片集群搭建-configsvr
mongodb分片集群實(shí)戰(zhàn)環(huán)境搭建說明
configsvr????????#使用28017,28018,28019三個(gè)端口來(lái)搭建
router??????????????????? #使用27017,27018,27019三個(gè)端口來(lái)搭建
shardsvr????????#使用29017,29018,29019,29020四個(gè)端口來(lái)搭建,兩個(gè)端口一個(gè)集群,生產(chǎn)環(huán)境肯定是要三個(gè)端口
資源有限,就三臺(tái)服務(wù)器,我的分配情況是
mongodb配置角色的搭建,配置文件路徑/data/mongodb-fenpiancluster/28017,另外兩節(jié)點(diǎn)改下路徑、端口、IP
systemLog:
? destination: file
? logAppend: true
? path: /data/mongodb-fenpiancluster/28017/mongodb.log
storage:
? dbPath: /data/mongodb-fenpiancluster/28017
? journal:
??? enabled: true
processManagement:
? fork: true
net:
? port: 28017
? bindIp: 127.0.0.1,192.167.100.181
replication:
? replSetName: zmhconf
sharding:
? clusterRole: configsvr
mongodb配置服務(wù)集群的啟動(dòng)跟單例的啟動(dòng)方式一致,都是使用mongod
分片集群的配置角色副本集搭建
config = { _id:"zmhconf",
? configsvr: true,
? members:[
??? {_id:0,host:"192.167.100.181:28017"},
??? {_id:1,host:"192.167.100.182:28018"},
??? {_id:2,host:"192.167.100.183:28019"}
? ]
}
rs.initiate(config)
驗(yàn)證是否搭建成功
/usr/local/mongodb/bin/mongo 192.167.100.181:28017
rs.status()
--第二步,分片集群搭建-router
router說明
mongodb中的router角色只負(fù)責(zé)提供一個(gè)入口,不存儲(chǔ)任何的數(shù)據(jù)
router角色的搭建,配置文件/data/mongodb-fenpiancluster/27017/mongodb.conf
systemLog:
? destination: file
? logAppend: true
? path: /data/mongodb-fenpiancluster/27017/mongodb.log
processManagement:
? fork: true
net:
? port: 27017
? bindIp: 192.167.100.181
sharding:
? configDB: zmhconf/192.167.100.181:28017,192.167.100.182:28018,192.167.100.183:28019
router最重要的配置
指定configsvr的地址,使用副本集id+ip端口的方式指定
配置多個(gè)router,任何一個(gè)都能正常的獲取數(shù)據(jù)
router的啟動(dòng)
???? /usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27017/mongodb.conf
/usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27018/mongodb.conf
/usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27019/mongodb.conf
router的驗(yàn)證
需要等到數(shù)據(jù)角色搭建完才能夠進(jìn)行驗(yàn)證
--第三步,分片集群搭建-sharedsvr
數(shù)據(jù)角色
分片集群的數(shù)據(jù)角色里面存儲(chǔ)著真正的數(shù)據(jù),所以數(shù)據(jù)角色一定得使用副本集
多個(gè)數(shù)據(jù)角色
mongodb的數(shù)據(jù)角色搭建,配置文件/data/mongodb-fenpiancluster/29017/mongodb.conf,另外三臺(tái)也這么寫,由于資源不足,把zmhdata2的副本集都放在了192.167.100.183上。
systemLog:
? destination: file
? logAppend: true
? path: /data/mongodb-fenpiancluster/29017/mongodb.log
storage:
? dbPath: /data/mongodb-fenpiancluster/29017
? journal:
??? enabled: true
processManagement:
? fork: true
net:
? port: 29017
? bindIp: 192.167.100.181
replication:
? replSetName: zmhdata1
sharding:
? clusterRole: shardsvr
systemLog:
? destination: file
? logAppend: true
? path: /data/mongodb-fenpiancluster/29019/mongodb.log
storage:
? dbPath: /data/mongodb-fenpiancluster/29019
? journal:
??? enabled: true
processManagement:
? fork: true
net:
? port: 29019
? bindIp: 192.167.100.183
replication:
? replSetName: zmhdata2
sharding:
? clusterRole: shardsvr
數(shù)據(jù)服務(wù)兩個(gè)集群說明
29017、29018數(shù)據(jù)角色zmhdata1
29019、29020數(shù)據(jù)角色zmhdata2
在各自節(jié)點(diǎn)分別啟動(dòng)四個(gè)數(shù)據(jù)實(shí)例
/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29017/mongodb.log
/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29018/mongodb.log
/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29019/mongodb.log
/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29020/mongodb.log
在各自副本集的節(jié)點(diǎn)上寫入節(jié)點(diǎn)信息(任意找一個(gè)副本集內(nèi)的節(jié)點(diǎn)操作):
數(shù)據(jù)角色zmhdata1
config = { _id:"zmhdata1",
? members:[
??? {_id:0,host:"192.167.100.181:29017"},
??? {_id:1,host:"192.167.100.182:29018"}
? ]
}
rs.initiate(config)
數(shù)據(jù)角色zmhdata2
config = { _id:"zmhdata2",
? members:[
??? {_id:0,host:"192.167.100.183:29019"},
??? {_id:1,host:"192.167.100.183:29020"}
? ]
}
rs.initiate(config)
--第四步,分片集群添加數(shù)據(jù)節(jié)點(diǎn)
分片集群添加數(shù)據(jù)角色,連接到路由角色里面配置,數(shù)據(jù)角色為副本集的方式
/usr/local/mongodb/bin/mongo 192.167.100.181:27017 ????????
sh.addShard("zmhdata1/192.167.100.181:29017,192.167.100.182:29018")
sh.addShard("zmhdata2/192.167.100.183:29019,192.167.100.183:29020")
sh.status()
默認(rèn)添加數(shù)據(jù)沒有分片存儲(chǔ),操作都是在路由角色里面
use shijiange
for(i=1; i<=500;i++){
? db.myuser.insert( {name:'mytest'+i, age:i} )
}
db.dropDatabase()????????#驗(yàn)證完后刪除
經(jīng)驗(yàn)證發(fā)現(xiàn),新建的數(shù)據(jù)會(huì)隨機(jī)分配到一個(gè)分片中,而不會(huì)均分到所有分片。
針對(duì)某個(gè)數(shù)據(jù)庫(kù)的某個(gè)表使用hash分片存儲(chǔ),分片存儲(chǔ)就會(huì)同一個(gè)colloection分配兩個(gè)數(shù)據(jù)角色(MongoDB的分片是基于集合的,就算有分片集群不等于數(shù)據(jù)會(huì)自動(dòng)分片,需要實(shí)現(xiàn)分片表首先需要啟用數(shù)據(jù)庫(kù)分片)
use admin
db.runCommand( { enablesharding :"shijiange"});
db.runCommand( { shardcollection : "shijiange.myuser",key : {_id: "hashed"} } )
或者也可以這樣的語(yǔ)句來(lái)啟用分片:
?mongos> sh.enableSharding("shijiange")
?mongos> sh.shardCollection("shijiange.myuser",{_id: "hashed"});
插入數(shù)據(jù)校驗(yàn),分布在兩個(gè)數(shù)據(jù)角色上
use shijiange
for(i=1; i<=500;i++){
? db.myuser.insert( {name:'mytest'+i, age:i} )
}
配置角色如果掛掉一臺(tái)會(huì)不會(huì)有影響
驗(yàn)證mongos多個(gè)入口是否能夠正常使用