参考文章:连接mongo数据库_MongoDB---基于分布式文件存储的数据库(四)(完)-CSDN博客
背景:
本人环境是采用docker镜像进行部署的mongo数据库,采用了一主二从的部署架构,并将它们放置到相同的复制集中,复制集名称为rs0.
在这种架构中,不需要投票者|仲裁者(arbiter),也就不需要设置priority。
默认复制集的第一个db为主节点。其他为从节点。
原理
当遭受到攻击导致主节点宕机时,两个从节点都会参与选举,其中一个会变成主节点。
当原主节点恢复后,将会作为从节点加入当前的副本集群。
达到遭到损害后恢复作战能力。
恢复过程
1、发现主节点不可用: 由于 db0 不可用,db1 和 db2 将发现主节点失效。
2、投票: 剩下的两个节点 db1 和 db2 会进行投票。
3、选主机制: 由于至少需要两个节点的投票,这两个节点中的任何一个同意选主,就会成功选主。
4、选主结果: 第一个投票者将成为新的主节点,MongoDB副本集会通知其他节点进行更新。
模拟主节点挂了实操(遭受攻击)
进入到任意一个mongo节点容器内,当前主节点27018正常情况下:
# 进入容器
docker exec -it 容器ID mongo
# 状态
rs.status();
复制集中的其他成员:
此时都是正常运行状态,当28018挂了时,会自动选取新的节点为主节点。
当之前的28018重新恢复后,成为了从节点并拉取数据:
over!