1、“我们现在的集群 是一主两从,挂了一个从了,还有一主一从再运行,再停一个从就会变成只读了吗?”
100% 生产环境确认,请谨慎操作。
2、对于 3 是可以尝试的方案,但是请务必理解文档的描述,例如会阻塞读等。
db.fsyncLock() may block reads, including those necessary to verify authentication. Such reads are necessary to establish new connections to a mongod that enforces authorization checks.
很可能需要调整程序,将 read preference 强制为 primary .
3、其实最安全的办法,是将老机器的 datapath 转移一下(mv xxx xxx.old) 然后再做一个空的数据目录,启动从实例会从主库重新全量回放所有 oplog,但是时间无法保证。给你一个经验值,100G 数据,带索引重建,普通 SAS 硬盘大概需要 4 小时左右。
4、终极武器(第三方工具)
http://nosqldb.org/p/5173d275cbce24580a033bd8 (已经验证,相对好用)
https://github.com/Qihoo360/mongosync/