为什么Mongo卡在STARTUP2中?


13

我有一个Mongo副本集,其中包含一些辅助副本。承载辅助实例的盒子崩溃并丢失了数据库。

Mongo再次启动了辅助实例,现在它在STARTUP2中停留了12个小时以上。是否有意义 ?文档说Mongo应该在进入RECOVERING状态之前短时间处于STARTUP2

STARTUP2到底是什么意思?它是从主数据库复制数据库吗?我如何验证它(假设Mongo在Linux中运行)?

Answers:


12

eoinbrazil的答案部分不正确。新节点可以在STARTUP2中使用很长时间。发布的链接显示:

mongod一旦完成加载该成员的配置,副本集的每个成员便进入STARTUP2状态,这时它成为副本集的活动成员。然后,成员决定是否进行初始同步。如果成员开始初始同步,则该成员将保留在STARTUP2中,直到复制了所有数据并构建了所有索引。之后,成员转换为RECOVERING。

我正在管理一个700 GB的集合,当我添加一个新节点时,STARTUP2状态将在24小时内保持良好状态。但是您仍然可以通过观察数据库是否增长来查看是否正在发生任何事情。您可以使用以下命令在新节点上查看数据库的大小

show databases

或者您也可以观察数据目录,以查看它是否还在增长。(在Linux上,使用命令ls,df,du,iotop等。)


1
show databases失败not master and slaveOk=false
JDPeckham '19

通过查看日志,您可以查看进度。例如,它将显示如下内容:[rsSync]索引内部版本:2538000/22982417 11%
Daniel Benedykt

4

STARTUP2状态意味着节点无法投票。一旦MongoD进程完成其配置的加载,RS的成员即会进入此状态。在此状态下,成员已创建线程来处理内部复制操作,但尚未将状态更改为Recovering,然后从该状态更改为Secondary(请参阅[状态及其详细信息,在docs])

如果您的节点处于此状态的时间超过一小段时间,那么您将遇到一些奇怪的行为。如果没有日志来确定其卡住的原因,这几乎是不可能分析的。运行rs.status()和db.printSlaveReplicationInfo()将为您提供有关节点上本地图片的一些详细信息。

解决此问题的通常方法是关闭节点,擦除其数据文件(dbpath中的那些文件),然后重新启动它。这将重新启动初始同步过程,并且应移至SECONDARY。如果它再次卡在STARTUP2中,则需要查看日志以收集更多有关原因的信息-原因多种多样,但可能发生的原因是网络不稳定或某些本地资源争用。

需要注意的一点是,尽管正在进行初始同步,但该节点将保留在STARTUP2中,因此,根据同步的数据量,这可能是相当长的时间(可能是几天)。


谢谢。我们删除了数据,然后重新启动了Mongo。它仍然在STARTUP2中。看来Mongo正在运作。它正在消耗CPU,并且正如我在db.stats数据库中看到的那样,它正在增长。日志说有些东西cloned。我仍在寻找此问题的可能原因。
迈克尔

1
如果仍然存在问题,您可能只想从另一个节点进行复制(请参阅此过程-docs.mongodb.org/manual/tutorial/resync-replica-set-member/…)。如果您可以附上日志要点和所用版本的详细信息,则可能表明原因,但这同样是不寻常的行为。您是否尝试过在节点之间执行ping操作以查看网络延迟是什么样的?
eoinbrazil 2014年

ping主机之间的Mongo 2.4.6 可以。
2014年

ping可能是间歇性网络问题,ping时间如何?在这种情况下,如果您可以添加一些日志输出会更容易,因为这是非标准行为,并且日志是试图确定确切情况的主要来源。
eoinbrazil 2014年

恐怕我无法在此处显示日志。但是我注意到它尝试连接到另一个处于故障状态的辅助成员。可能是问题的原因吗?
2014年

1

一个可能的原因是,您的辅助变得“陈旧”的规定在这里

当您重新同步成员时,请确保RS不在重负载下。


0

STARTUP2状态可能是由于磁盘空间不足所致。好吧,由于没有同步的地方,因此只能保持@ STARTUP2状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.