共计 1830 个字符,预计需要花费 5 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下如何构建 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
exit 2
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 高可用切换系统”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!
正文完