首页 > 数据库 >MONGODB 复制集 DOWN DOWN 机了, 5种情况与系统恢复

MONGODB 复制集 DOWN DOWN 机了, 5种情况与系统恢复

时间:2023-06-19 17:07:47浏览次数:47  
标签:主库 机器 MONGODB 机了 应用程序 DOWN 从库


MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_分布式

最近TEAM里面的每个DB都在做高可用失效后的应急方案和处理的文档,要写这个东西我和MONGODB 的DBA 主要要做的有以下内容

1  环境的准备 三台MOGNODB 4.2 社区版本

2   安装成为复制集

3   制定测试计划  

     测试计划主要从以下几个方面考虑

     1   从库DOWN机,对应用程序的影响

     2   主库DOWN机对应用程序的影响

     3   两个从库DOWN机最应用程序的影响

     4   一主一从DOWN机对应用程序的影响

     5   全部三台DOWN机后如何恢复,最快让应用可以进行工作

  4  测试的方法,写PYTHON程序,通过程序的连接复制集的方式来进行,而不是单机的方式来连接,因为最终我们是要对应用程序负责的.

测试机器的

10.50.132.166  (主库)

10.50.132.167  (从库)

10.50.132.168  (从库)

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_数据库_02

废话不讲开始

1   一台从库挂掉

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_03

在关掉从库后(切断电源后), 应用程序不会被影响 (结论,如果从库挂掉),应用程序的连接是不会被影响的.

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_python_04

从库启动后如果可以追上oplog,则从库会,从库的状态恢复到 SECONDARY

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_分布式_05

从rs.status() 中可以看到,从库的信息 

1   syncingto 这说明 这个从库连接的数据源并不是 10.50.132.166 ,而是另一个从库,这个是MONGODB 的特性, 根据当前的情况自动连接从库先追数据,这样的好处是,如果拉下的数据较多,则对主库的压力会比较小.

结论:  MONGODB  从库DOWN 后, 应用连接到复制集中的主库不会有任何影响,并且失效的从库会选择连接到其他从库进行数据的追取.  (也有可能直接连接到主库)

2   关闭主库 

在关闭主库后, 会根据初期设置的权重,将权重高的,变为主库, 一般10秒中一次进行扫描,直到权重高的从库变为主库(前提是数据必须和其他从库一致)

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_分布式_06

结论,应用程序不会被影响 (连接到复制集的方式)

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_分布式_07

在恢复主库的服务后,原主库服务启动后,在数据追平后,会自动切换会主库,这也不会影响到应用.

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_08

问题: 如果新主库上已经在运行数据连接的情况下, 会等待写连接完毕后,MONGODB 在进行主从角色的切换.

结论,主库挂掉,对MONGODB 的是没有任何影响的,应用可以继续工作,可能会有闪断的情况.

3   两个从库都DOWN 

将两个从库DOWN机后,主库可以进行读取,但已经不能进行写入了, 此时应用连接被 Hang住, 应用程序没有响应,显示TIMEOUT, 读取也无法进行,此时数据库进入无法为应用提供工作的状态

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_09

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_大数据_10

分两种情况,

1  如果从库能恢复至少一台,则数据库系统可以恢复, 见下图

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_大数据_11

应用系统重新启动户,业务会直接恢复

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_分布式_12

       2  如果无法恢复2台从库的情况下

4  一主一从关闭的情况下,系统的状态与两从DOWN机后的状态一致,无法提供正常的数据库服务.

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_13

5  全部机器DOWN 机,则无法提供服务.

这就不用说了

问题来了

在我只有一台MONGODB的情况下,剩余的两台无法工作的情况下,如果恢复业务.

在这样的情况下我们需要两步走

1  修改配置文件, 将replication: 中的 replSetName 注释后

2   重启服务

3   告诉应用修改连接串,重启应用服务

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_大数据_14

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_数据库_15

应用就会恢复正常工作见上图

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_16

以上就是在MONGODB 出现问题后, 各种情况以及各种处理的意见,最终的目的就是让业务尽快的恢复工作.

那么如果在两台机器恢复后,会怎么样,咱们继续

在打开两台失效的机器后, 失效的两台机器会自动恢复,并且进入集群的模式,

然后在将正在工作的MONGODB 打开复制, 机器就自动加入到复制集群了.

其实我们并不觉得这就可以了, 试问我们在单独工作的机器插入了大量的数据后, 那么这台机器如果在融合到原有的集群中,会是什么状态,能不能将后期插入的数据,同步到失败的两台机器.

