1. 概述

现在很多高可用系统为了应对极端情况,比如主机宕机、网络故障以及机房宕机等灾难的发生,通常会部署主备架构(双机房),或者双活架构(双机房),甚至多活架构(三个机房或者以上),mongodb天然就适合部署双机房或者多机房,但是在发生机房宕机灾难时,也会遇到无法选举主节点的问题,本文重点讨论在主备或者双活架构下的mongodb的部署方案和切换方案,下文中的讨论以主备架构为例(双活同理)。

2. 主备架构网络部署图

在主备架构部署方案中,用户请求都是路由到主机房,备用机房无用户请求,为了简化示意,这里先把cdn、dns、waf等部分略去,重点突出应用和mongo集群内部节点的部署结构,如下图:

从上图可以看到,负载均衡和应用服务部分都是主备架构,mongodb集群是一体的(两边都会处理请求),没有主备之分,只是部署在两个机房而已。

当然,这种方式下,mongodb集群的资源利用率会高一些,不存在上层备用机房的应用服务的资源闲置浪费的问题。

3. mongodb的主备架构痛点

在主备架构环境中,mongodb的高可用部署方案,推荐复制组内的节点数是奇数(比如3个节点,1主2从),此时存在一个机房部署2个节点,一个机房部署1个节点,当部署2个节点的机房宕机时,由于另外一个机房只有1个节点,而mongodb的选举协议是raft一致性协议,此时是无法选举出主节点的(要求存活节点数大于原节点数的1/2),导致mongodb服务的不可用,示意图如下:

4. mongodb主备部署方案

针对章节3中遇到的问题,我们调整了部署方案,即在备用机房准备一个备用节点,平时是不启动的,仅在主机房灾难发生时,才启动该备用节点,示意图如下:

5. mongodb的主备切换方案

部署方案已经有了,下面谈一下主备切换方案,当主机房发生灾难时,我们要解决两个问题:

1. 怎么启动先前的备用节点。

2. 怎么让刚刚启动的备用节点加入到复制组中,否则是无法参与主节点选举的。

启动备用节点

在备用节点上准备好启动脚本,然后使用运维软件(例如saltstack)发送启动命令,即可启动备用节点。

备用节点加入复制组

我们知道如果要把一个新的节点加入复制组,是需要在主节点执行rs.add命令的,但是在灾难发生时,由于还没有主节点,是无法使用这个办法的,因此需要换一个思路,即让备用节点“替换”原主机房的从节点,这里的“替换”是指让复制组的其他成员认为该备用节点,就是原来的从节点,技术方案如下:

1. 首先复制组内的成员,在加入复制组时,使用域名替换ip的方式,例如:rs.add("shardA1.mongodb.net:27017"),同时修改mongodb集群所有服务器的/etc/hosts文件,配置shardA1.mongodb.net和IP的映射关系。

2. 在灾难发生时,先把mongodb集群内所有服务器的/etc/hosts中shardA1.mongodb.net对应的IP修改为备用节点的IP,再启动备用节点,此时复制组内的其他节点能快速连上新的节点。

解释一下,为什么把域名和IP的映射关系配置到hosts文件而不是配置到dns服务器,主要是考虑到修改hosts文件生效更快,从而快速选举出主节点。

小结

1. 该方案比较大的亮点是通过修改/etc/hosts文件的方式,让新的节点可以加入集群,从而快速完成主节点选举。

2. 该方案是一个比较通用的方案,适合很多分布式的系统使用,比如zookeeper等。

当然,在实施时,需要考虑主备双向切换,主备切换后监控原主机房的原从节点是否被启动等异常情景。

以上方案有任何不妥之处,欢迎斧正。

