Mongodb 分片 + 复制集

来源:互联网 发布:初学者mint和ubuntu 编辑:程序博客网 时间:2024/05/28 11:50

任务:创建一个Mongodb集群,采用分片(shard)加复制集(replication)。

一、规划
实例:
三个mongodb实例,作为configserver使用
三个mongodb实例,作为分片1使用,其中一个为主实例,另外两个为副本集,命名为:rs1
三个mongodb实例,作为分片2使用,其中一个为主实例,另外两个为副本集,命名为:rs2
一个mongos(路由)实例

端口:
10000 - 10002 作为configserver的mongodb实例端口
20000 - 20002 作为分片1的实例端口
30000 - 30002 作为分片1的实例端口
27017 作为mongos的端口

路径:
按照实例创建不同的文件夹,用于存放数据,另外config文件夹存放配置文件
mkdir /data/mongodata/{10000,10001,10002,20000,20001,20002,27017,30000,30001,30002,config} 


二、创建config server

编辑配置文件
vi /data/mongodata/config/10000.cnf
#####################################

configsvr=true

dbpath=/data/mongodata/10000#数据文件路径

logpath=/data/mongodata/10000/10000db.log#日志文件路径

port=10000#实例端口

smallfiles=true

fork=true
#####################################


启动端口10000的mongodb 实例
mongod -f  /data/mongodata/config/10000.cnf

 


以同样的方式启动10001,10002两个实例,注意配置文件需要修改端口和路径,启动完成后可以看到三个mongod实例
ps -ef | grep mongo

 

二、创建副本集rs1
创建配置文件
vi /data/mongodata/config/20000.cnf
##################################### 

replSet=rs1#副本集名称,这个很重要,一定要和别的地方对上

dbpath=/data/mongodata/20000 #数据文件路径

logpath=/data/mongodata/20000/20000db.log #日志文件路径

port=20000

smallfiles=true

fork=true

#####################################


启动端口20000的mongodb实例
mongod -f /data/mongodata/config/20000.cnf
 


以同样的方式启动20001,20002端口的两个mongodb实例。
启动成功后进入20000实例,并切换到admin数据库
mongo --port 20000
>use admin



将另外两个实例添加到副本集rs1里。

rsconf ={_id:'rs1',members:[{_id:0,host:'127.0.0.1:20000'},{_id:1,host:'127.0.0.1:20001'},{_id:2,host:'127.0.0.1:20002'},]}



初始化副本集rs1

rs.initiate(rsconf)



三、创建副本集rs2
以创建rs1的方式创建rs2,注意修改对应的参数即可。

四、创建mongos实例,用于管理分片

编辑配置文件
vi /data/mongodata/config/27017.cnf
#####################################

configdb=127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002

logpath=/data/mongodata/27017/27017db.log

port=27017

fork=true

#####################################


启动mongos
mongos -f 27017.cnf

五、将两个副本集添加到分片集群中
进入mongos,执行sh.addShard命令

mongos>sh.addShard("rs1/127.0.0.1:20000")

mongos> sh.addShard("rs2/127.0.0.1:30000")



 

添加需要分片的数据库和表
sh.enableSharding("Enson")



sh.shardCollection("Enson.dz",{"sn":1})




插入100万行数据测试
for(var i =1; i <= 1000000; i++) db.dz.insert(sn:i,name:"verylonggggggggggggggggggggggggggggg") 

插入完成后使用db.dz.stat()检查结果集是否分片到rs1和rs2上。


0 0
原创粉丝点击