84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
假设有这样一个场景,有一个MongoDB的副本集,由于故障导致只剩下两个节点可用,而这两个节点目前都是slave节点。其他的故障节点也无法再重新启动,即无法重新加入到副本集中。 Q:这种情况下是否因为这个副本集就无法使用了?
slave
学习是最好的投资!
当大部分节点都宕掉了,剩余可以互相连接的节点数不超过一半时,可以参考一下文档来重新配置这个副本集: - http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
文档中提到两种办法:
这取决于你的副本集总的节点个数,副本集中可以相互联系的节点数大于总节点数一半时,可以有新的primary节点被选取出来,副本集可以正常工作,如果可以相互联系的节点小于等于总结点一半,所有节点都会变为secondary节点,此时副本集变为只读状态,所有写操作失败.
有这个现象的原因是mongodb的副本集不允许出现多个primary节点,在可以联系的节点数小于等于总节点数一半时,若依然能够选出primary,便有可能出现多个primary节点,导致整个副本集数据混乱,所有节点变为secondary,在故障节点恢复时副本集还可以正常运行.
如果遇到正常节点不足以选出primary,可以通过几种途径解决.
1) 若其他节点因数据损坏不能启动,像你说的依然有两个节点存活,可以停止一个节点,将硬盘数据导出至挂掉的节点,启动即可. 2) 若其他节点因不可恢复原因导致不能启动,你可以去掉replset选项将此节点作为单机服务启动,若要恢复为副本集模式,可以试一下将一个正常节点的local相关的数据文件删除,重新以replset启动,初始化自身之后使用rs.add()添加新节点,线上没有遇到过这种情况,如果实在没办法,你可以试一下.
当大部分节点都宕掉了,剩余可以互相连接的节点数不超过一半时,可以参考一下文档来重新配置这个副本集:
- http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
文档中提到两种办法:
这取决于你的副本集总的节点个数,副本集中可以相互联系的节点数大于总节点数一半时,可以有新的primary节点被选取出来,副本集可以正常工作,如果可以相互联系的节点小于等于总结点一半,所有节点都会变为secondary节点,此时副本集变为只读状态,所有写操作失败.
有这个现象的原因是mongodb的副本集不允许出现多个primary节点,在可以联系的节点数小于等于总节点数一半时,若依然能够选出primary,便有可能出现多个primary节点,导致整个副本集数据混乱,所有节点变为secondary,在故障节点恢复时副本集还可以正常运行.
如果遇到正常节点不足以选出primary,可以通过几种途径解决.