ubuntu MonogoDB Sharding + Replica Set配置集群

 要构建一个 MongoDB Sharding Cluster(集群),需要三种角色:

Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障

Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。

Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库

 

MongoDB架构

 

 

 

  1. 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
  2. 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
  3. 每台机器运行一个mongod实例,作为3个config server
  4. 每台机器运行一个mongs进程,用于客户端连接
 现在开始配置:

 

 系统环境:Ubuntu10.2

 MongoDB版本:Mongodb1.81

 由于没有现实中没有实际这么多台服务,这个配置我就只在一台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 10001

config={_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 10003

config={_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。

 

 

 

 

 

 


 

 

 


 

 

 

 

 

 

  

 

posted @ 2011-04-17 16:52  走到天亮  阅读(1800)  评论(2编辑  收藏  举报