`

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

 

  • 大小: 8.1 KB
  • 大小: 9.8 KB
  • 大小: 23.3 KB
  • 大小: 147 KB
  • 大小: 114 KB
  • 大小: 28.9 KB
  • 大小: 19.2 KB
  • 大小: 30.7 KB
分享到:
评论

相关推荐

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...

    K8s 部署 MongoDB(副本集)

    也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做...

    Mongodb集群之副本集集群搭建

    MongoDB 是一种流行的开源文档型数据库,支持多种集群搭建方式,包括主从模式、副本集(Replica Set)和分片(Sharding)。在本文中,我们将深入探讨副本集集群的构建及其特点。 副本集是MongoDB高可用性和冗余策略...

    MongoDB副本集集群

    MongoDB的集群与分片功能是其一大亮点,其中集群方面,MongoDB支持主从复制和副本集集群。副本集集群的搭建步骤包括成员的初始化、配置副本集的配置文件、启动副本集成员服务、加入副本集以及副本集功能扩展。副本集...

    Mongodb 集群分片部署.pdf

    - 分片(Sharding)适合大型集群,但小型集群中,副本集可能更优。 - 对风险敏感的环境,主从模式可能更保守,因为副本集是相对较新的特性。 总的来说,MongoDB的分片部署是一种高效的数据管理和扩展策略,它能够...

    mongodb 常用指令 搭建集群 备份恢复

    mongodb 复制 分片 恢复 认证,教你如何搭建 主从复制 副本集 集群分片

    58同城高级系统架构师带你实战MongoDB集群分布式存储

    MongoDB支持多种部署模式,包括单机部署、主从复制、副本集和分片等。其中,**集群**主要是指通过**分片(Sharding)**和**副本集(Replica Set)**两种技术实现的数据分布和高可用解决方案。 1. **分片(Sharding...

    mongodb集群搭建教程

    **总结**:无论是主从模式、副本集模式还是分片模式,每种模式都有其适用场景和特点。开发者应根据具体需求选择最适合的集群架构方案。例如,对于需要高可用性的场景,副本集模式更为合适;而对于需要处理大量数据的...

    小米电商Mongodb集群文档

    该文档主要介绍了小米电商部门使用的MongoDB分片集群(Sharding Cluster)与副本集(Replica Set)的技术细节。分片集群是一种水平扩展方法,用于提高数据库系统的可伸缩性和性能;副本集则是一种高可用性的解决方案...

    整理的MongoDB集群

    MongoDB集群配置实践通常采用的是副本集(Replica Set)和分片(Sharding)的方式,这两种方式结合可以构建出既具有高可用性又具备良好扩展性的集群环境。 #### 三、Master-Slave 主从结构 **主从架构**是一种常见...

    搭建Nosql MongoDB高可用集群

    综上所述,MongoDB提供的高可用性解决方案包括单实例的快速搭建、主从复制、副本集以及分片集群。这些技术手段共同构建了MongoDB在生产环境中作为高可用NoSQL数据库解决方案的基础。在实际应用中,需要根据具体的...

    mongodb安装集群

    配置服务器是 MongoDB 集群的重要组成部分之一,它负责维护集群的状态信息,如分片信息、路由信息等。 ```bash ./mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /...

    mongodb集群搭建

    ### MongoDB集群搭建详解 ...MongoDB集群不仅可以提高系统的稳定性和可靠性,还能通过分片技术实现水平扩展,满足大规模数据存储的需求。在实际生产环境中,还需要考虑更多的细节,比如安全性、监控机制等。

    MongoDb集群

    MongoDB支持三种主要的集群类型:主从复制、副本集(Replica Set)和分片(Sharding),其中副本集模式是最广泛使用的。 MongoDB是一个高性能、开源、无固定模式的文档型数据库,由C++开发,被认为是介于关系型...

    nagios监控mongodb插件

    2. **复制集状态**:每个分片可能包含一个或多个副本集,需要监控副本集的主从切换、同步延迟等。 3. **操作日志**:检查oplog的大小和剩余空间,防止日志满载导致的问题。 4. **查询性能**:监控慢查询,找出可能...

    MongoDB分布式集群搭建

    MongoDB支持多种集群部署模式,包括**副本集(Replica Set)**、**分片(Sharding)**以及**主从复制(Master-Slave)**。其中,主从复制模式已经不再被推荐。 1. **副本集(Replica Set)** - **简介**:副本集是一种互为...

Global site tag (gtag.js) - Google Analytics