小编给大家分享一下如何构建MongoDB RepSet +Consul高可用切换系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

MongoDB RepSet +Consul

环境介绍:

MongoDB副本集:192.168.151:27151已经安装了consulagent192.168.152:27152已经安装了consulagent192.168.153:27153已经安装了consulagent

原理介绍:
抛弃VIP,使用consul和sentinel构建redis的高可用系统
mongoDB副本集的搭建

1.MongoDB主从角色检查脚本(MongoDB副本集分为primary和secondary,但为方便理解,仍称为主从关系):

cat>/root/check/mongo_isMaster.sh<<EOF#!/bin/bashPORT=$1ROLE=$2a=$(mongo-uroot-psa123456--port$PORT--host192.168.1.151--authenticationDatabaseadmin--eval"rs.isMaster()"|grep-i"isMaster"|awk-F':''{print$2}'|awk-F',''{print$1}')#a=$(redis-cli-p$PORTinfoReplication|greprole:|awk-F':''{print$2}'|awk-F'\r''{print$1}')if[$a=$ROLE];thenexit0elseexit2fiEOFchmod+x/root/check/mongo_isMaster.sh#检查脚本执行,第一个参数用来指定端口,第二个参数true即检测是否主,若为false即是检测是否从./mongo_isMaster.sh27151true#读取脚本执行结果,返回值为0,满足条件,返回值为2,异常,不满足echo$?

2.MongoDB对应的consul服务配置文件(27151),其他两个更改端口和IP地址即可

cat>/etc/consul/mongo_27151.json<<EOF{"services":[{"id":"27151master","name":"mongo-master","tags":["master"],"address":"192.168.1.151","port":27151,"checks":[{"args":["/root/check/mongo_isMaster.sh","27151","true"],"interval":"1s"}]},{"id":"27151slave","name":"mongo-slave","tags":["slave"],"address":"192.168.1.151","port":27151,"checks":[{"args":["/root/check/mongo_isMaster.sh","27151","false"],"interval":"1s"}]}]}EOF

3.重新加载consul agent配置文件

root@MongoDB151-FedoraServer-IP151#consulreload


注意!!!:在线上主库发送故障转移后,从库会变为新主,在原主库重新排除故障上线之前应更改新主库的优先级为本副本集中最高,防止原主库上线后以高优先级强制重新抢占主库的地位,导致部分事务丢失或者连接抖动

MongoDB相关命令:

rs.isMaster()#检查自己是否为主更改实例优先级conf=rs.confconf.members[1].priority=10#配置中显示顺序第二的优先级设为10(和_id段的数没关系,仅仅是显示的第二个)rs.reconfig(conf)#只能在主上执行rs.reconfig(conf,{force:true})#可以强制在从上执行,但会导致原主库已执行,从库未执行未执行的事务被回滚rs.slaveOk()#设置从库可读

以上是“如何构建MongoDB RepSet +Consul高可用切换系统”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!