Mongodb 集群(主从复制、副本集、分片、副本集+分片)

一、主从复制(master slave)



 

前提准备

   1、在环境变量的path变量的最前面加入:E:\mongodb\bin;

   2、创建主数据库的存储路径:E:\mongodb\master-slave\8888

   3、创建从数据库的存储路径:E:\mongodb\master-slave\9999

主数据库的配置:

 E:\mongodb\master-slave\8888.conf配置文件

dbpath =E:\mongodb\master-slave\8888 #主数据库存储地址
logpath=E:\mongodb\master-slave\8888\mongodb.log
port = 8888 #主数据库端口号
bind_ip = 127.0.0.1 #绑定ip地址
master = true #确定是主服务器

  E:\mongodb\master-slave\8888mongod.bat shell启动脚本    服务端

mongod --config 8888.conf

  E:\mongodb\master-slave\8888mongo.bat shell启动脚本    客户端

mongo 127.0.0.1:8888

从数据库的配置:

  E:\mongodb\master-slave\9999.conf配置文件

dbpath =E:\mongodb\master-slave\9999 #从数据库存储地址
logpath=E:\mongodb\master-slave\9999\mongodb.log
port = 9999 #主数据库端口号
bind_ip = 127.0.0.1 #绑定ip地址
source = 127.0.0.1:8888 #确定主数据库端口,该配置可以在从数据库中动态添加或者删除
slave = true #确定是从服务器

   E:\mongodb\master-slave\9999mongod.bat shell启动脚本  服务端

mongod --config 9999.conf
   E:\mongodb\master-slave\9999mongo.bat shell启动脚本   客户端
mongo 127.0.0.1:9999

一些其它配置参数说明:

 1、only              从节点-->选择只同步指定数据库  默认是所有数据库  

         eg: only=test 在从数据库中只同步test数据库。

如果加上该配置项报 --only != test from local.sources collection 错误时

解决办法:执行下面命令,删除错误的信息即可 

db.sources.remove({'host':'127.0.0.1:8888'})

如果删除后还能够查询到那就先停掉主数据库和从数据库,然后再启动从数据库 然后再执行删除操作。

 2、slavedelay   从节点-->设置主数据库同步到从数据库延迟的时间(单位是秒)

 3、fastsync        从节点-->以主数据库节点的快照为节点启动数据库同步。快速同步

 4、autoresync   从节点-->如果主数据库和从数据库不同步则自动从新同步 (对已经运行了一段时间的主数据库同步添加从数据库此时主数据库和从数据库是不同步的)

 5、oplogSize    主节点-->设置主oplog的大小(主节点操作记录到local的oplog中)

 

 

利用shell动态添加和删除从节点:

 添加节点:

 

删除节点:

db.sources.remove({'host':'127.0.0.1:8888'})

 

配置主从数据库的适用场景:

主数据库库做增删改操作,从数据库做查询操作,提高数据库的利用率。

 注意:主从配置 主数据库可以增删改查,从数据库只能查询。

 

生产环境不推荐使用

理由:1,故障转移完全人工

 2,故障恢复困难

 

 

二、副本集(replica set)



 

概念: 有自动故障恢复功能的主从集群。

       主从集群和副本集最大的区别就是副本集没有没有固定的“主节点”。整个集群会选出一个“主节点”,当其挂掉后,表决节点(arbiter)又在剩下的从节点中选择其它节点作为“主节点”,副本集总有一个活跃点(primary)和一个或多个备份节点(secondary)。副本集的备份节点不能被增删改查,只能起备份作用。

 

前提准备

1、在环境变量的path变量的最前面加入:E:\mongodb\bin;

2、创建节点1的存储路径 E:\mongodb\replSet\10001

3、创建节点2的存储路径 E:\mongodb\replSet\10002

4、创建节点3的存储路径 E:\mongodb\replSet\10003

 

节点1配置:

E:\mongodb\replSet\10001.conf        配置文件配置

dbpath=E:\mongodb\replSet\10001 #数据目录
logpath=E:\mongodb\replSet\10001\mongodb.log   #日志目录
logappend=true		#日志以追加方式添加
port=10001 #端口
bind_ip=127.0.0.1 #绑定ip地址
replSet=replSet/127.0.0.1:10002    #副本集名称

