如何从副本集中的太多集合中恢复?

时间:2014-10-18 10:29:06

标签: mongodb

我的三台服务器的MongoDB副本集处于一种状态,即主服务器已启动,但两个辅助服务器都已关闭。

重新启动辅助设备,它们都报告" 10081太多名称空间/集合"在错误日志中,服务器已经死了。

从我的主要设备中我可以删除集合,但重新启动辅助设备仍会报告错误。

如何从主要部分清理我的混乱,并允许辅助设备启动?

更新:

我清空了两个辅助节点的数据目录,然后重新启动它们以从主节点进行全新同步。这似乎有效,除了在同步期间他们收到某种腐败的索引警告,并再次崩溃。

我得到的错误是"哈希表命名空间索引最大链达到:1335"后跟"没有NamespaceDetails索引:{}"

现在主要发生此错误,包括运行" mongod --repair"

如何从此命名空间错误中恢复?

2 个答案:

答案 0 :(得分:2)

礼貌地说:你有麻烦了。您确切的问题是您必须增加名称空间大小,而不能动态增加(yet)。

以下是您需要做的事情:

  1. 关闭主要和次要的mongod。
  2. 确保您拥有至少与MongoDB现在所需的可用磁盘空间一样多(实际上,您需要更少,但它是一个很好的经验法则)
  3. 使用主数据文件的数据文件创建转储 mongodump --dbpath /path/to/datafiles --journal --dumpDbUsersAndRoles
  4. 删除主服务器和辅助服务器上的dbpath目录的内容。
  5. 根据所有节点上的文档更改mongod.conf中的nsSize参数。
  6. 重新启动节点,重新创建副本集。
  7. 使用mongorestore将数据恢复为主数据(不要使用--dbpath选项,连接到正在运行的实例!)
  8. 如果对这些步骤有任何疑问,请咨询(阅读"雇用")专家。

答案 1 :(得分:0)

我这样做了:

主要(控制台)

rs.remove("second")
rs.remove("second2")

然后停止second1和second2

Service mongod stop

转到second1和second2 和更改配置(nsSize,设置)加上:

cd /var/lib/mongodb  # Path where mongodb data is saved
rm *
rm -r *
Service mongod start

等到他们都说等待端口27017上的连接(在日志中) 然后在Primary(mongo Shell)

rs.add("second1")
rs.add("second2")

然后他们将复制旧数据并将其放在那里。