zookeeper核心技术整理(持续更新)

目录

什么是zookeeper

zookeeper节点类型

zookeeper常见命令

节点状态

ZAB协议

ZAB原子广播

选举新leader的算法

ZooKeeper中Master选举实现方式

什么是zookeeper

Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务。提供了文件系统,通知机制。

zookeeper节点类型

临时节点、临时有序节点、持久节点、持久有序节点、容器节点、TTL节点

-持久化目录节点(PERSISTENT), 创建好之后就永久存在
-持久化顺序编号节点(PERSISTENT_SEQUENTIAL),创建好节点后还可以默认带个自增的编号
-临时目录节点(EPHEMERAL),和sessionId绑定的,当客户端被关闭之后,对于的临时目录节点会被删除
-历史顺序编号目录节点(EPHEMERAL_SEQUENTIAL),临时节点带个自增的编号
容器节点:(3.5.3版本只后)当容器节点下的最后一个子节点被删除时,容器节点就会被自动删除。
TTL节点:(3.5.3版本只后)针对持久化节点或者持久化有序节点,我们可以设置一个存活时间,如果在存活时间之内该节点没有任何修改并且没有任何子节点,它就会被自动删除。

zookeeper常见命令

ls/get/set/create/delete

节点状态

LOOKING、Observer、Leading、Following
looking:寻找leader状态,处于该状态需要进入选举流程

leading:leader状态,表明当前服务角色为leader

following:跟随者状态,leader已经选举出,表明当前为follower角色

observer:观察者状态

事务id:ZooKeeper中的事务ID(ZXID)是一个64位的数字,由两部分组成:低32位用于事务计数器,高32位用于周期计数器(epoch)‌‌1。事务计数器表示在当前周期内事务操作的序列号,每次事务操作都会使这个计数器递增。周期计数器在Leader选举时递增,每当集群选举出新的Leader时,新的Leader会将周期计数器加一,从而确保即使低32位回绕到零,ZXID仍然保持唯一性‌1。

ZAB协议

zab协议是zookeeper专门设计的支持崩溃恢复的原子广播协议。目的是实现分布式zoopkeeper各个节点数据一致性。 

ZAB原子广播

 1.根据ZAB协议,所有的写操作都必须通过Leader完成,Leader写入本地日志后再复制到所有的Follower节点
写操作:
a.客户端向Leader发起写请求
b.Leader将写请求以Proposal的形式发给所有的Follow并等待ACK
c.Follow收到Leader的Proposal后返回ACK
d.Leader得到过半数的ACK(Leader对自己默认有一个ACK)后向所有的Follower和Observer发送Commmit
e.Leader将处理结果返回给客户端
为了实现这一点,Zab协议要保证同一个Leader发起的事务要按顺序被执行,同时还要保证只有先前Leader的事务被执行之
后,新选举出来的Leader才能再次发起事务

选举新leader的算法

那我举个例子来说明吧,假如当前有zk1,zk2,zk3,三个节点组成一个集群,现在zk3节点挂了
1.首先zk1和zk2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用 (myid, ZXID)来表示,假设此时ZK1的投票为(1, 1),ZK2的投票为(2, 1),然后各自将这个投票发给集群中其他机器。
2.各服务器接收到投票之后会进行检查,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
3.开始处理投票,服务器都需要将别人的投票和自己的myid和zxid进行比较,规则是优先检查ZXID。ZXID比较大的服务器优先作为Leader。 如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器,在例子很明显zk2, 会成为新的leader。 

https://blog.csdn.net/xiaowanzi_zj/article/details/121942392

选举leader怎么保证数据不会丢失

我们都知道,zk是cp的,不一定保证可用性,在选举的过程中,不能对外提供服务。但在选举的过程中,首先选zxid(zk的事务ID)最大的为leader,zxid最大,表示数据是最新的,然后广播给folower,这样避免数据丢失 

ZooKeeper中Master选举实现方式

https://blog.csdn.net/xiaowanzi_zj/article/details/121942876

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泡^泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值