欢迎访问成都祈钰瑶科技有限公司!

全国免费服务热线:

18982081108
✕

成都网站设计公司,成都响应式网站设计,成都移动端网站设计,成都网站UI设计

如何构建MongoDBRepSet+Consul高可用切换系统-创新互联

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

创新互联建站是一家专注于成都网站建设、网站设计与策划设计,梁山网站建设哪家好?创新互联建站做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:梁山等地区。梁山做网站价格咨询:13518219792

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高可用切换系统”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。