E:\mongodb\replSet\10001mongod.bat  启动脚本    服务端

mongod --config 10001.conf

E:\mongodb\replSet\10001mongo.bat   启动脚本    服务端

mongo 127.0.0.1:10001

 

 

节点2配置:

E:\mongodb\replSet\10002.conf        配置文件配置

dbpath=E:\mongodb\replSet\10002 #数据目录
logpath=E:\mongodb\replSet\10002\mongodb.log   #日志目录
logappend=true		#日志以追加方式添加
port=10002 #端口 
bind_ip=127.0.0.1 #绑定ip地址
replSet=replSet/127.0.0.1:10001   #副本集名称

 

E:\mongodb\replSet\10002mongod.bat    启动脚本    服务端

mongod --config 10002.conf

E:\mongodb\replSet\10002mongo.bat      启动脚本    客户端

mongo 127.0.0.1:10002

 

节点3配置:

 

E:\mongodb\replSet\10003.conf        配置文件配置

dbpath=E:\mongodb\replSet\10003 #数据目录
logpath=E:\mongodb\replSet\10003\mongodb.log   #日志目录
logappend=true		#日志以追加方式添加
port=10003 #端口 
bind_ip=127.0.0.1 #绑定ip地址
replSet=replSet/127.0.0.1:10001,127.0.0.1:10002   #副本集名称

E:\mongodb\replSet\10003mongod.bat        启动脚本    服务端

mongod --config 10003.conf

E:\mongodb\replSet\10003mongo.bat          启动脚本    客户端

mongo 127.0.0.1:10003

 初始化节点(只能初始化一次)method1: 随便登录一个节点,以10001为例

 双击 E:\mongodb\replSet\10001mongo.bat

use admin

db.runCommand({
    "replSetInitiate": {
        _id: "replSet",
        members: [
            {
                _id: 0,
                host: "127.0.0.1:10001",
                priority: 3
            },
            {
                _id: 1,
                host: "127.0.0.1:10002",
                priority: 2
            },
            {
                _id: 2,
                host: "127.0.0.1:10003",
				priority: 1
            }
        ]
    }
});

初始化节点(只能初始化一次) method2:

配置:

var rsconf = {
        _id: "replSet",
        members: [
            {
                _id: 0,
                host: "127.0.0.1:10001",
                priority: 3
            },
            {
                _id: 1,
                host: "127.0.0.1:10002",
                priority: 2
            },
            {
                _id: 2,
                host: "127.0.0.1:10003",
				priority: 1
            }
        ]
}

 根据配置做初始化:

rs.initiate(rsconf);

自动化shell脚本配置副本集replSet.sh

#!/bin/bash 
IP=127.0.0.1
NA=replSetName

if [ "$1" == "reset" ];then
pkill -9 mongo
rm -rf /usr/local/mongodb3.4.6/replicaSet/rs*
mkdir -p /usr/local/mongodb3.4.6/replicaSet/rs1 /usr/local/mongodb3.4.6/replicaSet/rs2 /usr/local/mongodb3.4.6/replicaSet/rs3
exit;
fi

if [ "$1" == "install" ];then
/usr/local/mongodb3.4.6/bin/mongod --dbpath /usr/local/mongodb3.4.6/replicaSet/rs1 --logpath /usr/local/mongodb3.4.6/replicaSet/rs1/mongodb.log --bind_ip ${IP} --port 30001 --fork --smallfiles --replSet ${NA}
/usr/local/mongodb3.4.6/bin/mongod --dbpath /usr/local/mongodb3.4.6/replicaSet/rs2 --logpath /usr/local/mongodb3.4.6/replicaSet/rs2/mongodb.log --bind_ip ${IP} --port 30002 --fork --smallfiles --replSet ${NA}
/usr/local/mongodb3.4.6/bin/mongod --dbpath /usr/local/mongodb3.4.6/replicaSet/rs3 --logpath /usr/local/mongodb3.4.6/replicaSet/rs3/mongodb.log --bind_ip ${IP} --port 30003 --fork --smallfiles --replSet ${NA}

/usr/local/mongodb3.4.6/bin/mongo --host 127.0.0.1 --port 30001 <<EOF
use admin
var rsconf = {
		_id:'${NA}',
		members:[
			{_id:10,host:'${IP}:30001',priority:3},
			{_id:11,host:'${IP}:30002',priority:2},
			{_id:12,host:'${IP}:30003',priority:1}
		]
};
rs.initiate(rsconf);
EOF
exit;
fi

