zookeeper学习03(定义,工作机制,功能,数据结构,应用场景,选举机制)

Zookeeper定义

zookeeper 是一个开源的分布式 Apache 项目,为分布式框架提供协调服务

Zookeeper工作机制

Zookeeper从设计模式的角度理解:基于观察者模式的分布式服务管理框架,存储和管理共同关心的数据,然后接受观察者的注册。 一旦这些数据的状态发生变化,Zookeeper 将负责通知那些在 Zookeeper 上注册的观察者做出相应的响应。 即 Zookeeper = 文件系统 + 通知机制

Zookeeper功能

  • Zookeeper:一个集群的领导者和追随者
  • 只要 Zookeeper 集群中超过一半的节点存活,Zookeeper 集群就可以正常运行。 所以 Zookeeper 适合安装奇数服务器
  • 全局数据一致性:每个Server都保存一份相同的数据副本,无论Client连接到哪个Server,数据都是一致的。
  • 更新请求按顺序执行,同一个Client的更新请求按发送顺序执行,即First In, First Out (FIFO)先进先出
  • 数据更新原子性,一次数据更新要么成功要么失败
  • 实时,客户端可以读取一定时间范围内的最新数据

Zookeeper数据结构

ZooKeeper 数据模型的结构与 Linux 文件系统的结构非常相似,整体看起来像一棵树,每个节点称为一个 ZNode。 每一个ZNode默认可以存储1MB的数据,每个ZNode可以通过其路径唯一标识

Zookeeper应用场景

提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态下线、软负载均衡等。

统一命名服务

在分布式环境中,为了便于识别,往往需要统一应用/服务的名称。例如:IP不好记,但域名好记

统一配置管理

(1) 配置文件同步在分布式环境中很常见。一般要求集群中所有节点的配置信息保持一致,比如Kafka集群。修改配置文件后,希望能够快速同步到各个节点

(2) 配置管理可以交给ZooKeeper。配置信息可以写入 ZooKeeper。上的一个或多个 Znode。每个客户端服务器都在这个 Znode 上进行侦听。一旦 Znode 中的数据被修改,ZooKeeper 会通知客户端服务器

统一集群管理

(1)在分布式环境中,需要实时了解各个节点的状态。这可以根据节点的实时状态来完成: - 一些调整

(2)ZooKeeper可以实时监控节点状态变化。您可以将节点信息写入 ZooKeeper。上的一个 ZNode。监听这个 ZNode 以获取它的实时状态变化

Dynamic Up and Down of Server

Clients can real-time insight into changes between the server and the downline

软负载平衡

在 Zookeeper 中记录每个服务器的访问次数,让访问次数最少的服务器处理最新的客户端请求

Zookeeper选举机制

假如有5台服务器

首次启动选举机制
(1) 服务器 1 启动并发起选举。服务器 1 为自己投票。此时,服务器 1 1票,不超过一半(3 票),选举无法完成,服务器1 状态保持 LOOKING;

(2) 服务器 2 启动,并启动另一次选举。服务器 1 和服务器 2 为自己投票并交换投票信息:此时服务器 1 发现服务器 2 的 myid大于其当前的投票推送(服务器 1),并将投票更改为按服务器 2。此时服务器 1投票0票,服务器 2投票2票,没有过半结果,选举无法完成,服务器1、2状态保持L00KING

(3) 服务器 3 启动并进行选举。服务器 1 和服务器 2 将投票更改为服务器 3。投票结果:服务器 1 0票,服务器 2 0票,服务器 3 3票。服务器 3 现在拥有超过一半的选票 服务器 3 被选举为领导者。服务器 1,2 将状态更改为 FOLLOWING,服务器 3将状态更改为 LEADING;

(4) 服务器 4启动并进行选举。此时服务器1、2、3不再处于L00KING状态,不会改变选票信息。投票信息结果交换:服务器3 3票,服务器4 1票。服务器 4服从多数,将投票信息更改为服务器 3,并将状态更改为 FOLLOWING;

(5) 服务器 5 作为 4 的弟弟启动。

假如有3台服务器

首次启动选举机制
(1) 服务器 1 启动并发起选举。服务器 1 为自己投票。此时,服务器 1 1票,不超过一半(2 票),选举无法完成,服务器1 状态保持 LOOKING;

(2) 服务器 2 启动,并启动另一次选举。服务器 1 和服务器 2 为自己投票并交换投票信息:此时服务器 1 发现服务器 2 的 myid大于其当前的投票推送(服务器 1),并将投票更改为按服务器 2。此时服务器 1投票0票,服务器 2 现在拥有超过一半的选票 服务器 2 被选举为领导者。服务器 1 将状态更改为 FOLLOWING,服务器 2将状态更改为 LEADING;

(3) 服务器 3启动并进行选举。此时服务器1、2不再处于L00KING状态,不会改变选票信息。投票信息结果交换:服务器2 2票,服务器3 1票。服务器 3服从多数,将投票信息更改为服务器 2,并将状态更改为 FOLLOWING;

猜你喜欢

转载自blog.csdn.net/weixin_46322367/article/details/124516368
今日推荐