Zookeeper详细使用解析!分布式架构中的协调服务框架最佳选型实践

简介: 本文主要介绍了Zookeeper实现分布式协调服务,解决分布式环境中服务的协调和管理问题。分析了Zookeeper实现分布式锁的方式,详细介绍Zookeeper中的数据模型和特点,Zookeeper中一致性的实现方式。通过使用Docker安装Zookeeper,说明了Zookeeper进行分布式协调服务时的三种工作模式以及三种使用的端口。

Zookeeper概念

  • Zookeeper是分布式协调服务,用于管理大型主机,在分布式环境中协调和管理服务是很复杂的过程,Zookeeper通过简单的架构和API解决了这个问题

Zookeeper实现分布式锁

分布式锁三要素:
加锁
解锁
锁超时
  • Zookeeper数据结构类似树结构,由节点Znode组成
  • Znode分为四种类型:

    • 持久节点(PERSISTENT): 默认节点类型,创建节点的客户端与Zookeeper断开连接后,节点依旧存在
    • 持久节点顺序节点(PERSISTENT_SEQUENTIAL): 持久节点顺序节点就是在创建持久节点时,Zookeeper根据创建节点的时间顺序给节点进行编号
    • 临时节点(EPHEMERAL): 创建节点的客户端与Zookeeper断开连接后,临时节点会被删除
    • 临时节点顺序节点(EPHEMERAL_SEQUENTIAL): 临时节点顺序节点就是在创建临时节点时,Zookeeper根据创建节点的时间顺序给节点进行编号
    • 应用Zookeeper的临时顺序节点,实现分布式锁

Zookeeper与Redis分布式锁比较:

分布式锁 Zookeeper Redis
优点 1.有封装好的框架,容易实现
2.有等待锁队列,提升抢锁的效率
Set和Del指令性能高
缺点 添加和删除节点性能低 1.实现复杂,需要考虑原子性,误删,锁超时问题
2.没有等待锁的队列,只能客户端自旋来等锁,效率低

Zookeeper的数据模型

  • 类似数据结构中的树,文件系统中的目录
  • Zookeeper的数据存储基于节点Znode
  • Znode的引用方式是路径引用,每一个Znode节点拥有唯一的路径

Znode中的元素

  • data: Znode存储的数据信息
  • ACL: 记录Znode的访问权限,即哪些进程和IP可以访问本节点
  • stat: Znode的各种元数据(数据的数据)
  • child: 当前节点的子节点引用

Zookeeper的应用场景是读多写少的应用场景:Znode不用来存储大规模的业务数据,用于存储少量的状态和配置信息(Znode存储数据不能超过1MB)

Zookeeper基本操作

  • 创建节点:create
  • 删除节点:delete
  • 判断节点是否存在:exists
  • 获得一个节点的数据:getData
  • 设置一个节点的数据:setData
  • 获取节点下的所有子节点:getChildren

exists,getData,getChildren属于读操作,Zookeeper客户端在请求读操作时,可以选择是否设置watch

Zookeeper事件通知

  • Watch可以理解成注册在特定Znode上的触发器
  • 当Znode发生改变的时候,调用create,delete,setData方法,将会触发Znode上注册的对应事件,请求的Watch的客户端会接收到异步通知
  • Zookeeper事件通知的交互过程:

    • 客户端调用getData方法,watch的参数是true,服务端接收到请求,返回节点数据,在对应的Hash表中插入被Watch的Znode路径以及Watcher列表
    • 当被Watch的Znode删除,服务端会查找Hash表,找到该Znode对应的所有Watcher,异步通知客户端,并且删除Hash表中对应的key-value

Zookeeper的一致性

  • Zookeeper Service集群是一主多从结构
  • 在更新数据时,首先更新到主服务器,再同步到从服务器
  • 在读数据时,直接读取任意节点
  • 采用ZAB协议,为了保证主从节点数据的一致性

ZAB协议

  • ZAB(Zookeeper Automic Broadcast): 解决Zookeeper集群崩溃恢复,主从数据同步问题
  • ZAB三种节点状态:

    • Looking:选举状态
    • Following:Following节点(从节点)所处的状态
    • Leading:Leading(主节点)所处的状态
  • 最大ZXID: 节点本地的最新事务编号,包含epoch计数两部分