关闭:sh replSet.sh reset

启动:sh replSet.sh install

备注:priority 的值越大就越容易作为活跃节点 (priority大的节点关闭后重启之后其依然会被作为主节点)

查看当前副本集的状态命令

rs.status()

副本集上添加节点

rs.add("127.0.0.1:10003");

副本集上删除节点

rs.remove("127.0.0.1:10003");

查看从节点如果报:"errmsg" : "not master and slaveOk=false" 错误说明从节点不允许读写

解决方法如下:SECONDARY> rs.slaveOk();

db.shutDownServer();  关闭服务端的命令

查看db 所有命令的方法  db.help();

此时查看一下各个节点的状态:

db.$cmd.findOne({ismaster:1});

 

 

三、分片(sharding)

   

 

    概念:分片是指将数据拆分,将其分散存储在不同机器上的过程。

    mongos 路由进程

 

在 windows上的配置mongodb  2.6.3分片集群部署

前提准备:

1、在环境变量的path变量的最前面加入:E:\mongodb\bin;

2、创建config的存储路径 E:\mongodb\sharding\19999config

3、创建节点1的存储路径 E:\mongodb\sharding\20001

4、创建节点2的存储路径 E:\mongodb\sharding\20002

5、创建节点3的存储路径 E:\mongodb\sharding\20003

 

1,config配置:

E:\mongodb\sharding\19999config.conf  配置文件

dbpath=E:\mongodb\sharding\19999config #数据目录
port=19999 #端口号

E:\mongodb\sharding\19999configmongod.bat

mongod --config 19999config.conf

2,路由配置:

E:\mongodb\sharding\20000mongos.conf  配置文件

port=20000 #端口号
configdb=127.0.0.1:19999     #配置

E:\mongodb\sharding\20000mongos.bat    路由服务

mongos --config 20000mongos.conf

3,分片配置:

分片1配置

E:\mongodb\sharding\20001.conf  配置文件

dbpath=E:\mongodb\sharding\20001 #数据目录
port=20001 #端口号

 E:\mongodb\sharding\20001mongod.bat     启动脚本    服务端

mongod --config 20001.conf

 E:\mongodb\sharding\20001mongo.bat          启动脚本  客户端

mongo 127.0.0.1:20001

分片2配置

E:\mongodb\sharding\20002.conf  配置文件

dbpath=E:\mongodb\sharding\20002 #数据目录
port=20002 #端口号

 E:\mongodb\sharding\20002mongod.bat     启动脚本    服务端

mongod --config 20002.conf

 E:\mongodb\sharding\20002mongo.bat          启动脚本  客户端

mongo 127.0.0.1:20002

分片3配置

E:\mongodb\sharding\20003.conf  配置文件

dbpath=E:\mongodb\sharding\20003 #数据目录
port=20003 #端口号

 E:\mongodb\sharding\20003mongod.bat     启动脚本    服务端

mongod --config 20003.conf

 E:\mongodb\sharding\20003mongo.bat          启动脚本  客户端

mongo 127.0.0.1:20003

 4,服务配置:

E:\mongodb\sharding\20000mongo.bat          启动脚本  客户端

 

mongo 127.0.0.1:20000
 

双击E:\mongodb\sharding\20000mongo.bat 

use admin

4.1 添加分片

db.runCommand({"addshard":"127.0.0.1:20001",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:20002",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:20003",allowLocal:true})
 allowLocal:true 表示允许分片能被客户端直接连接

4.2 开启数据库分片功能 {enablesharding:"<database name>"}

db.runCommand({"enablesharding":"sharding"})
4.3 指定集合中分片的片键 persion.age
db.runCommand({"shardcollection":"sharding.person","key":{"age":1}})

分片的片键是不是不能为空?

4.4 加入数据

use sharding

for(var i=0;i<10000000;i++){
	db.person.insert({name:'zhangsan',age:i});
}
 4.5 查看效果
db.printShardingStatus();
 

在CentOS上配置 MongoDB3.4.6上配置分片集群

注意:mongodb从3.4版本开始要求配置服务器必须是副本集

环境

