今天早上突然接收到数据人员说mongodb节点挂了,正式服APP不能访问,我登录到主节点查看集群状态 mongodb01这台机器是我们mongo副本集的主节点
root@mongodb01:~ # mongo 172.18.30.181:37017
MongoDB shell version v3.6.7
connecting to: mongodb://172.18.30.181:37017/test
MongoDB server version: 3.6.7
rset:PRIMARY> use admin
switched to db admin
rset:PRIMARY> db.auth(“用户名”,“密码”)
1
#上面的步骤只是登录到节点并且切换成超级用户模式
rset:PRIMARY> rs.status();


这里发现一个问题,除了主节点以为所有的状态都是RECOVERING ,我去看了一下mongodb的日志.(这个可以在vim /etc/mongod.conf配置文件找日志路径)
信息如下:

一直在报同步延迟错误,登上去一台从节点看一下复制集信息


可以看到这里的mongodb的复制时间是在昨天的20:56:13左右,现在的时间已经是第二天的10:01:32了, 表示这台备库已经断档很久很久了,导致sync失败。
经过排查初步分析是由于数据量写入过大导致的,因为数据人员使用爬虫服务器往主节点写数据,从节点去同步数据的时候同步不过来,而主节点的oplog大小实在是太小,从节点还没有同步完主节点就已经更新了oplog进行下一步操作了,导致从节点跟不上主节点的速度直接断档了(主节点的硬件配置比从节点也要高出许多)所以我们需要再次人工同步,并调整一下oplog的大小

上网搜了一下资料,需要手动同步数据,mongo官网给了两种办法
1、 自动同步,最简单也是操作最少的一种办法,先把mongodb停止服务,然后把mongodb的数据目录移走,新建一个mongo的数据目录,再起服务,这样他就会自动去追赶主库的数据,缺点是恢复时间比较久,根据数据量来决定
2、 从另外一个成员拷贝数据文件, 停止备库,从primary库copy数据文件,在copy的时候,注意要把local库也复制过来,复制不能采用mongodump,仅仅只允许使用快照备份数据文件
分析了上面的2种方式,第一种方式,清空数据目录重启mongodb实例让mongodb初始化同步数据,操作简单,但是恢复时间比较长,需要花费更多时间替换数据,第二种方式从副本集合的另外一个成员拷贝数据目录后重启mongodb实例,这个恢复过程速度快但是需要比较多的手工操作步骤,为了方便和简单,我这里用第一种方式

一、把数据重新同步
1、再此之前先把mongodb的服务给停了,进去mongo里use admin库再输入db.shutdownServer()

2、然后进去mongodb的数据存放目录
root@backup:~ # cd /data

我的mongo的数据放在这个文件夹里,现在把原来的数据改个名字 新建一个mongo的数据文件夹,要知道自己的数据文件夹放哪里可以看/etc/mongod.conf文件

root@backup:/data # mv mongo mongo.bak #给旧的mongo数据文件进行改名

root@backup:/data # mkdir mongo #创建新的mongo文件夹

root@backup:~ # mongod -f /etc/mongod.conf #启动mongodb

启动成功 没有报错

查看一下新文件夹, mongodb副本集已经在向主节点同步数据了

登陆一下mongodb,切换超级用户(没有设置的不用做这个操作,我的mongodb做了设置不切换超级用户无法执行命令)

rset:STARTUP2> rs.status(); #查看一下集群信息

发现刚才重启的这台状态已经变成startup2了,接下来的就是等待了

等了大概一天同步数据,登上去看看
rset:PRIMARY> rs.status()

发现这个节点的数据已经恢复了,并加入了集群里,其他的副本集如果也是RECOVERING也要做相同的操作,总的来说就是停止服务,然后移走老的数据文件夹,新建新的文件夹,再起服务等他自己同步

二、把oplog调整大一点,防止以后又出现这种情况
参考至mongodb官方文档
https://docs.mongodb.com/manual/tutorial/change-oplog-size/

1、进入mongodb
rs0:SECONDARY> db.printReplicationInfo(); #查看当前副本集oplog状态,可以看到现在是2000MB的
configured oplog size: 2000MB
log length start to end: 0secs (0hrs)
oplog first event time: Thu Nov 08 2018 22:23:46 GMT+0800 (CST)
oplog last event time: Thu Nov 08 2018 22:23:46 GMT+0800 (CST)
now: Thu Nov 08 2018 17:45:42 GMT+0800 (CST)

rs0:SECONDARY> db.adminCommand({replSetResizeOplog: 1, size: 4000}) #调整oplog大小为4000MB

rs0:SECONDARY> db.printReplicationInfo(); #再查看一下,变成4000MB了

2、测试一下同步情况正不正常
rs0:PRIMARY> for(var i=0;i<4;i++){db.test.insert({“name”:“test”+i,“age”:123})} #在主节点插入4条数据测试一下
WriteResult({ “nInserted” : 1 })
rs0:PRIMARY> db.test.find() #查看数据是否插入
{ “_id” : ObjectId(“5be406de8da5c06ab0e7727f”), “name” : “test0”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e77280”), “name” : “test1”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e77281”), “name” : “test2”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e77282”), “name” : “test3”, “age” : 123 }

