&&大数据学习&&
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
🍋一、zookeeper概念
Zookeeper是 Apache Hadoop项目下的一个子项目,是一个树形目录服务。
Zookeeper翻译过来就是动物园管理员,他是用来管Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,简称zk
ZooKeeper 是一个分布式的、开源的协调服务,主要用于解决分布式系统中的一致性问题。它提供了一个简单而强大的接口,帮助开发者在分布式环境中实现诸如配置管理、命名服务、分布式锁、集群管理等功能。
🍋二、ZooKeeper 的架构
ZooKeeper 采用 主从架构,包含以下角色:
Leader
负责处理写请求和事务操作。通过选举机制产生。(ZooKeeper 的选举机制主要用于其集群管理,特别是在集群启动或领导者节点故障时,用于选出一个新的领导者节点。这个领导者节点将负责处理客户端的请求、维护集群状态以及与其他节点进行通信。)Follower
处理读请求,并将写请求转发给 Leader。参与 Leader 选举。Observer(可选)
与 Follower 类似,但不参与选举,用于扩展读性能。Client
与 ZooKeeper 集群交互的客户端。
🍋三、zookeeper提供的主要功能
1、配置管理
在多个应用程序(或服务器)中,假如存在一些相同的配置信息,在对该配置信息进行修改时,我们需要一个一个进行修改,这样会大大增加维护的成本,不方便管理。这时如果使用一个专门放配置中心的组件,将相同的配置信息放在配置中心,需要的时候直接拉取,这样可以大大节约维护的成本, 而zookeeper即可实现配置中心的功能。
2.分布式锁
在多个用户访问同一台主机上的应用程序数据时,我们可以通过加锁解决并发操作的问题,但是如果有多台主机相同的应用程序要访问同一数据时,这个时候我们在一台主机上加锁是不能解决另一台主机的并发问题的,换句话说自己的锁只对自己有效并不影响别的 ,这个时候就需要分布式锁解决这类问题,我个人理解分布式锁像是从所有主机中抽取出来的一把锁,或者是有一把总锁对所有主机都有效。zookeeper可以实现分布式锁的功能。
分布式锁允许在多个服务实例之间协调对共享资源的访问。在分布式环境中,传统的单机锁机制(如线程锁)无法跨进程或跨服务器工作,因此需要使用分布式锁来确保在同一时间只有一个服务实例能够访问或修改共享资源,从而避免数据竞争和数据不一致的问题。
3.分布式应用协调
分布式事务:ZooKeeper 可以用于实现分布式事务的协调,确保多个分布式节点能够协同工作,完成复杂的事务操作。
分布式选举:ZooKeeper 可以用于实现分布式系统中的领导者选举,确保在集群中只有一个节点担任领导者角色。
选举过程大致如下:
集群启动或领导者故障:当 ZooKeeper 集群启动时,或者当前的领导者节点因为某种原因(如崩溃或网络分区)无法继续工作时,集群会进入选举状态。
服务器状态转换:集群中的每个服务器都会将自己的状态转换为
LOOKING
,表示正在寻找领导者。投票过程:
- 每个服务器都会为自己投一票,并将自己的投票信息(包括服务器ID和ZXID,ZXID是ZooKeeper的事务ID,用于标识服务器的版本和状态)发送给集群中的其他服务器。
- 服务器会收集来自其他服务器的投票,并根据一定的规则(如ZXID的大小和服务器ID的大小)来决定是否接受其他服务器的投票。
- 如果一个服务器发现自己的投票能够赢得多数(即超过半数的服务器投票给自己),它就会成为领导者。
领导者确认:一旦选举出领导者,领导者会向集群中的其他服务器发送通知,确认自己的领导地位。其他服务器在收到领导者的通知后,会将自己的状态转换为
FOLLOWING
或OBSERVER
(对于观察者节点),并开始跟随领导者工作。故障恢复:如果领导者节点在工作过程中出现故障,集群会重新进入选举状态,选举出一个新的领导者。
4. 组服务
组成员管理:ZooKeeper 可以管理分布式系统中的组成员信息,如节点的加入、离开和更新。
负载均衡:通过组成员管理,ZooKeeper 可以帮助实现分布式系统中的负载均衡和故障恢复。
🍋四、使用场景
1. 分布式数据库
元数据信息管理:
- 定义:在分布式数据库中,元数据是指描述数据库结构、配置、权限等信息的数据。
- ZooKeeper 作用:ZooKeeper 可以用于集中存储和管理分布式数据库的元数据。例如,数据库管理员可以在 ZooKeeper 中创建节点来存储数据库表的结构信息、索引信息、权限设置等。
- 优势:通过 ZooKeeper,数据库管理员可以方便地查看和修改元数据,同时 ZooKeeper 的数据一致性保证确保所有节点都能获取到最新的元数据信息。
节点状态信息管理:
- 定义:节点状态信息指的是分布式数据库中各个节点的运行状态、负载情况等信息。
- ZooKeeper 作用:ZooKeeper 可以跟踪分布式数据库集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个数据库节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
- 优势:数据库管理员可以通过 ZooKeeper 实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。
2. 分布式消息队列
元数据管理:
- 定义:在分布式消息队列中,元数据包括队列的配置信息、消费者的消费位点等。
- ZooKeeper 作用:ZooKeeper 可以存储和管理消息队列的元数据。例如,消息队列系统可以在 ZooKeeper 中创建节点来存储队列的名称、消费者的消费位点等信息。
- 优势:通过 ZooKeeper,消息队列系统可以实现元数据的集中管理和动态更新,方便管理员进行配置和监控。
消费者协调:
- 定义:在分布式消息队列中,消费者协调指的是多个消费者如何共同消费消息,避免消息重复消费或消息丢失。
- ZooKeeper 作用:ZooKeeper 可以用于实现消费者协调。例如,通过 ZooKeeper 的分布式锁机制,可以确保同一时间只有一个消费者能够处理某个消息,从而避免消息重复消费。同时,ZooKeeper 还可以用于实现消费者的负载均衡,将消息均匀分配给不同的消费者。
- 优势:通过 ZooKeeper,消息队列系统可以实现高效、可靠的消费者协调,提高消息处理的效率和稳定性。
3. 服务发现和注册
服务注册:
- 定义:服务注册是指将服务实例的信息(如服务名称、地址、端口等)注册到注册中心,以便其他服务能够发现和调用。
- ZooKeeper 作用:ZooKeeper 可以作为服务注册中心,允许服务提供者将自己的服务信息注册到 ZooKeeper 中。例如,服务提供者可以在 ZooKeeper 中创建一个节点来存储自己的服务信息。
- 优势:通过 ZooKeeper,服务提供者可以方便地将自己的服务注册到注册中心,实现服务的动态发布和更新。
服务发现:
- 定义:服务发现是指服务消费者从注册中心获取可用的服务实例信息,以便进行服务调用。
- ZooKeeper 作用:ZooKeeper 可以帮助服务消费者从注册中心获取可用的服务实例信息。例如,服务消费者可以监听 ZooKeeper 中与服务名称相关的节点,当有新的服务实例注册或已有的服务实例下线时,ZooKeeper 会通知服务消费者。
- 优势:通过 ZooKeeper,服务消费者可以实时获取可用的服务实例信息,实现服务的动态发现和调用。
4. 分布式缓存
数据一致性协调:
- 定义:在分布式缓存中,数据一致性指的是多个缓存节点之间的数据保持一致。
- ZooKeeper 作用:ZooKeeper 可以用于协调分布式缓存的一致性。例如,当某个缓存节点更新数据时,可以在 ZooKeeper 中创建一个节点来存储更新后的数据版本信息。其他缓存节点可以监听这个节点,当数据版本发生变化时,及时更新自己的缓存数据。
- 优势:通过 ZooKeeper,分布式缓存系统可以实现高效、可靠的数据一致性协调,确保多个缓存节点之间的数据保持一致。
节点状态监控:
- 定义:节点状态监控是指对分布式缓存中的各个节点进行状态监控,以便及时发现和处理故障节点。
- ZooKeeper 作用:ZooKeeper 可以跟踪分布式缓存集群中的节点信息,监控节点的状态(如上线、下线、故障等)。例如,每个缓存节点在启动时可以向 ZooKeeper 注册自己的信息,并在故障时通知 ZooKeeper。
- 优势:通过 ZooKeeper,分布式缓存系统可以实时了解集群中各个节点的状态,从而进行更好的资源管理和故障恢复。