配置服务器:

127.0.1.1:34998

127.0.1.1:34999

127.0.1.1:35000

路由服务器

127.0.0.1:35001

分片服务器

127.0.0.1:35002

127.0.0.1:35003

127.0.0.1:35004

db:3.4.6

-------------------------配置服务器---------------------

1.程序路径

程序文件路径

mkdir /usr/local/mongodb3.4.6/sharding/config1

mkdir /usr/local/mongodb3.4.6/sharding/config2

mkdir /usr/local/mongodb3.4.6/sharding/config3

数据文件路径

mkdir /usr/local/mongodb3.4.6/sharding/config1/data

mkdir /usr/local/mongodb3.4.6/sharding/config2/data

mkdir /usr/local/mongodb3.4.6/sharding/config3/data

日志文件路径

mkdir /usr/local/mongodb3.4.6/sharding/config1/log

mkdir /usr/local/mongodb3.4.6/sharding/config2/log

mkdir /usr/local/mongodb3.4.6/sharding/config3/log

2.配置文件

/usr/local/mongodb3.4.6/sharding/config1/config.conf 文件

dbpath=/usr/local/mongodb3.4.6/sharding/config1/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/config1/log/mongodb.logs   #日志文件

fork=true  #后台服务启动

port=34998 #端口号

configsvr=true   #设置为配置服务器

replSet=configdb    #副本集名称

/usr/local/mongodb3.4.6/sharding/config2/config.conf 文件

dbpath=/usr/local/mongodb3.4.6/sharding/config2/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/config2/log/mongodb.logs   #日志目录

fork=true  #后台服务启动

port=34999 #端口号

configsvr=true   #设置为配置服务器

replSet=configdb    #副本集名称

/usr/local/mongodb3.4.6/sharding/config3/config.conf 文件

dbpath=/usr/local/mongodb3.4.6/sharding/config3/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/config3/log/mongodb.logs   #日志目录

fork=true  #后台服务启动

port=35 #端口号

configsvr=true   #设置为配置服务器

replSet=configdb    #副本集名称

3.启动

./mongod --config /usr/local/mongodb3.4.6/sharding/config1/config.conf

./mongod --config /usr/local/mongodb3.4.6/sharding/config2/config.conf

./mongod --config /usr/local/mongodb3.4.6/sharding/config3/config.conf

4.创建复本集

登陆其中一个节点执行:

./mongo 127.0.0.1:35000

var configdb1={_id:'configdb',members:[

{_id:0,host:'127.0.0.1:35000',priority:3},

{_id:1,host:'127.0.0.1:34999',priority:1},

{_id:2,host:'127.0.0.1:34998',priority:2}]

};

rs.initiate(configdb1);

注意:_id的值'configdb'要和上面配置文件中replSet复本集的值定义的一致

-------------------------路由服务器---------------------

1.程序路径

程序文件路径

mkdir /usr/local/mongodb3.4.6/sharding/mongos

日志文件路径

mkdir /usr/local/mongodb3.4.6/sharding/mongos/log

2.配置文件

/usr/local/mongodb3.4.6/sharding/mongos/mongos.conf 文件

logpath=/usr/local/mongodb3.4.6/sharding/mongos/log/mongodb.logs   #日志路径

fork=true  #后台服务启动

port=35001 #端口号

configdb=configdb/127.0.0.1:35000,127.0.0.1:34999,127.0.0.1:34998 #配置服务器

3.启动

./mongos --config /usr/local/mongodb3.4.6/sharding/mongos/mongos.conf

-------------------------分片服务器---------------------

1.程序路径

程序文件路径

mkdir /usr/local/mongodb3.4.6/sharding/shard1

mkdir /usr/local/mongodb3.4.6/sharding/shard2

mkdir /usr/local/mongodb3.4.6/sharding/shard3

数据文件路径

mkdir /usr/local/mongodb3.4.6/sharding/shard1/data

mkdir /usr/local/mongodb3.4.6/sharding/shard2/data

mkdir /usr/local/mongodb3.4.6/sharding/shard3/data

日志文件路径

mkdir /usr/local/mongodb3.4.6/sharding/shard1/log

mkdir /usr/local/mongodb3.4.6/sharding/shard2/log

mkdir /usr/local/mongodb3.4.6/sharding/shard3/log

