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"})
在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
相关推荐
本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...
也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做...
MongoDB 是一种流行的开源文档型数据库,支持多种集群搭建方式,包括主从模式、副本集(Replica Set)和分片(Sharding)。在本文中,我们将深入探讨副本集集群的构建及其特点。 副本集是MongoDB高可用性和冗余策略...
MongoDB的集群与分片功能是其一大亮点,其中集群方面,MongoDB支持主从复制和副本集集群。副本集集群的搭建步骤包括成员的初始化、配置副本集的配置文件、启动副本集成员服务、加入副本集以及副本集功能扩展。副本集...
- 分片(Sharding)适合大型集群,但小型集群中,副本集可能更优。 - 对风险敏感的环境,主从模式可能更保守,因为副本集是相对较新的特性。 总的来说,MongoDB的分片部署是一种高效的数据管理和扩展策略,它能够...
mongodb 复制 分片 恢复 认证,教你如何搭建 主从复制 副本集 集群分片
MongoDB支持多种部署模式,包括单机部署、主从复制、副本集和分片等。其中,**集群**主要是指通过**分片(Sharding)**和**副本集(Replica Set)**两种技术实现的数据分布和高可用解决方案。 1. **分片(Sharding...
**总结**:无论是主从模式、副本集模式还是分片模式,每种模式都有其适用场景和特点。开发者应根据具体需求选择最适合的集群架构方案。例如,对于需要高可用性的场景,副本集模式更为合适;而对于需要处理大量数据的...
该文档主要介绍了小米电商部门使用的MongoDB分片集群(Sharding Cluster)与副本集(Replica Set)的技术细节。分片集群是一种水平扩展方法,用于提高数据库系统的可伸缩性和性能;副本集则是一种高可用性的解决方案...
MongoDB集群配置实践通常采用的是副本集(Replica Set)和分片(Sharding)的方式,这两种方式结合可以构建出既具有高可用性又具备良好扩展性的集群环境。 #### 三、Master-Slave 主从结构 **主从架构**是一种常见...
综上所述,MongoDB提供的高可用性解决方案包括单实例的快速搭建、主从复制、副本集以及分片集群。这些技术手段共同构建了MongoDB在生产环境中作为高可用NoSQL数据库解决方案的基础。在实际应用中,需要根据具体的...
配置服务器是 MongoDB 集群的重要组成部分之一,它负责维护集群的状态信息,如分片信息、路由信息等。 ```bash ./mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /...
### MongoDB集群搭建详解 ...MongoDB集群不仅可以提高系统的稳定性和可靠性,还能通过分片技术实现水平扩展,满足大规模数据存储的需求。在实际生产环境中,还需要考虑更多的细节,比如安全性、监控机制等。
MongoDB支持三种主要的集群类型:主从复制、副本集(Replica Set)和分片(Sharding),其中副本集模式是最广泛使用的。 MongoDB是一个高性能、开源、无固定模式的文档型数据库,由C++开发,被认为是介于关系型...
2. **复制集状态**:每个分片可能包含一个或多个副本集,需要监控副本集的主从切换、同步延迟等。 3. **操作日志**:检查oplog的大小和剩余空间,防止日志满载导致的问题。 4. **查询性能**:监控慢查询,找出可能...
MongoDB支持多种集群部署模式,包括**副本集(Replica Set)**、**分片(Sharding)**以及**主从复制(Master-Slave)**。其中,主从复制模式已经不再被推荐。 1. **副本集(Replica Set)** - **简介**:副本集是一种互为...