我们最近在我们的副本集(2个读取节点; 1个写入节点)中选举了主节点。 好奇为什么发生这种情况,我开始浏览日志,以了解发生了什么事。
看来,mongoNode2无法与mongoNode3通信。 当两个节点都不能通信时,看起来这会导致mongoNode2和mongoNode3上的服务重新启动,最终在服务重新启动后最终导致新的主服务器。
Thu Jun 23 08:27:28 [ReplSetHealthPollTask] DBClientCursor::init call() failed Thu Jun 23 08:27:28 [ReplSetHealthPollTask] replSet info mongoNode3:27017 is down (or \ slow to respond): DBClientBase::findOne: transport error: mongoNode3:27017 query: { \ replSetHeartbeat: "myReplSet", v: 3, pv: 1, checkEmpty: false, from: \ "mongoNode2:27017" } Thu Jun 23 08:27:29 got kill or ctrl c or hup signal 15 (Terminated), will \ terminate after current cmd ends Thu Jun 23 08:27:29 [interruptThread] now exiting Thu Jun 23 08:27:29 dbexit:
是否有任何理由,由于DBClientCursor :: init调用()失败,mongo服务将重新启动? 这是一个已知的错误?
需要说明的是,mongoNode2和mongoNode3是同一个VMware主机上的虚拟机。 MongoNode1不在同一个主机上,它没有任何问题与服务。 但是,我没有任何关于VMware主机上其他虚拟机的问题报告。
是。 在client / dbclient.cpp中有一个uassert()调用,这可能导致进程重新启动。 其根本原因是replSet代码检查心跳时发生的传输错误(该断言在findN()被调用)。
这里的代码似乎在3月份检出的代码和Github中的代码之间差别很大[1],所以当你在JIRA中提交bug报告时,包括你的版本信息。
在MongoDB的bug跟踪系统中有一些类似的报告,但是看起来并不像其他人提供足够的信息一样。
[1] https://github.com/mongodb/mongo/blob/master/client/dbclient.cpp