2.配置文件

/usr/local/mongodb3.4.6/sharding/shard1/shard.conf  文件

dbpath=/usr/local/mongodb3.4.6/sharding/shard1/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/shard1/log/mongodb.logs #日志目录

port=35002 #端口号

fork=true  #后台服务启动

logappend=true

shardsvr=true  #以sharding模式启动

/usr/local/mongodb3.4.6/sharding/shard2/shard.conf  文件

dbpath=/usr/local/mongodb3.4.6/sharding/shard2/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/shard2/log/mongodb.logs #日志目录

port=35003 #端口号

fork=true  #后台服务启动

logappend=true

shardsvr=true  #以sharding模式启动

/usr/local/mongodb3.4.6/sharding/shard3/shard.conf  文件

dbpath=/usr/local/mongodb3.4.6/sharding/shard3/data #数据目录

logpath=/usr/local/mongodb3.4.6/sharding/shard3/log/mongodb.logs #日志目录

port=35004 #端口号

fork=true  #后台服务启动

logappend=true

shardsvr=true  #以sharding模式启动

3.启动

./mongod --config /usr/local/mongodb3.4.6/sharding/shard1/shard.conf

./mongod --config /usr/local/mongodb3.4.6/sharding/shard2/shard.conf

./mongod --config /usr/local/mongodb3.4.6/sharding/shard3/shard.conf

--------------分片部署--------------------------------

1.在路由服务器上执行,上添加分片服务器

./mongo 127.0.0.1:35001

sh.addShard('127.0.0.1:35002');

sh.addShard('127.0.0.1:35003');

sh.addShard('127.0.0.1:35004');

2.查看分片情况

use admin

sh.status();  或者  db.runCommand({listshards:1});

3.开启分片功能

sh.enableSharding('shdb');

4.指定片键

sh.shardCollection('shdb.user',{'uid':1});

5.写入数据

use shdb

var start =new Date(); 

for(var i=0;i<1000000;i++){

db.user.insert({name:'zhangsan'+i,uid:i});

}

var end = new Date();  

print("分片集群插入100万行数据耗时="+(end-start)); 

6.查看分片结果

在路由和各分片上执行

db.user.find().count();

7.手动分片

for(var i=0;i<10000;i++){

sh.splitAt('shdb.user',{uid:i*10000});

}

在写入数据之前如果不加手动分片这一步骤就是自动分片的效果



 

参考文章:http://blog.chinaunix.net/uid-77311-id-5767912.html

分片的环境中如何迁移数据?20170807

 分片的环境中如何对应用程序升级?20170807

 自动分片和手动分片各自的使用场景

 

 

四、副本集(replica set)+分片(sharding)

环境

配置服务器:

127.0.1.1:31001

127.0.1.1:31002

127.0.1.1:31003

路由服务器

127.0.0.1:32001

127.0.0.1:32002

127.0.0.1:32003

分片复本集服务器

127.0.0.1:33010

127.0.0.1:33011

127.0.0.1:33012

127.0.0.1:33020

127.0.0.1:33021

127.0.0.1:33022

127.0.0.1:33030

127.0.0.1:33031

127.0.0.1:33032

db:3.4.6

-------------------------------配置服务器----------------------------------

1.程序路径

程序文件路径

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config1

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config2

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config3

数据文件路径

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config1/data

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config2/data

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config3/data

日志文件路径

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config1/log

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config2/log

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/config3/log

2.配置文件

/usr/local/mongodb3.4.6/replicaSetAndSharding/config1/config.conf  文件

dbpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config1/data    #数据文件目录

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config1/log/mongodb.logs   #日志文件

port = 31001  #端口号

fork = true   #后台服务启动

configsvr = true  #设置为配置服务器

replSet = configdb  #副本集名称

/usr/local/mongodb3.4.6/replicaSetAndSharding/config2/config.conf  文件

dbpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config2/data    #数据文件目录

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config2/log/mongodb.logs   #日志文件

port = 31002  #端口号

fork = true   #后台服务启动

configsvr = true  #设置为配置服务器

replSet = configdb  #副本集名称

/usr/local/mongodb3.4.6/replicaSetAndSharding/config3/config.conf  文件

dbpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config3/data    #数据文件目录

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/config3/log/mongodb.logs   #日志文件

