码迷,mamicode.com
首页 > 数据库 > 详细

mongodb分片集群实战搭建

时间:2015-09-14 14:04:05      阅读:394      评论:0      收藏:0      [点我收藏+]

标签:

架构图:

技术分享


1.准备机器,IP分别设置为

192.168.1.201
192.168.1.202
192.168.1.203

2.在每个机器上下载mongodb

3.在每个机器上建立mongos.config,shard1,shard2.shard3五个文件夹

mongos:数据库集群请求的入口(生产环境应有多个)

config:配置服务器,存储所有数据库元信息(路由、分片)的配置(对应mongos)

shard1:分片1

shard2:分片2

shard3:分片3

(mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例

   创建日志文件和数据文件(mongos文件不存数据)

#建立mongos目录
mkdir -p mongos/log


#建立config server数据文件存放目录和日志目录
mkdir -p congif/data
mkdir -p congif/log


#建立shard1数据文件存放目录和日志目录
mkdir -p shard1/data
mkdir -p shard1/log


#建立shard2数据文件存放目录和日志目录
mkdir -p shard2/data
mkdir -p shard2/log


#建立shard3数据文件存放目录和日志目录
mkdir -p shard3/data
mkdir -p shard3/log

技术分享

4.端口设定(开启每个机器所对应端口防火墙:iptables -I INPUT -p tcp --dport 20000 -j ACCEPT)

mongos:20000
config:21000
shard1:22001
shard2:22002
shard3:22003



5.启动每一台服务器配置服务器

bin/mongod --configsvr --dbpath config/data --port 21000 --logpath config/log/mongod.log --fork





技术分享

6.启动每一台服务器mongos服务器

bin/mongos --configdb 192.168.1.201:21000,192.168.1.202:21000,192.168.1.203:21000  --port 20000   --logpath mongos/log/mongos.log --fork


7.启动配置每个模块中的副本集


#在每个机器里分别设置分片1服务器及副本集shard1
bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath shard1/data  --logpath shard1/log/shard1.log --fork --nojournal  --oplogSize 10



#在每个机器里分别设置分片2服务器及副本集shard2
bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath shard2/data  --logpath shard2/log/shard2.log --fork --nojournal  --oplogSize 10



#在每个机器里分别设置分片3服务器及副本集shard3
bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath shard3/data  --logpath shard3/log/shard3.log --fork --nojournal  --oplogSize 10



技术分享

8.分别对每个分片配置副本集

#任意一台机器

#设置第一个分片副本集、连接shard1
bin/mongo 192.168.1.201:22001

#使用admin数据库
use admin

#定义副本集配置

config = { _id:"shard1", members:[
                     {_id:0,host:"192.168.1.201:22001"},
                     {_id:1,host:"192.168.1.202:22001"},
                     {_id:2,host:"192.168.1.203:22001",arbiterOnly:true}
                ]
         }

#初始化副本及:
rs.initiate(config);




技术分享

#设置第二个分片副本集、shard2
bin/mongo 192.168.1.201:22002

#使用admin数据库
use admin

#定义副本集配置

config = { _id:"shard2", members:[
                     {_id:0,host:"192.168.1.201:22002"},
                     {_id:1,host:"192.168.1.202:22002"},
                     {_id:2,host:"192.168.1.203:22002",arbiterOnly:true}
                ]
         }

#初始化副本及:

rs.initiate(config);



#设置第三个分片副本集、shard3
bin/mongo 192.168.1.201:22003

#使用admin数据库
use admin

#定义副本集配置

config = { _id:"shard3", members:[
                     {_id:0,host:"192.168.1.201:22003"},
                     {_id:1,host:"192.168.1.202:22003"},
                     {_id:2,host:"192.168.1.203:22003",arbiterOnly:true}
                ]
         }

#初始化副本及:
rs.initiate(config);



9.设置分片配置,让分片生效


#连接mongos
bin/mongo  192.168.1.201:20000

#使用admin数据库
use  admin

#串联路由服务器、分配副本集
db.runCommand( { addshard :"shard1/192.168.1.201:22001,192.168.1.202:22001,192.168.1.203:22001"})
db.runCommand( { addshard :"shard2/192.168.1.201:22002,192.168.1.202:22002,192.168.1.203:22002"})
db.runCommand( { addshard :"shard3/192.168.1.201:22003,192.168.1.202:22003,192.168.1.203:22003"})



技术分享

#查看分片服务器的配置
db.runCommand( { listshards : 1 } );



技术分享

10.连接在mongos上,准备让指定的数据库、指定的集合分片生效

#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定数据库里需要分片的集合和片键
db.runCommand( { shardcollection : "testdb.person",key : {x: 1} } )



技术分享

11.java程序与集群关联

List<ServerAddress> addresses = new ArrayList<ServerAddress>();
		addresses.add(new ServerAddress("192.168.1.201" , 20000));
		addresses.add(new ServerAddress("192.168.1.202" , 20000));
		addresses.add(new ServerAddress("192.168.1.203" , 20000));
		MongoClient client = new MongoClient(addresses);
		MongoDatabase db =  client.getDatabase( "testdb" );
        MongoCollection coll = db.getCollection( "person" );
        long start = System.currentTimeMillis();
        System.out.println("start:"+start);
        
         List<Document> add = new ArrayList<Document>();
        for(int i=1; i<400000; i++){
        	add.add(new Document().append("x", i).append("name", "daxiong"+i));
        }
        coll.insertMany(add);
       /* FindIterable<Document> findInterable = coll.find();
        for(Document d : findInterable){
        	System.out.println(d.toJson());
        }*/

        System.out.println("耗时:"+(System.currentTimeMillis() - start)/1000);

#查看分片状态命令
db.person.stats();
db.printShardingStatus()


12.重启服务器后,再次启动mongodb集群命令


#1.启动每个config service
bin/mongod --configsvr --dbpath config/data --port 21000 --logpath config/log/mongod.log --fork
#2.启动每个mongos(搭载所有config)
bin/mongos --configdb 192.168.1.201:21000,192.168.1.202:21000,192.168.1.203:21000  --port 20000   --logpath mongos/log/mongos.log --fork
#3.启动每个机器的每个分片、副本集群、仲裁
bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath shard1/data  --logpath shard1/log/shard1.log --fork --nojournal  --oplogSize 10

bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath shard2/data  --logpath shard1/log/shard2.log --fork --nojournal  --oplogSize 10

bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath shard3/data  --logpath shard1/log/shard3.log --fork --nojournal  --oplogSize 10

#4.连接任意mongos


参考:http://www.lanceyan.com/tech/arch/mongodb_shard1.html





mongodb分片集群实战搭建

标签:

原文地址:http://my.oschina.net/daxiong0615/blog/505822

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!