场景描述

MongoDB副本集中有一台Secondary节点出现RECOVERING的状态

状态如下:



    arps:RECOVERING> rs.status()
{
"set" : "arps",
"date" : ISODate("2017-12-22T02:31:58.803Z"),
"myState" : 3,
"members" : [
{
"_id" : 0,
"name" : "172.17.4.37:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7579839,
"optime" : Timestamp(1513909913, 3),
"optimeDate" : ISODate("2017-12-22T02:31:53Z"),
"lastHeartbeat" : ISODate("2017-12-22T02:31:58.019Z"),
"lastHeartbeatRecv" : ISODate("2017-12-22T02:31:57.750Z"),
"pingMs" : 0,
"syncingTo" : "172.17.4.38:27017",
"configVersion" : 1
},
{
"_id" : 1,
"name" : "172.17.4.38:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 7579913,
"optime" : Timestamp(1513909913, 3),
"optimeDate" : ISODate("2017-12-22T02:31:53Z"),
"lastHeartbeat" : ISODate("2017-12-22T02:31:58.051Z"),
"lastHeartbeatRecv" : ISODate("2017-12-22T02:31:58.018Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1506330005, 1),
"electionDate" : ISODate("2017-09-25T09:00:05Z"),
"configVersion" : 1
},
{
"_id" : 2,
"name" : "172.17.4.39:27017",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",//RECOVERING状态,第三个结点出现问题。
"uptime" : 7580364,
"optime" : Timestamp(1473614444, 2),
"optimeDate" : ISODate("2016-09-11T17:20:44Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}

恢复思路:

1.关闭MongoDB故障节点的数据库服务,移除数据目录,启动MongoDB服务,开启自动同步机制,恢复secondary节点。

2.找到另外一个secondary数据节点的快照,关闭写操作。在数据不变化的情况下,获得一致性的备份快照,拷贝至故障节点中,启动MongoDB服务,应用oplog日志。恢复secondary节点。

由于环境数据量小,使用第一种方案。

1.mongodb数据库服务关闭

arps:RECOVERING> use admin
switched to db admin
arps:RECOVERING> db.shutdownServer()

2.删除或者移走数据目录

[root@mongodb data]# mv /opt/data/mongodb /opt/data/mongodb20171222
[root@mongodb data]# mkdir /opt/data/mongodb
[root@mongodb data]# mkdir /opt/data/mongodb/log

3.启动数据库服务且查看状态

[root@mongodb data]#/opt/software/mongodb-linux-x86_64-3.0.1/bin/mongod -f /opt/software/mongodb-linux-x86_64-3.0.1/bin/mongodb.conf

 arps:STARTUP2> rs.status()
{
"set" : "arps",
"date" : ISODate("2017-12-22T02:46:52.288Z"),
"myState" : 5,
"syncingTo" : "172.17.4.38:27017",
"members" : [
{
"_id" : 0,
"name" : "172.17.4.37:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 25,
"optime" : Timestamp(1513910813, 3),
"optimeDate" : ISODate("2017-12-22T02:46:53Z"),
"lastHeartbeat" : ISODate("2017-12-22T02:46:51.122Z"),
"lastHeartbeatRecv" : ISODate("2017-12-22T02:46:51.114Z"),
"pingMs" : 0,
"syncingTo" : "172.17.4.38:27017",
"configVersion" : 1
},
{
"_id" : 1,
"name" : "172.17.4.38:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 25,
"optime" : Timestamp(1513910813, 3),
"optimeDate" : ISODate("2017-12-22T02:46:53Z"),
"lastHeartbeat" : ISODate("2017-12-22T02:46:51.127Z"),
"lastHeartbeatRecv" : ISODate("2017-12-22T02:46:51.303Z"),
"pingMs" : 0,
"electionTime" : Timestamp(1506330005, 1),
"electionDate" : ISODate("2017-09-25T09:00:05Z"),
"configVersion" : 1
},
{
"_id" : 2,
"name" : "172.17.4.39:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",//STARTUP2的状态为:新加入的节点做数据初始化
"uptime" : 27,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"syncingTo" : "172.17.4.38:27017",
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}

关于副本集的状态,文献参考如下:https://docs.mongodb.com/v3.0/reference/replica-states/index.html

过了半个小时之后,数据恢复完成,状态日志如下:



    .....................
2017-12-22T11:27:02.474+0800 I INDEX [rsSync] building index using bulk method
2017-12-22T11:27:02.475+0800 I INDEX [rsSync] build index done. scanned 75 total records. 0 secs
2017-12-22T11:27:02.477+0800 I REPL [rsSync] initial sync data copy, starting syncup
2017-12-22T11:27:02.798+0800 I REPL [rsSync] oplog sync 1 of 3
2017-12-22T11:27:03.145+0800 I REPL [ReplicationExecutor] syncing from: 172.17.4.38:27017
2017-12-22T11:27:03.288+0800 I REPL [rsSync] oplog sync 2 of 3
2017-12-22T11:27:03.289+0800 I REPL [rsSync] initial sync building indexes
2017-12-22T11:27:03.289+0800 I REPL [rsSync] initial sync cloning indexes for : demo
2017-12-22T11:27:03.300+0800 I REPL [SyncSourceFeedback] replset setting syncSourceFeedback to 172.17.4.38:27017
2017-12-22T11:27:03.390+0800 I STORAGE [rsSync] copying indexes for: { name: "ACT_AUTH_LOG", options: {} }
2017-12-22T11:27:03.391+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_DATA_LOG", options: {} }
2017-12-22T11:27:03.392+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_ERROR_LOG", options: {} }
2017-12-22T11:27:03.392+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_EXTERNAL_PACKET", options: {} }
2017-12-22T11:27:03.393+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_EXTERNAL_PACKET_LOG", options: {} }
2017-12-22T11:27:03.393+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_JPUSH_LOG", options: {} }
2017-12-22T11:27:03.394+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_MESSAGE_LOG", options: {} }
2017-12-22T11:27:03.395+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_REQUEST_LOG", options: {} }
2017-12-22T11:27:03.395+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_RETRY_MESSAGE", options: {} }
2017-12-22T11:27:03.395+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_RUN_LOG", options: { capped: true, size: 536870912 } }
2017-12-22T11:27:03.396+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_SMSEMAIL_LOG", options: {} }
2017-12-22T11:27:03.396+0800 I STORAGE [rsSync] copying indexes for: { name: "SYSTEM_TIMEOUT_LOG", options: {} }
2017-12-22T11:27:03.397+0800 I REPL [rsSync] oplog sync 3 of 3
2017-12-22T11:27:03.406+0800 I REPL [rsSync] initial sync finishing up
2017-12-22T11:27:03.406+0800 I REPL [rsSync] replSet set minValid=5a3c7b93:3
2017-12-22T11:27:03.429+0800 I REPL [rsSync] initial sync done
2017-12-22T11:27:03.474+0800 I REPL [ReplicationExecutor] transition to RECOVERING
2017-12-22T11:27:03.476+0800 I REPL [ReplicationExecutor] transition to SECONDARY
.................

节点恢复的状态,如下:



    arps:SECONDARY> rs.status()
...............
{
"_id" : 2,
"name" : "172.17.4.39:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",//恢复完成
"uptime" : 2500,
"optime" : Timestamp(1513913295, 3),
"optimeDate" : ISODate("2017-12-22T03:28:15Z"),
"syncingTo" : "172.17.4.38:27017",
"configVersion" : 1,
"self" : true
}
.................

MongoDB副本集--Secondary节点实例恢复的更多相关文章

  1. MongoDB副本集搭建及备份恢复

    一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...

  2. Mongodb 副本集的节点详细操作

    副本集操作 官方文档:https://docs.mongodb.com/v3.2/reference/method/js-replication/ 1 rs.add(){ _id: <int&g ...

  3. mongodb副本集仲裁节点搭建

    服务器准备: 主节点192.168.100.106 从节点192.168.100.107 仲裁节点192.168.100.108 三台服务器: 关闭防火墙 service iptables stop ...

  4. MongoDB副本集学习(三):性能和优化相关

    Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...

  5. 创建mongodb副本集操作实例

    一:概念 相关概念及图片引用自这里 mongodb副本集: 副本集是一组服务器,其中一个是主服务器,用于处理客户请求:还有多个备份服务器,用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器自动 ...

  6. mongodb副本集(选举,节点设置,读写分离设置)

    1.相对于传统主从模式的优势 传统的主从模式,需要手工指定集群中的Master.如果Master发生故障,一般都是人工介入,指定新的Master.这个过程对于应用一般不是透明的,往往伴随着应用重新修改 ...

  7. nodejs+mongoose操作mongodb副本集实例

    继上一篇设置mongodb副本集之后,开始使用nodejs访问mongodb副本集: 1:创建项目     express 项目名称 2:npm install mongoose    安装mongo ...

  8. MongoDB副本集功能及节点属性梳理

    副本集的主要功能 副本集是MongoDB高可用的基础,其主要作用 归纳为以下几点: (1)高可用,防止设备(服务器.网络)故障.提供自动FailOver功能. (2)无需配置高可用性虚拟节点:无论是S ...

  9. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

随机推荐

  1. 使用paramiko模块进行封装,远程操作linux主机

    import time import paramiko class HandleParamiko: ''' 定义一个linux处理类 ''' def __init__(self, hostname, ...

  2. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...

  3. 动态类型dynamic转换为特定类型T的方案

    需求场景:有时候我们抓到一段请求数据,JSON格式的字符串数据,需要放在接口里重现问题,我们就可能会用dynamic先接受数据,然后再转换成特定数据发出请求. 方案一:直接使用特定对象T,来接受请求数 ...

  4. 为什么要学 Python? python该怎么学

    很多童鞋对为什么学习Python感到迷茫,小编来跟大家说说学习Python的10个理由,希望可以帮助到大家!!! 摘要: 看完这十个理由,我决定买本python从入门到精通! 如果你定期关注现今的科技 ...

  5. java核心技术第二篇之数据库SQL语法

    #查询products表记录SELECT * FROM products WHERE price > 2000;-- 单行注释/* 多行注释*/#创建数据库CREATE DATABASE hei ...

  6. ListView详细介绍与使用

    前言介绍: 关于 ListView 我们大家都应该是非常的熟悉了,在 Android 开发中是经常用到的,今天就再来回顾一下,ListView 的使用方法,和一些需要优化注意的地方,还有日常开发过程中 ...

  7. 安装爬虫 scrapy 框架前提条件

    安装爬虫 scrapy 框架前提条件 (不然 会 报错) pip install pypiwin32

  8. (转载)林轩田机器学习基石课程学习笔记1 — The Learning Problem

    (转载)林轩田机器学习基石课程学习笔记1 - The Learning Problem When Can Machine Learn? Why Can Machine Learn? How Can M ...

  9. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  10. git零基础快速入门实战,重点讲解,在实际生产中整合idea对版本、分支的管理等

    1.什么是版本管理 (多人协作)项目中常见的问题: 代码放在什么地方 ?? 同步(到服务器),代码的冲突问题 ?? 服务器访问权限问题 ?? (代码)服务器内容修改的细节 ?? 项目版本的发布 ?? ...