脚本宝典收集整理的这篇文章主要介绍了实现MongoDB的复制集与分片,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
Mongodb复制集(replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入PRimary,Secondary通过opLOG来同步Primary的数据,保证主从节点数据的一致性;复制集在完成主从复制的基础上,通过心跳机制,一旦Primary节点出现宕机,则触发选举一个新的主节点,剩下的secondary节点指向新的Primary,时间应该在10-30s内完成感知Primary节点故障,实现高可用数据库集群
分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。分片集群(sharded cluster)是一种水平扩展数据库系统性能的方法,能够将数据集分布式存储在不同的分片(shard)上,每个分片只保存数据集的一部分,MongoDB保证各个分片之间不会有重复的数据,所有分片保存的数据之和就是完整的数据集。分片集群将数据集分布式存储,能够将负载分摊到多个分片上,每个分片只负责读写一部分数据,充分利用了各个shard的系统资源,提高数据库系统的吞吐量
Centos MongoDB 关闭防火墙
192.168.174.131 | 192.168.174.132 | 192.168.174.133 |
---|---|---|
mongos@H_512_30@ | mongos | mongos |
config server | config server | config server |
shard server1 主节点 | shard server1 副节点 | shard server1 仲裁 |
shard server2 仲裁 | shard server2 主节点 | shard server2 副节点 |
shard server3 副节点 | shard server3 仲裁 | shard server3 主节点 |
端口分配:
mongos:20000
config:21000
shard1:27001
shard2:27002
shard3:27003
三台机器的配置服务(21000)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。
tar -xzvf mongodb-linux-x86_64-rhel70-3.2.22.tgz -C /noSQL/
改名:
@H_777_115@cd /nosql/ mv mongodb-linux-x86_64-rhel70-3.2.22 mongodb
分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
启动配置文件存放的文件夹:mkdir -p /nosql/mongodb/conf
路由服务日志存放文件: mkdir -p /nosql/mongodb/mongos/log
配置服务数据存放目录: mkdir -p /nosql/mongodb/config/data
配置服务日志存放文件: mkdir -p /nosql/mongodb/config/log
分片1服务数据存放目录:mkdir -p /nosql/mongodb/shard1/data
分片1服务日志存放文件:mkdir -p /nosql/mongodb/shard1/log
分片2服务数据存放目录: mkdir -p /nosql/mongodb/shard2/data
分片2服务日志存放文件: mkdir -p /nosql/mongodb/shard2/log
分片3服务数据存放目录: mkdir -p /nosql/mongodb/shard3/data
分片3服务日志存放文件:mkdir -p /nosql/mongodb/shard3/log
vi /etc/profile
export MONGODB_HOME=/nosql/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
立即生效:
source /etc/profile
vi /nosql/mongodb/conf/config.conf
piDFilepath = /nosql/mongodb/config/log/configsrv.pid
dbpath = /nosql/mongodb/config/data
logpath = /nosql/mongodb/config/log/congigsrv.log
logapPEnd =true
bind_ip =0.0.0.0
port = 21000
fork = true
configsvr =true
#副本集名称
replSet =configs
#设置最大连接数
maxConns =20000
启动三台服务器的config server
mongod -f /nosql/mongodb/conf/config.conf
登录任意一台配置服务器,初始化配置副本集
连接 MongoDB: mongo --port 21000
①配置文件
vi /nosql/mongodb/conf/shard1.conf
pidfilepath = /nosql/mongodb/shard1/log/shard1.pid
dbpath = /nosql/mongodb/shard1/data
logpath = /nosql/mongodb/shard1/log/shard1.log
logappend =true
bind_ip =0.0.0.0
port = 27001
fork = true
#副本集名称
replSet =shard1
#declare this is a shard db of a cluster;
shardsvr = true
#设置最大连接数
maxConns=20000
②启动三台服务器的shard1 server
mongod -f /nosql/mongodb/conf/shard1.conf
③登陆任意一台服务器,初始化副本集
过程与设置第一个分片副本集类似,这里直接给出设置结果:
过程与设置第一个分片副本集类似,这里直接给出设置结果:
三台机器)先启动配置服务器和分片服务器,后启动路由实例启动路由实例:
vi /nosql/mongodb/conf/mongos.conf
#内容
pidfilepath = /nosql/mongodb/mongos/log/mongos.pid
logpath = /nosql/mongodb/mongos/log/mongos.log
logappend =true
bind_ip =0.0.0.0
port = 20000
fork = true
#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
confiGDB =
configs/192.168.252.121:21000,192.168.252.122:21000,192.168.252.123:21000
#设置最大连接数
maxConns =20000
启动三台服务器的mongos server
mongos -f /nosql/mongodb/conf/mongos.conf
目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。
登陆任意一台mongos :mongo --port 20000
使用admin数据库: use admin
响应内容如下:
目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。
db.runCommand( { enablesharding :"testdb"});
db.runCommand( { shardcollection : "testdb.table1",key : {"id": "hashed"} } );
我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表都需要分片。
切换到 testdb 数据库 插入测试数据
use testdb;
for(i=1;i<=100000;i++){db.table1.insert({"id":i,"name":"penglei"})};
查看此时的集群状态,并分组查看总数量:
分组查看总数量是:100000
以上是脚本宝典为你收集整理的实现MongoDB的复制集与分片全部内容,希望文章能够帮你解决实现MongoDB的复制集与分片所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。