Zookeeper的选举机制和同步机制超详细讲解,面试经常问到!

前言

zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。

有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。

其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。

ZK集群的部署

首先我们来看下半数运行机制:

集群至少需要三台服务器,且官方文档强烈建议使用奇数个服务器,因为zookeeper是通过判断大多数节点的的存活来判断整个服务集群是否可用的,比如3个节点,它的一半是1.5,向上取整就是2。挂掉了2个就是表示整个集群挂掉。而用偶数4个的话,挂掉2个也表示不是大部分存活,因此也会挂掉。所以用4台服务器的话 ,从使用资源上来说,并不划算。

配置语法:

server.<节点ID>=<IP>:<数据同步端口>:<选举端口>
  • 节点ID:为1到125之间的数字,写到对应服务节点的{dataDir}/myid文件中。
  • IP地址:节点的远程IP地址,可以相同,生产环境建议用不同的机器,否则无法达到容错的目的。
  • 数据同步端口:主从同步时数据复制端口。
  • 选举端口:主从节点选举端口。

假设现在有3个zookeeper节点,我们要为其编写config配置,也要编写3份,分别放在不同的服务器上,其配置如下:

initLimit=10
syncLimit=5
dataDir=/data/zk_data
clientPort=2181
# 集群配置
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

其中dataDir参数指定的是一个目录,用来存放zk的数据,里面有个文件myid,3台机器上myid文件里面分别存放1,2,3。对应各自节点ID。

配置好3个配置文件后,分别启动,这样我们一个3个节点的集群zookeeper就搭建好了。

./bin/zkServer.sh start conf/zoo.cfg

ZK集群中的角色

ZooKeeper选举机制脑裂问题是ZooKeeper分布式应用程序中非常重要的概念。在选举机制方面,ZooKeeper使用了半数可用机制、无领导情况下才能选举半数选举机制来确保选举的正确性可靠性。 具体来说,半数可用机制是指在进行选举时,必须有半数以上的ZooKeeper服务器处于可用状态,才会执行选举。这是为了防止选举发生在不稳定的环境中导致错误的结果。 无领导情况下才能选举这一原则是为了确保在没有已知的leader的情况下才能进行选举。这样可以避免出现多个节点同时发起选举的情况,从而保证选举的有效性。 半数选举机制是指一个被选举为leader的节点必须获得半数以上的选票才能成为leader。这样可以避免脑裂问题的发生,脑裂问题是指当网络分区发生时,可能导致多个节点同时认为自己是leader,从而产生数据一致性的问题。 至于脑裂问题,它是指当网络发生分区时,多个节点同时认为自己是leader,从而导致数据的不一致性。为了解决脑裂问题,ZooKeeper引入了半数选举机制,确保只有一个leader被选举出来。 总结起来,ZooKeeper选举机制通过半数可用机制、无领导情况下才能选举半数选举机制来保证选举的正确性可靠性。而脑裂问题则是指在网络分区发生时,可能导致多个节点同时认为自己是leader,为了解决这个问题,ZooKeeper引入了半数选举机制来确保只有一个leader被选举出来。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值