设为首页 收藏本站
查看: 1254|回复: 0

[经验分享] Mongodb集群 - 副本集内部选举机制

[复制链接]

尚未签到

发表于 2018-10-26 14:07:15 | 显示全部楼层 |阅读模式
  今天有同事问我,副本集两个节点怎么做高可用,我也很好奇两个节点用副本集的方式怎么做高可用?查了一些资料,发现至少要三个节点才能做,也算是给自己普及理论知识。
  选举算法
  mongodb副本集的选举机制采用bully算法,bully算法是一种相对简单的协调者竞选算法,mongodb用这个算法来选举副本集中的主节点。bully算法主要思想是集群中的每个成员都可以声明它是主节点(协调者)并通知其他节点,别的节点可以选择接受这个声称或是拒绝并进入协调者竞争,被其他所有节点接受的节点才能成为协调者,节点按照一些属性来判断谁应该胜出,这个属性可以是一个静态ID,也可以是更新的度量像最近一次事务ID(最新的节点会胜出)。
  这个网站有个bully算法例子,挺不错的http://blog.nosqlfan.com/html/4139.html
  下图的例子展示了bully算法的执行过程。使用静态ID作为度量,ID值更大的节点会胜出:

  •   最初集群有5个节点,节点5是一个公认的协调者。
  •   假设节点5挂了,并且节点2和节点3同时发现了这一情况。两个节点开始竞选并发送竞选消息给ID更大的节点。
  •   节点4淘汰了节点2和3,节点3淘汰了节点2。
  •   这时候节点1察觉了节点5失效并向所有ID更大的节点发送了竞选信息。
  •   节点2、3和4都淘汰了节点1。
  •   节点4发送竞选信息给节点5。
  •   节点5没有响应,所以节点4宣布自己当选并向其他节点通告了这一消息。
DSC0000.jpg

  这是某位大神画的图,看得真直观。我也尝试用word来画,画图果然是个细活啊!
  协调者竞选前提条件:集群中有一半以上的节点参与了竞选。这确保了在网络隔离的情况下只有一部分节点能选出协调者(假设网络中网络会被分割成多块区域,之间互不联通,协调者竞选的结果必然会在节点数相对比较多的那个区域中选出协调者,当然前提是那个区域中的可用节点多于集群原有节点数的半数。如果集群被隔离成几个区块,而没有一个区块的节点数多于原有节点总数的一半,那就无法选举出协调者,当然这样的情况下也别指望集群能够继续提供服务了)。
  选举触发条件
  1  初始化一个副本集时
  2  主节点和副本集断开连接(可能是网络问题)
  3  主节点宕机
  MongoDB集群配置
  参考官方:https://docs.mongodb.org/manual/tutorial/deploy-replica-set/
  https://docs.mongodb.org/manual/tutorial/adjust-replica-set-member-priority/ (动态调整副本集成员priority)
  参考链接
  http://www.lanceyan.com/tech/mongodb_repset2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626865-1-1.html 上篇帖子: MongoDB分片中遇到的问题集锦 下篇帖子: mongodb 配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表