mongodb在双活(主备)机房的部署方案和切换方案设计的更多相关文章

  1. MongoDB入门三步曲3--部署技术:主备、副本集和数据分片

    mongodb部署--主备.副本及数据分片 主备复制 副本集 数据分片 主备复制 主备复制是最基本的一种多点部署方案,在读写分离.热备份.数据恢复等方面具有重要作用. 在真实的生产环境,主备库肯定需要 ...

  2. LVS+MYCAT+读写分离+MYSQL主备同步部署手册

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  3. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  4. POSTGRESQL主备部署模式

    一.预期目的 主数据库(Primary pg ,假定主机名为A,后文不再赘述)和备用数据库(Standby pg,假定主机名为B,后文不再赘述)之间的数据能够相互备份. 主数据库发生故障时备用数据库可 ...

  5. 阿里云ECS部署Redis主备哨兵集群遇到的问题

    一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...

  6. Centos7.6部署k8s v1.16.4高可用集群(主备模式)

    一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...

  7. Oracle Dataguard HA (主备,灾备)方案部署调试

    包括: centos6.5 oracle11gR2 DataGuard安装 dataGuard 主备switchover角色切换 数据同步测试 <一,>DG数据库数据同步测试1,正常启动主 ...

  8. Oracle 11.2.0.4.0 Dataguard部署和日常维护(5)-Datauard 主备切换和故障转移篇

    1. dataguard主备切换   1.1. 查看当前主备库是否具备切换条件 on slave select sequence#,first_time,next_time,archived,appl ...

  9. KingbaseES V8R6集群部署案例之---Windows环境配置主备流复制(异机复制)

    案例说明: 目前KingbaseES V8R6的Windows版本不支持数据库sys_rman的物理备份,可以考虑通过建立主备流复制实现数据库的异机物理备份.本案例详细介绍了,在Windows环境下建 ...

随机推荐

  1. Unity3d_2018_2019_2020安装包

    网上各种注册,官网登陆这么麻烦,留着自用 链接:https://pan.baidu.com/s/1LBtMetnr9xkOa18xYiFoDA 提取码:o01t 链接:https://pan.baid ...

  2. vmware workstation linux虚拟机点击suspend会卡死

    vmware workstation linux虚拟机点击suspend会卡死, 现象如图, 我测过很多发行版都有这个问题 临时解决方案是关闭suspend功能 sudo systemctl mask ...

  3. 代码生成codegen

    代码生成codegen 该模块提供了从SymPy表达式生成直接可编译代码的功能.该codegen功能是SymPy中代码生成功能的用户界面.下面为可能希望直接使用框架的高级用户提供了一些实现细节. 注意 ...

  4. 数据结构-几种Tree

    1.二叉查找树 或 二叉排序树 (BST) 性质:左子树的键值小于根的键值,右子树的键值大于根的键值. 2.平衡二叉树(AVL Tree) 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...

  5. 源码简析Spring-Integration执行过程

    一,前言 Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成.这一段官网的介绍,概况了整个Integration的用途.个人感 ...

  6. 【NX二次开发】Block UI 线宽

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  7. Tkinter 吐槽之二:Event 事件在子元素中共享

    背景 最近想简单粗暴的用 Python 写一个 GUI 的小程序.因为 Tkinter 是 Python 自带的 GUI 解决方案,为了部署方便,就直接选择了 Tkinter. 本来觉得 GUI 发展 ...

  8. React 开发环境准备

    1. 使用reactjs,一般有以下两种方式: (1)通过script标签引入reactjs.这种方式不推荐使用,如果我们的项目比较大,就需要对项目进行拆分,于是页面就需要通过script标签引入很多 ...

  9. 虚拟机安装Windows7旗舰版-超详细图文

    虚拟机安装Windows7旗舰版 ----就是想弄一个自己用的CTF+渗透测试的工具集成系统,本来想着用真实机弄就好了,但还是出于安全的考虑,还是再装个虚拟机吧~ 1.先到MSDN找好安装包:http ...

  10. Mysql在线DDL

    1.  Mysql各版本DDL方式 1.1 MysqlDDL演进 当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会 ...