ZAB集群崩溃恢复

  • 当Zookeeper的主节点服务器宕机后,集群就会进行崩溃恢复,分成三个阶段:

    • Leader election(选举阶段):

      • 集群中的节点处于Looking状态,各自向其它节点发起投票,投票当中包含自己服务器的ID和最新事务ID(ZXID)
      • 节点用自身的ZXID和其它节点收到的ZXID作比较,如果发现其它节点的ZXID比自身大,即数据比自己新,就重新发起投票,投票给目前已知最大ZXID所属节点
      • 每次投票后,服务器都会统计投票数量,判断是否某个节点得到半数以上的投票,这样的节点将会成为准Leader,状态变为Leading,其它节点状态变为Following
    • Discovery(发现阶段):

      • 在从节点发现最新的ZXID和事务日志,目的是为了防止在意外情况,选举产生多个Leader
      • Leader接收所有Follower发送的最新的epoch值,Leader从中选出最大的epoch,基于此值+1,生成新的epoch分发给各个Follower
      • 各个Follower接收到最新的epoch,返回ACK(响应码)给Leader,带上各自最大的ZXID和历史事务日志,Leader选出最大的ZXID,并更新自身历史日志
    • Synchronization(同步阶段):

      • 将Leader收集得到的最新历史事务日志,同步给集群中的所有Follower,只有当半数Follower同步成功,这个准Leader才能成为正式Leader.集群崩溃恢复正式完成

ZAB主从数据同步

  • Broadcast

Zookeeper常规情况下更新数据的时候,由Leader广播到所有的Follower:

  • 客户端发出写入数据请求给任意的Follower
  • Follower把写入数据请求转发给Leader
  • Leader采取二阶段提交方式:(先保留提交日志,再提交数据)先发送Propose广播给Follower
  • Follower接收到Propose消息,写入日志成功后,返回ACK消息给Leader
  • Leader接收到半数以上的ACK消息,返回成功给客户端,并且广播commit请求给Follower
数据一致性:
强一致性
弱一致性
顺序一致性:Zookeeper,依靠事务ID和版本号,保证数据的更新和读取是有序的

Zookeeper应用场景

  • 分布式锁: 应用Zookeeper的临时顺序节点,实现分布式锁
  • 服务注册与发现: 利用Znode和Watcher,实现分布式服务注册与发现,如Dubbo
  • 共享配置和状态信息: Redis的分布式解决方案Codls,利用Zookeeper存放数据路由表和codls-proxy节点元信息,同时colds-config发起的命令都会通过Zookeeper同步到各个存活的codls-proxy
  • 高可用实现: Kafka,HBase,Hadoop都依靠Zookeeper同步节点信息,实现高可用

基于Docker创建Zookeeper

1.创建docker-compose.yml
zoo:
    image: zookeeper
    restart: always
    hostname: zoo
    ports:
        - 2181:2181
    environment:
        - ZOO_MY_ID: 1
        - ZOO_SERVER: server.1(id)=zoo(IP):2888:3888
2.执行docker-compose up -d

Zookeeper三种工作模式

  • 单机模式: 存在单点故障
  • 集群模式: 在多台服务器上部署Zookeeper集群
  • 伪集群模式: 在同一台服务器上运行多个Zookeeper实例,仍然有单点故障问题,其中配置的端口号要错开

Zookeeper三种端口号

  • 2181: 客户端连接Zookeeper集群使用的监听端口号
  • 3888: 选举Leader使用
  • 2888: 集群内机器通讯使用(Leader和Follower之间数据同步使用的端口号,Leader监听此端口)
相关文章
|
机器学习/深度学习 文字识别 监控
安全监控系统:技术架构与应用解析
该系统采用模块化设计,集成了行为识别、视频监控、人脸识别、危险区域检测、异常事件检测、日志追溯及消息推送等功能,并可选配OCR识别模块。基于深度学习与开源技术栈(如TensorFlow、OpenCV),系统具备高精度、低延迟特点,支持实时分析儿童行为、监测危险区域、识别异常事件,并将结果推送给教师或家长。同时兼容主流硬件,支持本地化推理与分布式处理,确保可靠性与扩展性,为幼儿园安全管理提供全面解决方案。
737 3
|
10月前
|
消息中间件 分布式计算 资源调度
《聊聊分布式》ZooKeeper与ZAB协议:分布式协调的核心引擎
ZooKeeper是一个开源的分布式协调服务,基于ZAB协议实现数据一致性,提供分布式锁、配置管理、领导者选举等核心功能,具有高可用、强一致和简单易用的特点,广泛应用于Kafka、Hadoop等大型分布式系统中。
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
681 4
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
1716 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
存储 机器学习/深度学习 应用服务中间件
阿里云服务器架构解析:从X86到高性能计算、异构计算等不同架构性能、适用场景及选择参考
当我们准备选购阿里云服务器时,阿里云提供了X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等多种架构,每种架构都有其独特的特点和适用场景。本文将详细解析这些架构的区别,探讨它们的主要特点和适用场景,并为用户提供选择云服务器架构的全面指南。
1399 18
|
算法 前端开发 定位技术
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
1398 1
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
543 18
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
905 1

热门文章

最新文章

推荐镜像

更多
  • DNS