2013-01-21 47 views
2

我在我的本地主机上设置了一个副本集,只是为了练习使用必要的命令。我在家里和在工作中都会这样做。在家中,rs.initiate()命令需要大约三秒钟的时间才能运行,并且rs.status()需要大约两三分钟才能给出所有状态,即PRIMARYSECONDARY。这与我的预期有关。MongoDB replSet需要永久启动

但是,当我在工作中做到这一点,需要rs.initiate()近7分钟就好给我回我的提示在蒙戈外壳,那么美国前10分钟都是PRIMARYSECONDARY。与此同时,我发起连接的是SECONDARYPRIMARY,另外两个是RECOVERING。他们只是坐在那里,RECOVERING,十分钟。

虽然rs.initiate()命令正在运行,mongod到我已经连接(端口10001)不断吐出约“分配数据文件”的东西,然后“完成数据文件分配”,然后选择“分配新的数据文件”,等等直到它有大约十几个这样的文件。其他两个只是坐在那里“replSet无法从自身或任何种子(EMPTYCONFIG)”整个时间获得local.system.replset配置。

虽然我在检查rs.status(),但这两位副线仍在继续接受和断开连接,并分配数据文件,就像第一步中的主要操作一样。

那么它应该需要这么长吗?而且,如果是这样,为什么我的机器在家里会在几秒钟内完成?唯一的区别是我在家里运行的是32位而不是64位。

+1

你的工作机器有很多数据吗?而你的家用机器没有那么多(或没有)?您拥有的数据越多,副本集的创建时间就会越长。 (因为它需要复制整个数据)。 –

+0

他们是不同的操作系统/不同的文件系统类型/不同的机器大小/ vm?听起来就像你在家里得到了正常的表现,并且在工作中出现了一些奇怪的现象 – Gregor

+0

实际上,你应该能够在日志文件中检查需要这么长时间的事情。 – Gregor

回答

3

工作环境的磁盘上有多少可用磁盘空间?默认情况下,MongoDB为其oplog(“本地”数据库)分配5%的可用磁盘空间。根据您提供的信息,我的猜测是您的工作机器上的可用磁盘空间比您的家用机器大得多。

如果您在尝试启动其他节点之前等到rs.initiate()完成(即您看到PRIMARY),我想您会看到您期望的结果。

+0

我有完全相同的问题。但似乎@angela是对的。在生产上,硬盘比在我的工作机器上大得多。它只是一点点,但最终它的工作。 –

0

如果您遇到此问题,请尝试重新启动mongodb。我用新鲜的数据库面对这个问题。我通过重新启动mongodb来解决它。