port = 31003  #端口号

fork = true   #后台服务启动

configsvr = true  #设置为配置服务器

replSet = configdb  #副本集名称

3.启动

./mongod --config /usr/local/mongodb3.4.6/replicaSetAndSharding/config1/config.conf

./mongod --config /usr/local/mongodb3.4.6/replicaSetAndSharding/config2/config.conf

./mongod --config /usr/local/mongodb3.4.6/replicaSetAndSharding/config3/config.conf

4.创建复本集

登录任意配置节点

./mongo 127.0.0.1:31001

use admin

var rsc = {_id:'configdb',members:[

{_id:0,host:'127.0.0.1:31001',priority:3},

{_id:1,host:'127.0.0.1:31002',priority:2},

{_id:2,host:'127.0.0.1:31003',priority:1}

]};

rs.initiate(rsc);

-------------------------------路由服务器----------------------------------

1.程序路径

程序文件路径

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos1

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos2

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos3

日志文件路径

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos1/log

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos2/log

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos3/log

2.配置文件

/usr/local/mongodb3.4.6/replicaSetAndSharding/mongos1/mongos.conf

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos1/log/mongodb.logs   #日志文件

port = 32001   #端口号

fork = true    #后台服务启动

configdb = configdb/127.0.0.1:31001,127.0.0.1:31002,127.0.0.1:31003     #配置服务器

replSet = mongsdb  #副本集名称

/usr/local/mongodb3.4.6/replicaSetAndSharding/mongos2/mongos.conf

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos2/log/mongodb.logs   #日志文件

port = 32002   #端口号

fork = true    #后台服务启动

configdb = configdb/127.0.0.1:31001,127.0.0.1:31002,127.0.0.1:31003     #配置服务器

replSet = mongsdb   #副本集名称

/usr/local/mongodb3.4.6/replicaSetAndSharding/mongos3/mongos.conf

logpath = /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos3/log/mongodb.logs   #日志文件

port = 32003   #端口号

fork = true    #后台服务启动

configdb = configdb/127.0.0.1:31001,127.0.0.1:31002,127.0.0.1:31003     #配置服务器

replSet = mongsdb    #副本集名称

3.启动

./mongos --config /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos1/mongos.conf

./mongos --config /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos2/mongos.conf

./mongos --config /usr/local/mongodb3.4.6/replicaSetAndSharding/mongos3/mongos.conf

-------------------------------分片副本集----------------------------------

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet1

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet2

mkdir /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet3

/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet1/shardReplSet.sh    文件

#!/bin/bash

IP=127.0.0.1

NA=shardReplSet1

PH=/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet1

if [ "$1" == "reset" ];then  

pkill -9 mongo

rm -rf ${PH}/rs*

mkdir -p ${PH}/rs1 ${PH}/rs2 ${PH}/rs3  

exit;  

fi  

  

if [ "$1" == "install" ];then  

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs1 --logpath ${PH}/rs1/mongodb.log --bind_ip ${IP} --port 33010 --fork --smallfiles --replSet ${NA}  --shardsvr

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs2 --logpath ${PH}/rs2/mongodb.log --bind_ip ${IP} --port 33011 --fork --smallfiles --replSet ${NA}  --shardsvr

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs3 --logpath ${PH}/rs3/mongodb.log --bind_ip ${IP} --port 33012 --fork --smallfiles --replSet ${NA}  --shardsvr

  

/usr/local/mongodb3.4.6/bin/mongo --host 127.0.0.1 --port 33010 <<EOF  

use admin  

var rsconf = {  

        _id:'${NA}',  

        members:[  

            {_id:10,host:'${IP}:33010',priority:3},  

            {_id:11,host:'${IP}:33011',priority:2},  

            {_id:12,host:'${IP}:33012',priority:1}  

        ]  

};  

rs.initiate(rsconf);

EOF

exit; 

fi

/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet2/shardReplSet.sh  

#!/bin/bash

IP=127.0.0.1

NA=shardReplSet2

PH=/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet2

if [ "$1" == "reset" ];then  

pkill -9 mongo

rm -rf ${PH}/rs*

mkdir -p ${PH}/rs1 ${PH}/rs2 ${PH}/rs3  

exit;  

fi  

  

