Mongodb Replica Set + Sharding集群

1.  配置副本集
1)、启动各mongod节点

mkdir -p /var/store/mongodb/{shard11,shard12,shard13,shard21,shard22,shard23}
mkdir -p /var/log/mongodb/
sudo chmod 777 -R /var/store/mongdb
sudo chmod 777 -R /var/log/mongodb

mongod --shardsvr --replSet shard1/127.0.0.1:27001 --port 27001 --dbpath /var/store/mongodb/shard11 --oplogSize 10000 --logpath /var/log/mongodb/shard11.log --logappend --maxConns 10000 --quiet --fork --directoryperdb
mongod --shardsvr --replSet shard1/127.0.0.1:27003 --port 27003 --dbpath /var/store/mongodb/shard12 --oplogSize 10000 --logpath /var/log/mongodb/shard12.log --logappend --maxConns 10000 --quiet --fork --directoryperdb
mongod --shardsvr --replSet shard1/127.0.0.1:27005 --port 27005 --dbpath /var/store/mongodb/shard13 --oplogSize 10000 --logpath /var/log/mongodb/shard13.log --logappend --maxConns 10000 --quiet --fork --directoryperdb

mongod --shardsvr --replSet shard2/127.0.0.1:27002 --port 27002 --dbpath /var/store/mongodb/shard21 --oplogSize 10000 --logpath /var/log/mongodb/shard21.log --logappend --maxConns 10000 --quiet --fork --directoryperdb
mongod --shardsvr --replSet shard2/127.0.0.1:27004 --port 27004 --dbpath /var/store/mongodb/shard22 --oplogSize 10000 --logpath /var/log/mongodb/shard22.log --logappend --maxConns 10000 --quiet --fork --directoryperdb
mongod --shardsvr --replSet shard2/127.0.0.1:27006 --port 27006 --dbpath /var/store/mongodb/shard23 --oplogSize 10000 --logpath /var/log/mongodb/shard23.log --logappend --maxConns 10000 --quiet --fork --directoryperdb

2)、初始化副本集

mongo 127.0.0.1:27001
rs.initiate({_id:"shard1",members:[
{_id : 1, host : "127.0.0.1:27001", priority:3},
{_id : 2, host : "127.0.0.1:27003", priority:2},
{_id : 3, host : "127.0.0.1:27005", priority:1}]});
exit

mongo 127.0.0.1:27002
rs.initiate({_id : "shard2",members : [
{_id : 1, host : "127.0.0.1:27002", priority:3},
{_id : 2, host : "127.0.0.1:27004", priority:2},
{_id : 3, host : "127.0.0.1:27006", priority:1}]});
exit


2.  配置config server和mongos(路由进程)

mkdir /var/store/mongodb/config
sudo chmod 777 -R /var/store/mongdb
mongod --configsvr --dbpath /var/store/mongodb/config --port 29000 --logpath /var/log/mongodb/config.log --logappend --fork --directoryperdb
mongos --ipv6 --configdb 127.0.0.1:29000 --port 27017 --logpath /var/log/mongodb/mongos.log --logappend --fork //--ipv6:这个参数可以使mongodb支持IPv6

3.  Mongodb添加分片(副本集)

//连接mongodb路由(mongos),并切换到admin
mongo --port 27017
use admin
db.runCommand({addshard:"shard1/127.0.0.1:27001,127.0.0.1:27003,127.0.0.1:27005",name:"shard1"});    
db.runCommand({addshard:"shard2/127.0.0.1:27002,127.0.0.1:27004,127.0.0.1:27006",name:"shard2"});     
db.runCommand({listshards:1});  //如果列出(sharding)了以上二个你加的shards,表示shards已经配置成功

4.  激活数据库分片

//连接mongos服务器,并切换到admin
mongo --port 27017
use admin
//sdc数据库开启分片功能
db.runCommand( { enablesharding:"iot"})
// 对sdc数据库的集合进行分片
db.runCommand({"shardcollection":"iot.dataUp","key":{"_id":1}})
//查看分片以及使用分片的数据库
db.printShardingStatus();

5.  添加索引

#######server 192.168.1.230
1).添加索引
> use sdc  
###BLog
/* 创建索引会对数据库添加写锁,如果数据集比如大,会将线上读写数据库的操作挂起,以等待索引创建结束。
这影响了数据库的正常服务,我们可以通过在创建索引时加background:true 的选项,让创建工作在后台执行,
这时候创建索引还是需要加写锁,但是这个写锁不会直接独占到索引创建完成,而是会暂停为其它读写操作让路,
不至于造成严重的性能影响。*/
> db.BLog.ensureIndex({'OperateType':1},{background:true})
> db.BLog.ensureIndex({'InsID':1})
> db.BLog.ensureIndex({'OperateObjects':1})
###CallBAPILog暂时不用添加索引(只有insert操作)
###DevInsControl(加索引时间约5分钟)
> db.DevInsControl.ensureIndex({'CreateTime':1})
> db.DevInsControl.ensureIndex({'ControlMsg':1})
###DeviceInsAlert
> db.DeviceInsAlert.ensureIndex({'InsID':1})
> db.DeviceInsAlert.ensureIndex({'CreateTime':1})
###DeviceInsHty
> db.DeviceInsHty.ensureIndex({'CreateTime':1})
> db.DeviceInsHty.ensureIndex({'DeviceType':1})
###DeviceInsStatus数据量不到2000,暂时不必加索引
> db.system.indexes.find()  
2).查询索引
db.table.getIndexes()
3).删除索引
db.mycoll.dropIndex(name)  
db.mycoll.dropIndexes()

6.通过ipv6连接mongoDB
mongo 240c:f:0:ffff::230:27017 --ipv6

总之:以上配置就完成了,配置完成之后半个小时后配置生效(mongodb自动分片需要时间)

三.  性能测试
#######server 192.168.1.230
1.测试mongoDB的sharding(分片)功能---负载均衡
//连接mongos服务器,并切换到admin
mongo --port 27017
use sdc
for(var i=1;i<200000;i++) db.BLog.save({uid:i,uname:'BLog'+i,OperateTime:i});  
db.BLog.stats()
db.DeviceInsHty.stats()

2.测试mongoDB的Replica Set性能----故障转移
1).ps aux | grep mongo
2).kill掉Replica Set的PRIMARY节点
3).db.DeviceInsHty.count()

四.  注意事项

A.  为什么从节点会出现recovering状态?
官方参考文档:http://www.mongodb.org/display/DOCS/Resyncing+a+Very+Stale+Replica+Set+Member
B.  正式上线后,操作日志超过oplogsize的值后,如何解决?(设置成最大值20000,单位是MB,即20G)
1.清空mongodb数据节点(包括/var/mongodb/shard12和/var/log/mongodb)
2.重新启动各个mongodb节点,之后mongodb会自动完成同步
未找到详细参考文档说明,以下可参考:
http://docs.mongodb.org/manual/core/replication/#replica-set-oplog-sizing
http://hi.baidu.com/savagert/item/c4e1205d1653d413aaf6d739
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值