面试官问:说说你对ZooKeeper集群与Leader选举的理解?

ZooKeeper是一个高可用的分布式协调服务,通常使用3个节点以上的集群以确保高可用性。集群中,Leader负责事务处理和调度,Follower处理非事务请求并参与选举,Observer则不参与投票但提升非事务处理能力。Leader选举遵循数据最新、server.id最大的原则,依赖过半原则。当Leader挂掉,集群会重新选举,确保至少有一半的Follower角色节点可用。在集群扩容时,应确保Leader最后启动,以避免脑裂问题。
摘要由CSDN通过智能技术生成

ZooKeeper是一个开源分布式协调服务、分布式数据一致性解决方案。可基于ZooKeeper实现命名服务、集群管理、Master选举、分布式锁等功能。

高可用

为了保证ZooKeeper的可用性,在生产环境中我们使用ZooKeeper集群模式对外提供服务,并且集群规模至少由3个ZooKeeper节点组成。

集群至少由3个节点组成

ZooKeeper其实2个节点也可以组成集群并对外提供服务,但我们使用集群主要目的是为了高可用。如果2个节点组成集群,其中1个节点挂了,另外ZooKeeper节点不能正常对外提供服务。因此也失去了集群的意义。

如果3个节点组成集群,其中1个节点挂掉后,根据ZooKeeper的Leader选举机制是可以从另外2个节点选出一个作为Leader的,集群可以继续对外提供服务。

并非节点越多越好

  • 节点越多,使用的资源越多
  • 节点越多,ZooKeeper节点间花费的通讯成本越高,节点间互连的Socket也越多。影响ZooKeeper集群事务处理
  • 节点越多,造成脑裂的可能性越大

集群规模为奇数

集群规模除了考虑自身成本和资源外还要结合ZooKeeper特性考虑:

  • 节省资源
  • 3节点集群和4节点集群,我们选择使用3节点集群;5节点集群和6节点集群,我们选择使用5节点集群。以此类推。因为生产环境为了保证高可用,3节点集群最多只允许挂1台,4节点集群最多也只允许挂1台(过半原则中解释了原因)。同理5节点集群最多允许挂2台,6节点集群最多也只允许挂2台。
  • 出于对资源节省的考虑,我们应该使用奇数节点来满足相同的高可用性。
  • 集群可用性
  • 当集群中节点间网络通讯出现问题时奇数和偶数对集群的影响

面试官问:说说你对ZooKeeper集群与Leader选举的理解?

 

集群配置

ZooKeeper集群配置至少需要2处变更:

1、增加集群配置

在{ZK_HOME}/conf/zoo.cfg中增加集群的配置,结构以server.id=ip:port1:port2为标准。

比如下面配置文件中表示由3个ZooKeeper组成的集群:

server.1=localhost:2881:3881
server.2=localhost:2882:3882server.3=localhost:2883:3883

面试官问:说说你对ZooKeeper集群与Leader选举的理解?

 

2、配置节点id

zoo.cfg中配置集群时需要指定server.id,这个id需要在dataDir(zoo.cfg中配置)指定的目录中创建myid文件,文件内容就是当前ZooKeeper节点的id。

集群角色

ZooKeeper没有使用Master/Slave的概念,而是将集群中的节点分为了3类角色:

  • Leader
  • 在一个ZooKeeper集群中,只能存在一个Leader,这个Leader是集群中事务请求唯一的调度者和处理者,所谓事务请求是指会改变集群状态的请求;Leader根据事务ID可以保证事务处理的顺序性。
  • 如果一个集群中存在多个Leader,这种现象称为「脑裂」。试想一下&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值