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 <
关闭: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:""}
db.runCommand({"enablesharding":"sharding"})
在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 <
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 <
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 <
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