![我是否需要在每个 mongod 上运行 db.repairDatabase()?](https://linux22.com/image/635384/%E6%88%91%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E5%9C%A8%E6%AF%8F%E4%B8%AA%20mongod%20%E4%B8%8A%E8%BF%90%E8%A1%8C%20db.repairDatabase()%EF%BC%9F.png)
我正在处理 MongoDB (2.4.10) 分片集群,到目前为止只有 1 个副本集。我在 mongos 上运行了 db.repairDatabase()。
这样,我可以回收主节点上的可用空间。但不能回收辅助节点上的可用空间。我是否必须在副本集的每个成员上运行它?
谢谢,
格雷格。
答案1
是的。您需要停止辅助 mongo 进程,注释掉副本配置参数(replSet、keyFile 等),启动 mongo 进程,然后登录并执行修复。修复完成后,停止 mongod 进程,将配置改回原始设置并启动 mongod。这假设您拥有三成员部署且投票正确等。
另一个选择是简单地重新同步辅助服务器(等待你的 oplog 足够长):
http://docs.mongodb.org/manual/tutorial/resync-replica-set-member/