如何构建MongoDB RepSet +Consul高可用切换系统
小编给大家分享一下如何构建MongoDB RepSet +Consul高可用切换系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
MongoDB RepSet +Consul
环境介绍:
MongoDB副本集:192.168.151:27151 已经安装了consul agent
192.168.152:27152 已经安装了consul agent
192.168.153:27153 已经安装了consul agent
原理介绍:
抛弃VIP,使用consul和sentinel构建redis的高可用系统
mongoDB副本集的搭建
1.MongoDB主从角色检查脚本(MongoDB副本集分为primary和secondary,但为方便理解,仍称为主从关系):
cat> /root/check/mongo_isMaster.sh <<EOF
#!/bin/bash
PORT=$1
ROLE=$2
a=$(mongo -uroot -psa123456 --port $PORT --host 192.168.1.151 --authenticationDatabase admin --eval "rs.isMaster()"|grep -i "isMaster"|awk -F ':' '{print $2}'|awk -F ',' '{print $1}')
#a=$(redis-cli -p $PORT info Replication|grep role:|awk -F ':' '{print $2}'|awk -F '\r' '{print $1}' )
if [ $a = $ROLE ]; then
exit 0
else
exit 2
fi
EOF
chmod +x /root/check/mongo_isMaster.sh
#检查脚本执行,第一个参数用来指定端口,第二个参数true即检测是否主,若为false即是检测是否从
./mongo_isMaster.sh 27151 true
#读取脚本执行结果,返回值为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#consul reload
注意!!!:在线上主库发送故障转移后,从库会变为新主,在原主库重新排除故障上线之前应更改新主库的优先级为本副本集中最高,防止原主库上线后以高优先级强制重新抢占主库的地位,导致部分事务丢失或者连接抖动
MongoDB相关命令:
rs.isMaster() #检查自己是否为主
更改实例优先级
conf=rs.conf
conf.members[1].priority=10 #配置中显示顺序第二的优先级设为10(和_id段的数没关系,仅仅是显示的第二个)
rs.reconfig(conf) #只能在主上执行
rs.reconfig(conf,{force:true}) #可以强制在从上执行,但会导致原主库已执行,从库未执行未执行的事务被回滚
rs.slaveOk() #设置从库可读
以上是“如何构建MongoDB RepSet +Consul高可用切换系统”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341