2-8日我还在家中的时候,被告知mongodb副本集中其中一个从节点因未知原因宕机,然后暂时负责代管的同事无论如何就是启动不起来。

当时mongodb的日志信息是这样的:



实际上这里这么长一串最重要的信息应该是在后边几行:

2017-02-08T17:10:28.754+0800 I REPL     [rsBackgroundSync] replSet our last op time fetched: Feb  8 17:08:52:212
2017-02-08T17:10:28.754+0800 I REPL     [rsBackgroundSync] replset source's GTE: Feb  8 17:09:16:1
2017-02-08T17:10:29.696+0800 F REPL     [rsBackgroundSync] replSet need to rollback, but in inconsistent state

据我的理解,这里大概的意思是指明了副本集节点最后的正常时间,说现在启动这个节点需要回滚,但是回滚的时候存在矛盾冲突,然后无法正常启动。

当时我正有事忙着,电脑又不在手边上,仅凭这几行提示我也无法确定究竟是什么原因,又想到一台从节点暂时宕机对整个系统没有太大影响,于是就让他先看了一下机器内存,结果发现内存实在低的不像话,才三四十兆。

但是这台机只有一个程序在运行,就是mongodb数据库,数据库没运行的情况下内存这样低绝对有问题。

于是我初步推断大概是内存的问题导致数据缺失,而后同步出现矛盾冲突,便提出了重启机器的要求,由于是生产环境要走一系列流程,因此直到昨晚机器才完成重启。

机器重启后,内存果然恢复正常,但是重启数据库的时候还是一样的问题。

既如此,那就只能翻出2-8当天出问题时的日志再看看了,于是发现之前的日志上方还有有这样一些内容:

2017-02-08T17:09:26.471+0800 I NETWORK  [SyncSourceFeedback] Socket recv() timeout  192.168.*.*:27017
2017-02-08T17:09:26.471+0800 I NETWORK  [SyncSourceFeedback] SocketException: remote: 192.168.*.*:27017 error: 9001 socket exception [RECV_TIMEOUT] server [192.168.*.*:27017]
2017-02-08T17:09:26.471+0800 I NETWORK  [SyncSourceFeedback] DBClientCursor::init call() failed
2017-02-08T17:09:26.471+0800 I REPL     [SyncSourceFeedback] SyncSourceFeedback error sending update: DBClientBase::findN: transport error: 192.168.*.*:27017 ns: admin.$cmd query: { replSetUpdatePosition: 1, optimes: [ { _id: ObjectId('5850ee6ae9405575765fc1d0'), optime: Timestamp 1486544809000|72, memberId: 0, cfgver: 5, config: { _id: 0, host: "192.168.*.*:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 5.0, tags: {}, slaveDelay: 0, votes: 1 } }, { _id: ObjectId('5850eebcd4c62a9b9fbba274'), optime: Timestamp 1486544869000|114, memberId: 1, cfgver: 5, config: { _id: 1, host: "192.168.*.*:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 } }, { _id: ObjectId('5850eeb2a7e579698bafa475'), optime: Timestamp 1486544867000|332, memberId: 2, cfgver: 5, config: { _id: 2, host: "192.168.*.*:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 1.0, tags: {}, slaveDelay: 0, votes: 1 } } ] }
2017-02-08T17:09:27.098+0800 W NETWORK  [ReplExecNetThread-2534] Failed to connect to 192.168.*.*:27017 after 5000 milliseconds, giving up.
2017-02-08T17:09:27.098+0800 I REPL     [ReplicationExecutor] Error in heartbeat request to 192.168.*.*:27017; Location18915 Failed attempt to connect to 192.168.*.*:27017; couldn't connect to server 192.168.*.*:27017 (192.168.*.*), connection attempt failed
2017-02-08T17:09:31.455+0800 I REPL     [ReplicationExecutor] could not find member to sync from
2017-02-08T17:09:32.097+0800 W NETWORK  [ReplExecNetThread-2535] Failed to connect to 192.168.*.*:27017, reason: errno:115 Operation now in progress
2017-02-08T17:09:32.098+0800 I REPL     [ReplicationExecutor] Error in heartbeat request to 192.168.*.*:27017; Location18915 Failed attempt to connect to 192.168.*.*:27017; couldn't connect to server 192.168.*.*:27017 (192.168.*.*), connection attempt failed
2017-02-08T17:09:39.098+0800 W NETWORK  [ReplExecNetThread-2535] Failed to connect to 192.168.*.*:27017 after 5000 milliseconds, giving up.
2017-02-08T17:09:39.098+0800 I REPL     [ReplicationExecutor] Error in heartbeat request to 192.168.*.*:27017; Location18915 Failed attempt to connect to 192.168.*.*:27017; couldn't connect to server 192.168.*.*:27017 (192.168.*.*), connection attempt failed
2017-02-08T17:09:42.099+0800 W NETWORK  [ReplExecNetThread-2534] Failed to connect to 192.168.*.*:27017, reason: errno:113 No route to host

一番查询后,有说是副本集选举问题的,有说是网络防火墙问题的,但并没有找到解决办法,于是只好自己想了一个解决办法,强制把宕机节点删除掉再新建一个全新的数据库作为节点加进来。

在这个过程中我有所犹豫,因为我并不确定在加入了用户验证和使用了keyfile文件的时候能否成功解决我的问题,不知道是否会出现用户验证不通过而导致无法加入节点的问题。

不过好在,实在想不出更好办法的情况下,我用rs.remove删除宕机节点,再用rs.add添加新节点后,一切数据都正常同步了,包括之前的用户名密码和系统所需的主要数据。

而且原本以为一千多万的数据可能需要耗费很久时间同步,结果并没有用多久这个节点就从startup2变成了secondary。

本以为会有一番周折,结果有些出乎意料的解决了,但是并没有找到问题出现的根本原因,因此详细记录这一过程,以便其他人查看的同时,也算是记录下一个问题,寻求能想到相关原因的朋友给予解答。

mongodb副本集中其中一个节点宕机无法重启的问题的更多相关文章

  1. clickhouse高可用-节点宕机数据一致性方案-热扩容

    1. 集群节点及服务分配 说明: 1.1. 在每个节点上启动两个clickhouse服务(后面会详细介绍如何操作这一步),一个数据分片,一个数据备份,为了确保宕机数据一致性,数据分片和数据备份不能同一 ...

  2. elasticsearch介绍集群,模拟横向扩展节点、节点宕机、改变分片

        出处:[http://www.cnblogs.com/dennisit/p/4133131.html] ,防楼主删博,故保留一份! elasticsearch用于构建高可用和可扩展的系统.扩展 ...

  3. zk 节点宕机如何处理?

    Zookeeper 本身也是集群,推荐配置不少于 3 个服务器.Zookeeper 自身也要保 证当一个节点宕机时,其他节点会继续提供服务. 如果是一个 Follower 宕机,还有 2 台服务器提供 ...

  4. redis集群节点宕机

    redis集群是有很多个redis一起工作,那么就需要这个集群不是那么容易挂掉,所以呢,理论上就应该给集群中的每个节点至少一个备用的redis服务.这个备用的redis称为从节点(slave). 1. ...

  5. 假如Kafka集群中一个broker宕机无法恢复,应该如何处理?

    假如Kafka集群中一个broker宕机无法恢复, 应该如何处理? 今天面试时遇到这个问题, 网上资料说添加新的broker, 是不会自动同步旧数据的. 笨办法 环境介绍 三个broker的集群, z ...

  6. Redis生产环境节点宕机问题报错及恢复排错

    Redis故障发现 主观下线 当cluster-node-timeout时间内某节点无法与另一个节点顺利完成ping消息通信时,则将该节点标记为主观下线状态. 客观下线 当某个节点判断另一个节点主观下 ...

  7. 『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗

    『叶问』#41,三节点的MGR集群,有两个节点宕机后还能正常工作吗 每周学点MGR知识. 1. 三节点的MGR集群,有两个节点宕机后还能正常工作吗 要看具体是哪种情况. 如果两个节点是正常关闭的话,则 ...

  8. Vertica集群单节点宕机恢复方法

    Vertica集群单节点宕机恢复方法 第一种方法: 直接通过admintools -> 5 Restart Vertica on Host 第二种方法: 若第一种方法无法恢复,则清空宕机节点的c ...

  9. Vertica节点宕机处理一例

    Vertica节点宕机处理一例: 查询数据库版本和各节点状态 常规方式启动宕机节点失败 进一步查看宕机节点的详细日志 定位问题并解决 1. 查询数据库版本和各节点状态 dbadmin=> sel ...

随机推荐

  1. NetCloud——一个网易云音乐评论抓取和分析的Python库

    在17的四月份,我曾经写了一篇关于网易云音乐爬虫的文章,还写了一篇关于评论数据可视化的文章.在这大半年的时间里,有时会有一些朋友给我发私信询问一些关于代码方面的问题.所以我最近抽空干脆将原来的代码整理 ...

  2. 使用autoc js生成文章目录(侧边)导航栏

    介绍: autocjs 是一个专门用来生成文章目录(Table of Contents)导航的工具.autocjs 会查找文章指定区域中的所有 h1~h6 的标签,并自动分析文章的层次结构,生成文章的 ...

  3. #pragma once 与 #ifndef 解析

    转自:http://www.cnblogs.com/hokyhu/archive/2009/03/30/1425604.html 为了避免同一个文件被include多次,C/C++中有两种方式,一种是 ...

  4. [C#] 《Concurrency in C# Cookbook》读书笔记(一)- 并发编程概述

    并发编程概述 前言 我们经常在耳边听说一些关于高性能.并发和并行等名词,并且很多人都对并发编程有一些误解. 误解 1:并发就是多线程? 答:多线程只不过是并发编程的其中一种形式而已.并发编程的种类很多 ...

  5. iOS项目——自定义UITabBar与布局

    在上一篇文章iOS项目——基本框架搭建中,我们详细说明了如何对TabBarItem的图片属性以及文字属性进行一些自定义配置.但是,很多时候,我们需要修改TabBarItem的图片和文字属性之外,还需要 ...

  6. 基于tomcat+springMVC搭建基本的前后台交互系统

    一.摘要 1.所需软件列表: 1) tomcat :  apache-tomcat-7.0.54  服务端容器 2) Intellij: Intellij IDEA 14.0.3         开发 ...

  7. Python学习笔记(一):列表和元组

    1.列表和元组的主要区别在于:列表可以修改,元组则不能.即如果要根据要求添加元素,列表更适合,    如果出于某种原因,序列不能修改的时候,使用元组更为合适. 2.通用序列操作1)索引:正数索引时,p ...

  8. ABP官方文档翻译 3.7 领域事件(事件总线)

    领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消 ...

  9. Netty(一):入门篇

    匠心零度 转载请注明原创出处,谢谢! 说在前面 上篇文章对Netty进行了初探:Netty初探,主要介绍了下我们为什么需要学习netty.netty介绍等:本篇文章接着上篇文章的内容.本篇为了方便大家 ...

  10. ------ 解析因内核栈溢出导致的 “double fault” 蓝屏 ------

    -------------------------------------------------------------------------- 前一篇指出 tail_recursivef_fac ...