我在本地主机上设置了一个副本集,只是为了练习使用必要的命令。我在家里和工作中都这样做。在家里,rs.initiate()
命令运行大约需要三秒钟,rs.status()
再花两三分钟给我PRIMARY
或SECONDARY
的所有状态。
但是当我在工作中这样做时,rs.initiate()
花了将近7分钟才在mongo shell中给我回提示,然后再花10分钟,状态才全部变为PRIMARY
或SECONDARY
。同时,我发起连接的是SECONDARY
或PRIMARY
,另外两个是RECOVERING
。他们只是坐在那里,RECOVERING
,十分钟。
当rs.initiate()
命令运行时,我所连接的mongod
(端口10001)不断吐出关于"分配数据文件"的东西,然后"完成分配数据文件",然后"分配新的数据文件",等等,直到它有大约一打这些文件。其他两个只是坐在那里,"replSet无法从self或任何种子(EMPTYCONFIG)获取local.system.replset配置"。
当我检查rs.status()
时,两个辅助服务器继续接受和丢弃连接,并分配数据文件,就像主服务器在第一步中所做的那样。
所以它应该花这么长时间吗?如果是这样,为什么我家里的机器能在几秒钟内完成呢?唯一的区别是我在家里运行的是32位而不是64位。
您的工作环境的磁盘上有多少可用磁盘空间?MongoDB默认为其oplog("本地"数据库)分配5%的可用磁盘空间。根据您提供的信息,我猜测您的工作机器上的可用磁盘空间比您的家庭机器上的磁盘空间大得多。
如果您等到您的rs.initiate()完成(即您看到PRIMARY)之前,再尝试启动其他节点,我认为您将看到您期望的结果
如果您面临此问题,请尝试重新启动mongodb。我用新鲜的db来面对这个问题。我通过重启mongodb解决了这个问题。