生產(chǎn)MongoDB 分片與集群方案
【編者的話】
Mongo DB 是目前在IT行業(yè)非常流行的一種非關(guān)系型數(shù)據(jù)庫(NoSql),其靈活的數(shù)據(jù)存儲(chǔ)方式備受當(dāng)前IT從業(yè)人員的青睞。Mongo DB很好的實(shí)現(xiàn)了面向?qū)ο蟮乃枷?OO思想),在Mongo DB中 每一條記錄都是一個(gè)Document對(duì)象。本文介紹了一則生產(chǎn)環(huán)境下MongoDB實(shí)現(xiàn)分片與集群方案的操作實(shí)例。
一、 mongodb分片與集群拓?fù)鋱D
二、分片與集群的部署
1.Mongodb的安裝
分別在以上3臺(tái)服務(wù)器安裝好mongodb
安裝方法見安裝腳本。
2.Mongod 創(chuàng)建單個(gè)分片的副本集
10.68.4.209
①建立數(shù)據(jù)文件夾和日志文件夾
mdkir /data/{master,slave,arbiter}
mkdir /data/log/mongodb/{master,slave,arbiter} -p
②建立配置文件
- #master.conf
- dbpath=/data/master
- logpath=/data/log/mongodb/master/mongodb.log
- pidfilepath=/var/run/mongo_master.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb
- port=10002
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #slave.conf
- dbpath=/data/slave
- logpath=/data/log/mongodb/slave/mongodb.log
- pidfilepath=/var/run/mongo_slave.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb
- port=10001
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #arbiter.conf
- dbpath=/data/arbiter
- logpath=/data/log/mongodb/arbiter/mongodb.log
- pidfilepath=/var/run/mongo_arbiter.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb
- port=10000
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
③啟動(dòng)mongodb
/etc/init.d/mongodb_master start
/etc/init.d/mongodb_slave start
/etc/init.d/mongodb_arbiter start
④配置主、備、仲裁節(jié)點(diǎn)
主節(jié)點(diǎn):
- # /usr/local/mongodb/bin/mongo 10.68.4.209:10002
- MongoDB shell version: 2.4.9
- connecting to: 10.68.4.209:10002/test
- > use admin
- switched to db admin
- >config={ _id:"policydb", members:[ {_id:0,host:'10.68.4.209:10002',priority:2}, {_id:1,host:'10.68.4.209:10001',priority:1},
- ... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] };
- {
- "_id" : "policydb",
- "members" : [
- {
- "_id" : 0,
- "host" : "10.68.4.209:10002",
- "priority" : 2
- },
- {
- "_id" : 1,
- "host" : "10.68.4.209:10001",
- "priority" : 1
- },
- {
- "_id" : 2,
- "host" : "10.68.4.209:10000",
- "arbiterOnly" : true
- }
- ]
- }
- rs.initiate(config) #初始化
- rs.status() #查看集群狀態(tài)
10.68.4.29
①建立數(shù)據(jù)文件夾和日志文件夾
mdkir /data/{master,slave,arbiter}
mkdir /data/log/mongodb/{master,slave,arbiter} -p
②建立配置文件
- #master.conf
- dbpath=/data/master
- logpath=/data/log/mongodb/master/mongodb.log
- pidfilepath=/var/run/mongo_master.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb2
- port=10002
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #slave.conf
- dbpath=/data/slave
- logpath=/data/log/mongodb/slave/mongodb.log
- pidfilepath=/var/run/mongo_slave.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb2
- port=10001
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #arbiter.conf
- dbpath=/data/arbiter
- logpath=/data/log/mongodb/arbiter/mongodb.log
- pidfilepath=/var/run/mongo_arbiter.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb2
- port=10000
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- ③啟動(dòng)mongodb
- /etc/init.d/mongodb_master start
- /etc/init.d/mongodb_slave start
- /etc/init.d/mongodb_arbiter start
④配置主、備、仲裁節(jié)點(diǎn)
主節(jié)點(diǎn):
- # /usr/local/mongodb/bin/mongo 10.68.4.209:10002
- MongoDB shell version: 2.4.9
- connecting to: 10.68.4.209:10002/test
- > use admin
- switched to db admin
- > config={ _id:"policydb2", members:[ {_id:0,host:'10.68.4.29:10002',priority:2}, {_id:1,host:'10.68.4.29:10001',priority:1},
- ... {_id:2,host:'10.68.4.209:10000',arbiterOnly:true}] };
- {
- "_id" : "policydb",
- "members" : [
- {
- "_id" : 0,
- "host" : "10.68.4.29:10002",
- "priority" : 2
- },
- {
- "_id" : 1,
- "host" : "10.68.4.29:10001",
- "priority" : 1
- },
- {
- "_id" : 2,
- "host" : "10.68.4.29:10000",
- "arbiterOnly" : true
- }
- ]
- }
- rs.initiate(config) #初始化
- rs.status() #查看集群狀態(tài)
10.68.4.30
①建立數(shù)據(jù)文件夾和日志文件夾
mdkir /data/{master,slave,arbiter}
mkdir /data/log/mongodb/{master,slave,arbiter} -p
②建立配置文件
- #master.conf
- dbpath=/data/master
- logpath=/data/log/mongodb/master/mongodb.log
- pidfilepath=/var/run/mongo_master.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb3
- port=10002
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #slave.conf
- dbpath=/data/slave
- logpath=/data/log/mongodb/slave/mongodb.log
- pidfilepath=/var/run/mongo_slave.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb3
- port=10001
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
- #arbiter.conf
- dbpath=/data/arbiter
- logpath=/data/log/mongodb/arbiter/mongodb.log
- pidfilepath=/var/run/mongo_arbiter.pid
- #directoryperdb=true
- logappend=true
- replSet=policydb3
- port=10000
- oplogSize=10000
- fork=true
- noprealloc=true
- profile=1
- slowms=200
③啟動(dòng)mongodb
/etc/init.d/mongodb_master start
/etc/init.d/mongodb_slave start
/etc/init.d/mongodb_arbiter start
④配置主、備、仲裁節(jié)點(diǎn)
主節(jié)點(diǎn):
- # /usr/local/mongodb/bin/mongo 10.68.4.209:10002
- MongoDB shell version: 2.4.9
- connecting to: 10.68.4.209:10002/test
- > use admin
- switched to db admin
- > config={ _id:"policydb3", members:[ {_id:0,host:'10.68.4.30:10002',priority:2}, {_id:1,host:'10.68.4.30:10001',priority:1},
- ... {_id:2,host:'10.68.4.30:10000',arbiterOnly:true}] };
- {
- "_id" : "policydb",
- "members" : [
- {
- "_id" : 0,
- "host" : "10.68.4.30:10002",
- "priority" : 2
- },
- {
- "_id" : 1,
- "host" : "10.68.4.30:10001",
- "priority" : 1
- },
- {
- "_id" : 2,
- "host" : "10.68.4.30:10000",
- "arbiterOnly" : true
- }
- ]
- }
- rs.initiate(config) #初始化
- rs.status() #查看集群狀態(tài)
#p#
2.Mongod 創(chuàng)建單個(gè)分片的配置服務(wù)器
① 創(chuàng)建配置目錄
10.68.4.209 mkdir /data/config
10.68.4.29 mkdir /data/config
10.68.4.30 mkdir /data/config
②準(zhǔn)備配置服務(wù)器的配置文件
3個(gè)服務(wù)器的配置服務(wù)器的配置文件一致
- #config.conf
- dbpath=/data/config
- logpath=/data/log/mongodb/config/mongodb.log
- pidfilepath=/var/run/mongo_config.pid
- directoryperdb=true
- logappend=true
- port=10003
- fork=true
- configsvr=true
③啟動(dòng)配置服務(wù)器
/etc/init.d/mongodb_config start
3.Mongod 創(chuàng)建并配置mongos和開啟分片模式
① 創(chuàng)建日志目錄
Mkdir -p /data/log/mongodb/mongos/
② 準(zhǔn)備mongos的配置文件
- #mongos.conf
- logpath=/data/log/mongodb/mongos/mongodb.log
- pidfilepath=/var/run/mongo_mongos.pid
- logappend=true
- port=10004
- fork=true
- configdb=10.68.4.209:10003,10.68.4.29:10003,10.68.4.30:1000
③ 啟動(dòng)mongos
/etc/init.d/mongodb_mongos start
④ 配置分片
- sh.addShard("policydb/10.68.4.209:10002")
- sh.addShard("policydb2/10.68.4.29:10002")
- sh.addShard("policydb3/10.68.4.30:10002")
- sh.enableSharding("policydb")
- db.runCommand({"shardcollection":"policydb.fullPolicyTextInfo_history", "key":{"key":1}})
- db.printShardingStatus() #查看分片狀態(tài)
- sh.status({verbose:true})
- sh.status()
3.快速創(chuàng)建副本集和配置服務(wù)腳本
上圖
1.圖1
2.圖2 config.conf配置文件
3.圖3
附mongodb一鍵安裝腳本:
http://pan.baidu.com/s/1c0zvP7M
附mongodb副本集和配置服務(wù)器一鍵配置腳本:
http://pan.baidu.com/s/1GuQ0A