因为mongoDB不支持在线compact,事实上,在线压缩确实是个麻烦的事,毕竟会涉及到数据不一致性,这里不展开讲了,所以我相信在将下的日子里,mongoDB也不会很快提供这个功能,但是会提供一个曲线救国的方法.
我也尝试过几个方法,怎么让手动kill掉primary而secondary不丢数据,最后都没有成功.看来只能用这招了.
也和视觉中国的CTO nightsailer 确认了一下,他们也是这么干的. 简单的说下.
1.先调用rs.freeze(1200),将每个不想让它成为primary的机器让它在1200秒内无法成为primary(这步也可以不做)
2. 将primary stepDown,不出意外新的primary会起来.
3. 将原primary kill掉.
4. 删掉所有data数据 (调用repair很慢,真不如干掉重新来)
5. 再重启动原primary的进程