我们之前学习zookeeper集群节点搭建时一直都是搭建集群数为2n+1,不管是自己搭建还是公司搭建都是2n+1,至于为什么是2n+1一直都是一个模糊的概念,今天我重点学习了一下zookeeper翻阅了大量的资料大概理解了一下,现将其整理记录下来。
首先我们要先理解一下zookeeper的选举机制
得到的票数/集群的总数 > 50%就成leader(这句话很关键)

- 当启动了130,130就会投自己一票 此时的到的总票数 1/3=30%
- 启动129:
129与130进行新一轮投票
129 投自己一票 1/3
130 投自己一票 1/3 - pk投票
pk规则(选举的规则)
3.1. 对比事物id(zxid)谁大就该投谁
假如出现事物id相同
3.2. 比较服务器id谁大(myid),就改投谁。130=3 129=2
130胜出,129改投130
130 票数 2/3 = 66% > 50% leader - 128启动时同理所以130必定当选leader
所以这个时候建议服务器性能比较好,设置他的id值大一些
当我们了解了zookeeper选举机制后就能来讲为什么集群需要2n+1个
1、防止由脑裂问题造成的集群不可用。
关于脑裂首先我们来讲一下什么是脑裂
在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,两个节点上的HA软件像"裂脑人"一样,“本能"地争抢"共享资源”、争起"应用服务"。就会发生严重后果:
1)或者共享资源被瓜分、两边"服务"都起不来了;
2)或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。两个节点相互争抢共享资源,结果会导致系统混乱,数据损坏。对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MySQL)的HA,必须

本文深入探讨了Zookeeper集群为何选择2n+1个节点的原因,主要涉及选举机制和防止脑裂问题。通过理解Zookeeper的投票规则和事务处理,解释了奇数节点能确保集群在部分节点故障时仍能正常运行和保证数据一致性。
最低0.47元/天 解锁文章
414

被折叠的 条评论
为什么被折叠?