去从节点看一下,数据确实插入了
rs0:SECONDARY> db.test.find()
{ “_id” : ObjectId(“5be406de8da5c06ab0e77281”), “name” : “test2”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e77280”), “name” : “test1”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e77282”), “name” : “test3”, “age” : 123 }
{ “_id” : ObjectId(“5be406de8da5c06ab0e7727f”), “name” : “test0”, “age” : 123 }

Mongodb副本集RECOVERING相关推荐

  1. MongoDB副本集(Replica Sets)搭建教程

    MongoDB副本集(Replica Sets)搭建教程 最近在生产环境下部署公司项目.由于项目中有使用到MongoDB,所以参考网上的博客,在服务器上进行搭建MongoDB副本集.今天打算将其记录成 ...

  2. MongoDB - 副本集简介

    简介 在 MongoDB 中,副本集指的是一组 MongoDB 服务器实例掌管同一个数据集,实例可以在不同的机器上. 其中一个用于处理写操作的是主节点(Primary),还有多个用于保存主节点的数据副 ...

  3. 总结—什么妖引起的MongoDB副本集初始化失败?

    前言: 在之前搭建MongoDB集群中,遇到过一些小问题作妖引起的初始化副本集失败,初学至今踩过来的坑,在此做个小结. 1.IP错误引起MongoDB副本集初始化失败 这个错误在另一篇文章已经描述过, ...

  4. Mongodb 副本集+分片集群搭建

    环境需求: 在三台机器上搭建副本集,在副本集上做分片 服务器IP: 192.168.1.232/192.168.1.238/192.168.1.241 安装Mongodb all nodes: tar ...

  5. Mongodb副本集--Out of memory: Kill process 37325 (mongod)

    Mongodb副本集--Out of memory: Kill process 37325 (mongod) 1.Mongodb副本集--Out of memory: Kill process 373 ...

  6. (2)MongoDB副本集自动故障转移原理(含客户端)

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的副本集均在主节点读写,辅助节点冗余部署,形成高可用和备份,具备自动故障转移能力. 集群心跳保活 ...

  7. mongodb副本集_设置MongoDB副本集分为4个步骤

    mongodb副本集 介绍 在详细介绍配置MongoDB副本集之前,让我简要介绍一下它们: 副本集是Mongodb数据库提供的功能,可实现高可用性和自动故障转移. 它是一种传统的主从配置,但具有自动故 ...

  8. 设置MongoDB副本集分为4个步骤

    介绍 在详细介绍配置MongoDB副本集之前,让我简要介绍一下它们: 副本集是Mongodb数据库提供的功能,可实现高可用性和自动故障转移. 它是一种传统的主从配置,但具有自动故障转移功能. 基本上, ...

  9. MongoDB副本集同步原理

    MongoDB的同步原理,官方文档介绍的比较少,网上资料也不是太多,下面是结合官方文档.网上资料和测试时候的日志,整理出来的一点东西. 因为MongoDB的每个分片也是副本集,所以只需要搞副本集的同步 ...

  10. MongoDB副本集权限重置

    背景:某公司线上的一套MongoDB副本集,只知道一个应用库以及该库下对应的一个用户.除此以外,对这套集群一无所知,他们的需求是要拥有超级用户权限,方便以后管理. 我虽是一个小渣渣,但以前单位一个很照 ...

最新文章

  1. mac brew 安装
  2. Leaflet中通过leaflet-measure插件实现测距测面效果
  3. 还记得范进中举的故事吗
  4. JavaScript不区分 '
  5. Java Web使用数据库连接池
  6. The type 'System.Object' is defined in an assembly that is not referenced
  7. Go 语言本身提供的包管理机制
  8. Linux的运行级别和chkconfig用法
  9. Theano学习笔记:Theano的艰辛安装体验
  10. 怎么禁用计算机的文件共享,怎么关闭掉电脑共享文件
  11. 游戏软件寄售官网源码带后台
  12. 如何给网站添加IE浏览器升级提示
  13. 第0期-通过hao123爬取导航网站
  14. 搜索引擎下拉菜单 提示关键词 接口API (百度长尾词 淘宝长尾词)
  15. 在html页面中引入另一个html页面
  16. 线性代数22种题型解题思路
  17. 阿里-----数组四等分
  18. GO 学习笔记(四)GORM框架
  19. Sakai Project(1)--源码部署安装
  20. 极域电子教室6.0全屏变窗口_Cookie for mac(浏览器痕迹清理工具) 6.0.1

热门文章

  1. 对象存储 Object Storage
  2. thread ‘<unnamed>‘ panicked at ‘assertion failed: `(left == right)`
  3. Storm概念详解和工作原理,topology、spout、bolt的细节和API讲解之一
  4. Unity打安卓包 Android 所有错误解决方案大全(几乎囊括所有打包错误 )
  5. 2019年培养工作室主力计划——第1次任务
  6. 气象台发布的拼图重投影示例
  7. python0309
  8. 文件关联后即时生效代码
  9. DNS记录类型介绍(A记录、MX记录、NS记录等)
  10. 【域名】查看MX记录是否生效