早期的版本使用master-slave,一主一从和mysql类型,但slave在此架构中为只读,如果主库宕机后,从库不能自动切换为主 需要手动才行
后期mongodb开发了个新的架构方案副本集,所以呢,目前已经淘汰master-slave的架构 改为可副本集,这种模式有一个主(primary),和多个从(secondary),只读,给他们设置权重,当主宕掉后,权重最高的从切换为主。其他从会自动识别新的主
在次架构还可以建立一个仲裁(arbiter)的角色,它只负责裁决,而不存储数据,它清楚的告诉是否有问题,防止脑裂问题
在此架构中读写数据都是在主上,如果想实现负载均衡的目的需要手动指定读库的目标server
副本集搭建:
我有三台机器分别是192.168.191.21 192.168.191.22 192.168.191.23 其中21为主 22 23为从
1,首先三台机器分别安装mongodb
参照我之前安装mongodb的方法
cd /etc/yum.repos.d
vim mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
yum install -y mongodb-org
2,三台机器编辑配置文件
vim /etc/mongod.conf
找到replication 删除# 然后在replication下面 写上如下俩行 记得前面有俩个空格
replication
oplogSizeMB: 20 //类似mysql binlog 20M
replSetName: sonice //副本集的名称
找到bindIp后面的127.0.0.1加上本机的内网ip 21,22,23
3,分别重启三台机器
systemctl restart mongod
4,连接主,在主上运行命令mongo
use admin
config={_id:”sonice”,members:[{_id:0,host:”192.168.191.21:27017″},{_id:1,host:”192.168.191.22:27017″},{id:2,host:”192.168.191.23:27017″}]}
// 其中sonice为副本集的名称 ,id为0的 是 主 其他id为1和2的是从
5,初始化
rs.initiate(config) //返回ok:1为正确
配置完之后 使用rs.status() 查看副本集的状态
如果俩个从上的状态为”stateStr”:”STARTUP”,则重新配置一遍即可
再次使用rs.status() 会发现从的状态变为SECONDARY 主的状态为STARTUP
mongodb的权重设置
使用rs.config 查看三台机器的priority 权重都是 1
更改他们的权重 ,设置一个变量 用索引的方式 来设置权重
首先进入主的mongo里面 执行下面5行操作
cfg = rs.config()
cfg.members[0].priority = 3
cfg.members[0].priority = 3
cfg.members[0].priority = 3
rs.reconfig(cfg)
这样设置下来 用rc.status() 可以看到21的主上机器权重为3 22的权重为2 23的权重为1
这样 当21宕了 会优先跳到22上 , 当21恢复后又跳回21为主了
相关文章
- 09-11JD架构师告诉你亿级流量架构高性能、高可用、高扩展如何搭建的?
- 09-1125、华为 华三中小型企业网络架构搭建 【内网安全部署之STP的安全技术部署】
- 09-11高并发架构的搭建(二)
- 09-11架构的搭建(一)
- 09-11FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建
- 09-11【原创】SpringCloud:基于Spring Cloud netflix全家桶搭建一个完整的微服务架构系统
- 09-11数据监控系统的架构与搭建实践 -2-InfluxDB 参考用例实践
- 09-1116、华为 华三中小型企业网络架构搭建 【防火墙篇之NAT存在的问题(通过公网地址或者域名方式访问)
- 09-11搭建游戏陪玩源码系统架构,需要重视的几个方面
- 09-11架构师入门:搭建双注册中心的高可用Eureka架构(基于项目实战)