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.youkuaiyun.com/xiaowanzi_zj/article/details/121942392

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

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

ZooKeeper中Master选举实现方式

https://blog.youkuaiyun.com/xiaowanzi_zj/article/details/121942876

当你在运行Armbian系统的设备上想要更换软件源(通常是为了加速下载或解决地区限制的问题),你可以按照下面的步骤操作: ### 更换Armbian系统默认源 #### 步骤一:备份原始文件 首先,你需要对现有的`sources.list`文件做一份副本。这可以帮助你在遇到问题的时候快速恢复。 ```bash sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak ``` #### 步骤二:编辑 sources 文件 接下来就是实际修改的地方了,我们打开 `sources.list` 进行编辑: ```bash sudo nano /etc/apt/sources.list ``` #### 步骤三:更改镜像地址 将原有的内容替换为你所选择的新镜像服务器URL,例如阿里云、清华大学等提供的国内镜像站点链接。对于大部分用户来说,可以考虑使用如下的清华源配置作为参考模板之一(假设你正在使用的Armbian版本基于Debian Buster): ```plaintext deb https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free ``` 注意:如果你使用的是其他分支或是非官方库,则需要相应调整上述路径。 #### 步骤四:更新包索引并测试新源 保存并关闭文本编辑器之后,通过执行以下命令来让新的设置生效,并检查是否能正常工作: ```bash sudo apt-get update && sudo apt-get upgrade -y ``` 如果一切顺利的话,那么你就成功地完成了更换Armbian软件源的操作!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泡^泡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值