关于Zookeeper集群搭建节点数量为什么是2n+1个问题

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

我们之前学习zookeeper集群节点搭建时一直都是搭建集群数为2n+1,不管是自己搭建还是公司搭建都是2n+1,至于为什么是2n+1一直都是一个模糊的概念,今天我重点学习了一下zookeeper翻阅了大量的资料大概理解了一下,现将其整理记录下来。

首先我们要先理解一下zookeeper的选举机制

得到的票数/集群的总数 > 50%就成leader(这句话很关键)
在这里插入图片描述

  1. 当启动了130,130就会投自己一票 此时的到的总票数 1/3=30%
  2. 启动129:
    129与130进行新一轮投票
    129 投自己一票 1/3
    130 投自己一票 1/3
  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
  4. 128启动时同理所以130必定当选leader

所以这个时候建议服务器性能比较好,设置他的id值大一些

当我们了解了zookeeper选举机制后就能来讲为什么集群需要2n+1个
1、防止由脑裂问题造成的集群不可用。

关于脑裂首先我们来讲一下什么是脑裂
在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,两个节点上的HA软件像"裂脑人"一样,“本能"地争抢"共享资源”、争起"应用服务"。就会发生严重后果:
1)或者共享资源被瓜分、两边"服务"都起不来了;
2)或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。

两个节点相互争抢共享资源,结果会导致系统混乱,数据损坏。对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MySQL)的HA,必须

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值