为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB副本集问题

MongoDB副本集问题

慕斯709654 2018-08-20 11:26:21
假设有这样一个场景,有一个MongoDB的副本集,由于故障导致只剩下两个节点可用,而这两个节点目前都是slave节点。其他的故障节点也无法再重新启动,即无法重新加入到副本集中。Q:这种情况下是否因为这个副本集就无法使用了?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这取决于你的副本集总的节点个数,副本集中可以相互联系的节点数大于总节点数一半时,可以有新的primary节点被选取出来,副本集可以正常工作,如果可以相互联系的节点小于等于总结点一半,所有节点都会变为secondary节点,此时副本集变为只读状态,所有写操作失败.

有这个现象的原因是mongodb的副本集不允许出现多个primary节点,在可以联系的节点数小于等于总节点数一半时,若依然能够选出primary,便有可能出现多个primary节点,导致整个副本集数据混乱,所有节点变为secondary,在故障节点恢复时副本集还可以正常运行.

如果遇到正常节点不足以选出primary,可以通过几种途径解决.

1) 若其他节点因数据损坏不能启动,像你说的依然有两个节点存活,可以停止一个节点,将硬盘数据导出至挂掉的节点,启动即可.
2) 若其他节点因不可恢复原因导致不能启动,你可以去掉replset选项将此节点作为单机服务启动,若要恢复为副本集模式,
可以试一下将一个正常节点的local相关的数据文件删除,重新以replset启动,初始化自身之后使用rs.add()添加新节点,
线上没有遇到过这种情况,如果实在没办法,你可以试一下.


查看完整回答
反对 回复 2018-08-26
  • 2 回答
  • 0 关注
  • 930 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信