if [ "$1" == "install" ];then  

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs1 --logpath ${PH}/rs1/mongodb.log --bind_ip ${IP} --port 33020 --fork --smallfiles --replSet ${NA} --shardsvr 

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs2 --logpath ${PH}/rs2/mongodb.log --bind_ip ${IP} --port 33021 --fork --smallfiles --replSet ${NA} --shardsvr 

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs3 --logpath ${PH}/rs3/mongodb.log --bind_ip ${IP} --port 33022 --fork --smallfiles --replSet ${NA} --shardsvr

  

/usr/local/mongodb3.4.6/bin/mongo --host 127.0.0.1 --port 33020 <<EOF  

use admin  

var rsconf = {  

        _id:'${NA}',  

        members:[  

            {_id:10,host:'${IP}:33020',priority:3},  

            {_id:11,host:'${IP}:33021',priority:2},  

            {_id:12,host:'${IP}:33022',priority:1}  

        ]  

};  

rs.initiate(rsconf);

EOF

exit; 

fi

/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet3/shardReplSet.sh     文件

#!/bin/bash

IP=127.0.0.1

NA=shardReplSet3

PH=/usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet3

if [ "$1" == "reset" ];then  

pkill -9 mongo

rm -rf ${PH}/rs*

mkdir -p ${PH}/rs1 ${PH}/rs2 ${PH}/rs3  

exit;  

fi  

  

if [ "$1" == "install" ];then  

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs1 --logpath ${PH}/rs1/mongodb.log --bind_ip ${IP} --port 33030 --fork --smallfiles --replSet ${NA} --shardsvr

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs2 --logpath ${PH}/rs2/mongodb.log --bind_ip ${IP} --port 33031 --fork --smallfiles --replSet ${NA} --shardsvr

/usr/local/mongodb3.4.6/bin/mongod --dbpath ${PH}/rs3 --logpath ${PH}/rs3/mongodb.log --bind_ip ${IP} --port 33032 --fork --smallfiles --replSet ${NA} --shardsvr

  

/usr/local/mongodb3.4.6/bin/mongo --host 127.0.0.1 --port 33030 <<EOF  

use admin  

var rsconf = {  

        _id:'${NA}',  

        members:[  

            {_id:10,host:'${IP}:33030',priority:3},  

            {_id:11,host:'${IP}:33031',priority:2},  

            {_id:12,host:'${IP}:33032',priority:1}  

        ]  

};

rs.initiate(rsconf);

EOF

exit; 

fi

指定chunk大小

启动分片

sh /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet1/shardReplSet.sh install

sh /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet2/shardReplSet.sh install

sh /usr/local/mongodb3.4.6/replicaSetAndSharding/shardReplSet3/shardReplSet.sh install

--------------------------分片部署--------------------------------

1.在路由服务器上执行,上添加分片服务器

mongo 127.0.0.1:32001

sh.addShard("shardReplSet1/127.0.0.1:33010");

sh.addShard("shardReplSet2/127.0.0.1:33020");

sh.addShard("shardReplSet3/127.0.0.1:33030");

2.查看分片情况

use admin

sh.status();  或者  db.runCommand({listshards:1});

3.开启分片

sh.enableSharding('shrsdb');

4.指定片键

sh.shardCollection('shrsdb.user',{'uid':1});

5.写入数据

use shrsdb

var start =new Date(); 

for(var i=0;i<1000000;i++){

db.user.insert({name:'zhangsan'+i,uid:i});

}

var end = new Date();  

print("副本集+分片集群插入100万行数据耗时="+(end-start)); 

在一台3G内存的CentOS6.5上耗时:


并且还发生了丢失数据的情况,一共只写入了: 987652 条数据,分布在三个分片副本集上



 

 MongoDB部署集群实践  副本集(Replica Set)+分片(Sharding)


 

背景

-数据量大(至少TB级别)

-数据可靠性要求高(不允许数据丢失,必须要复制)

-高并发的读写请求(每天几十亿次请求)

-需要集群高性能

真实案例部署

-机器三台

-数据节点、sharding2片

-每个sharding为Replic Set 冗余度为3(主、从、延迟从)

-mongos(路由节点) 数量为3

-config server(配置服务器节点),数量为3

-arbiter server(表决节点) 数量为6

 

猜你喜欢

转载自wangshirufeng.iteye.com/blog/2268554