我们来做下一步的操作, 将两台失效的机器启动后,两台机器自动重组为集群,然后我们在将原来应在单机的机器修改配置(打开repl的设置),后 这台机器也自动加入到集群中, 但是出现了问题,

出事了 出事了

在此加入集群的曾经是单机的数据库的数据和另外两台机器不一致了

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_数据库_17

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_java_18

那怎么办

1  关闭已经单机工作的MONGODB 

2  将他的数据拷贝到其他两台机器

3  先启动MONGODB 的主库(权重最大的)

2  然后在启动原有的从库们

整体系统恢复

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_数据库_19

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_数据库_20

通过思维导图总结一下.

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_python_21

MONGODB   复制集 DOWN DOWN 机了,  5种情况与系统恢复_python_22

标签:主库,机器,MONGODB,机了,应用程序,DOWN,从库
From: https://blog.51cto.com/u_14150796/6515961

相关文章

  • Mongodb 缓存页结构, 为什么我那么快 (1)
    MONGODB数据库写入和并发的速度,绝非是传统数据库可以比拟的,但到底为什么插入的速度这么快,和他的数据库引擎wiredTiger有关,那么就看看MONGODBwiredTiger的设计。MONGODB的数据库引擎WiredTiger, 使用PAGE页的方式,来存储数据,但是磁盘和内存的页面的结构是不一致的,内存的页面......
  • Mongodb 为什么提起处理JSON 就是MOGNODB 的,因为我没得选
    提到JSON的数据处理,大部分人想到的一定是MONGODB,如果不是可以自己好好的反思一下,自己的数据库餐盘是不是缺少MOGNODB这道硬菜,最近也有人问我一个问题,关于使用mongodb的原因是什么,我回答的比较简单,但是我更原因用这样的方式来回答这个问题。提到MOGNODB的特长,必须提到JSON,在数......
  • Spring Batch:将数据从Web服务处理到MongoDB
    概观在这篇文章中,我们将介绍如何创建一个使用Web服务数据并将其插入MongoDB数据库的SpringBatch应用程序。要求阅读本文的开发人员必须熟悉SpringBatch(示例)和MongoDB。环境Mongo数据库部署在MLab中。请按照本快速入门中的步骤操作。批处理应用程序部署在Heroku PaaS中。详情  ......
  • MONGODB 磁盘与内存的数据格式是否一致
    最近MONGODB系统中的数据量逐渐变大,联系了开发准备开始进行数据的archive和 cleanup事宜。其中运维的同学问我,你存储的数据size和实际的数据size是不一样的,我回答那是mongodb自带的数据压缩功能。但后续的问题我模糊了,例如磁盘和内存的数据是否完全一致,压缩的比率是多少,......
  • Turndown 源码分析:二、规则`commonmark-ruiles.js` REV1
    import{repeat}from'./utilities'varrules={}//段落rules.paragraph={filter:'p',replacement:function(content){//前后加两个换行return'\n\n'+content+'\n\n'}}//换行rules.lineBrea......
  • Linux安装MongoDB 4.0.3
    Linux安装MongoDB4.0.3 1.准备CentOS下安装MongoDB官网提供windows、Linux、OSX系统环境下的安装包,这里主要是记录一下在Linux下的安装。首先到官网下载安装包。文中安装的是4.0.3版本的。官网地址:https://www.mongodb.com/下载地址:https://www.mongodb.com/try/download......
  • Turndown 源码分析:四、`turndown.js`
    importCOMMONMARK_RULESfrom'./commonmark-rules'importRulesfrom'./rules'import{extend,trimLeadingNewlines,trimTrailingNewlines}from'./utilities'importRootNodefrom'./root-node'importNodefrom'......
  • Docker中安装MongoDb
    1.Dockercompose文件version:'3.1'networks:mongo:external:falseservices:mongo-express:image:mongo-expressrestart:alwaysports:-"8081:8081"environment:ME_CONFIG_MONGODB_ENABLE_ADMIN:t......
  • MongoDB常用28条查询语句
    MongoDB常用28条查询语句1查询所有记录db.userInfo.find();相当于:select*fromuserInfo;默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”,但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize=50;......
  • Go 语言之 Shutdown 关机和fvbock/endless 重启
    Go语言之Shutdown关机和fvbock/endless重启Shutdown源码//Shutdowngracefullyshutsdowntheserverwithoutinterruptingany//activeconnections.Shutdownworksbyfirstclosingallopen//listeners,thenclosingallidleconnections,andthenwaiting......