ubuntu MonogoDB Sharding + Replica Set配置集群
时间:2011-04-17 来源:走到天亮
要构建一个 MongoDB Sharding Cluster(集群),需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库
MongoDB架构
- 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
- 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
- 每台机器运行一个mongod实例,作为3个config server
- 每台机器运行一个mongs进程,用于客户端连接
系统环境:Ubuntu10.2
MongoDB版本:Mongodb1.82
由于没有现实中没有实际这么多台服务,这个配置我就只在一台Ubuntu服务器中完成配置,其它机器配置应该是一样。在有真实机器的环境中注意各个服务器之间的MongoDB的版本一定要一致,不然可能会出现rs.initiate(config)不能正确添加的问题
首先分配shard
1. mongodb端口 10001和10011 为一组shard,和一组Replica Set
步骤:
1)$ mkdir -p /usr/MonogoData/shard1_10001
2)$ mkdir -p/usr/MonogoData/shard1_10011
3)
$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --shardsvr --port 10001 --dbpath /usr/MonogoData/shard1_10001/ --logpath /usr/MonogoData/shard1_10001/log.log --replSet shard1 --rest$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --shardsvr --port 10011 --dbpath /usr/MonogoData/shard1_10011/ --logpath /usr/MonogoData/shard1_10011/log.log --replSet shard1 --rest
运行完成后,进入任意一个MongoDB端口,配置Replica Set
$ ~/liaoyong/down/mongodb1.8.2/bin/mongo --prot 10001config={_id='shard1',members=[{_id:0,host:'192.168.0.182:10001'},{_id:1,host:'192.168.0.182:10011'}]}
rs.initiate(config)
rs.status()
这样,第1个shard就配置好了。
接下来配置第2组shard
1)$ mkdir -p /usr/MonogoData/shard3_10003
2)$ mkdir -p/usr/MonogoData/shard3_10033
3)
$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/MonogoData/shard3_10003/ --logpath /usr/MonogoData/shard3_10003/log.log --replSet shard3 --rest$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --shardsvr --port 10033 --dbpath /usr/MonogoData/shard3_10033/ --logpath /usr/MonogoData/shard3_10033/log.log --replSet shard3 --rest
运行完成后,进入任意一个MongoDB端口,配置Replica Set
$ ~/liaoyong/down/mongodb1.8.2/bin/mongo --prot 10003config={_id='shard3',members=[{_id:0,host:'192.168.0.182:10003'},{_id:1,host:'192.168.0.182:10033'}]}
rs.initiate(config)
rs.status()
好了,现在开始配置1台Mongodb Config
$ mkdir -p /usr/MonogoData/Config_20001
$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --configsvr --port 20001 --dbpath /usr/MonogoData/config_20001/ --logpath /usr/MonogoData/config_20001/log.log --rest $ ps aux | grep mongodb | grep -v grep查看是否mongodb的进程都起来了
下面接着配置Mongs
$ mkdir -p /usr/MonogoData/master
$ ~/liaoyong/down/mongodb1.8.2/bin/mongos --fork --port 40000 --logpath /usr/data/master/log.log --chunkSize 1--configdb "192.168.0.182:20001"
进入Mongos
$ ~/liaoyong/down/mongodb1.8.2/bin/mongo --port 40000
>use admin
>db.runCommand({ addshard:'shard1/192.168.0.182:10001,192.168.0.182:10011' })>db.runCommand({ addshard:'shard3/192.168.0.182:10003,192.168.0.182:10033' })
>db.runCommand({listshards:1})
接下来进行切片
db.runCommand({ enablesharding:'liaoyongdb' }) #指定切片数据库
db.runCommand({shardcollection:'liaoyongdb.test',key:{_id:1}}) #指定切片数据的表
printShardingStatus()
好了,到这里集群就已经配置好了
我这里由于是同一台电脑,我插入了1百w数据的时候,内存都用完了,下面就是大家自己试试了。
希望能帮助大家共同学习MongoDB。