![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402024848kek7.jpg?x-oss-process=style/bb)
MongoDB副本集的主节点如果发生宕机故障,集群会自动选举出新的主节点。这个过程对于应用是透明的,也不需要人工介入。
如果优先级是一样的,宕机的节点恢复之后,重新加入集群,他会自动从新的主节点同步数据,并把自己设置为副本节点。(退位让贤了)
如果设置了主节点的优先级,则宕机的主节点恢复之后,他还会成为集群的主节点。
实验假设192.168.1.3为主节点,优先级为10,其余节点的优先级为1。集合中已经存在2条数据。
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402024955hizj.jpg?x-oss-process=style/bb)
数据如下:
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402024980jn2X.jpg?x-oss-process=style/bb)
然后kill掉192.168.1.3的MongoDB进程,模拟主节点故障。
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402025028Cc7X.jpg?x-oss-process=style/bb)
MongoDB集群自动触发选举,选出了192.168.1.2作为新的主节点。
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402025077Sdhs.jpg?x-oss-process=style/bb)
在192.168.1.2新增一个数据
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402025109bi1N.jpg?x-oss-process=style/bb)
这时候恢复192.168.1.3节点,他会自动从192.168.1.2同步最新的数据,然后把自己设置为主节点。
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402025142dpFc.jpg?x-oss-process=style/bb)
在192.168.1.3查看数据,发现数据没有丢失。
![](http://img.blog.itpub.net/blog/attachment/201406/6/29254281_1402025165inAS.jpg?x-oss-process=style/bb)
如果发生了人为的失误,比如忘记使用筛选条件而删除了整个集合的数据。如果有延迟节点,则参考延迟节点恢复数据。
如果没有延迟节点,则只能从最近的备份恢复。
如果没有备份,就只能呵呵了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1176833/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29254281/viewspace-1176833/