Zookeeper学习

Zookeeper 是一个开源的分布式协调框架,它主要用于处理分布式系统中的一些常见问题,如同步、配置管理、命名服务和集群管理等。Zookeeper 是由 Apache 提供的,并且广泛应用于各种分布式应用中,特别是在高可用、高可靠性和高性能的系统中。

Zookeeper 的主要功能

  1. 分布式协调:Zookeeper 提供了协调多个节点(服务器)间行为的机制。例如,分布式锁、选举、配置管理等。
  2. 命名服务:Zookeeper 提供类似于文件系统的树形结构,可以作为分布式系统中的命名服务,帮助各个节点在分布式环境中互相发现。
  3. 同步服务:Zookeeper 可以帮助多个客户端保持一致的状态。一个典型的例子是分布式锁,它确保在同一时刻只有一个客户端能进行某个操作。
  4. 配置管理:Zookeeper 可以集中管理配置信息并将其同步到所有节点,确保各个节点的配置信息一致。
  5. 高可用性:Zookeeper 本身设计为高可用且容错的,可以在节点出现故障时继续工作。

Zookeeper 的架构

Zookeeper 的核心架构由以下几个部分组成:

  • Zookeeper 集群 :Zookeeper 由多个节点组成,这些节点之间会通过选举产生一个 leader 节点,其它节点为
    follower。整个集群至少需要 3 个节点,以确保能够在节点失败时继续提供服务。
  • Zookeeper 客户端 :客户端通过 Zookeeper 提供的 API 进行交互,它可以是任意编程语言的客户端,Zookeeper
    提供了 Java、C、Python 等语言的客户端库。
  • Zookeeper 服务器(节点)
    Leader 节点:负责处理所有的写请求,并将数据同步到其它节点。
    Follower 节点:负责处理所有的读请求,且将写请求转发给 leader 节点。跟随 leader 节点的变化。
    Observer 节点:仅作为观察者,不参与投票和写请求,但它可以提供读服务,减少集群的压力。
    ZNode:Zookeeper 中的核心数据结构,类似于文件系统中的文件或目录。
  • ZNode 支持两种数据类型
  • 持久节点:当客户端断开连接时,节点依然存在。
  • 临时节点:当客户端与 Zookeeper 服务器断开连接时,节点会被自动删除。

Zookeeper 的工作原理

Zookeeper 基于 Paxos 协议实现分布式一致性。所有的写请求都会先由 Leader 节点进行处理,然后将更改同步到所有的 Follower 节点。

  1. 读请求:Zookeeper 集群中的任何节点都可以处理读请求,通常由 Follower 节点处理。
  2. 写请求 :写请求会先被发送到 Leader 节点,Leader 节点会进行数据处理并同步给其它节点。如果 Leader
    节点宕机,集群会进行 Leader 选举,确保集群的高可用性。
  3. 一致性 :Zookeeper 保证
    顺序一致性(所有操作按提交顺序被执行),原子性(每个操作要么完全成功,要么完全失败),单一视图(客户端能看到一致的数据视图),实时性(客户端总能看到最新的数据),高可靠性(如果某个节点失败,系统仍然可以继续运行)。

Zookeeper 的常用操作

创建节点:

bash

create /myNode "data"

创建一个路径为 /myNode,值为 "data" 的节点。

获取节点数据:

bash

get /myNode

获取路径 /myNode 的数据。

修改节点数据:

bash

set /myNode "newData"

修改路径 /myNode 的数据为 "newData"。

删除节点:

bash

delete /myNode

删除路径 /myNode 的节点。

获取子节点:

bash

ls /myNode

获取 /myNode 路径下的子节点列表。

Zookeeper 的应用场景

  1. 分布式锁:通过临时节点实现分布式锁,确保在同一时刻只有一个客户端能够操作某个资源。
  2. 服务注册与发现:Zookeeper 用于服务注册与发现,允许各个服务通过注册节点将自己暴露给集群中的其他节点,其他节点可以通过获取
    ZNode 子节点来发现服务。
  3. 分布式配置管理:Zookeeper 可以集中管理配置信息,所有服务都可以通过 Zookeeper
    获取最新的配置信息,确保配置的一致性和可更新性。
  4. 分布式协调:通过 Zookeeper 实现如选举、同步、状态共享等任务。

官方文档

https://zookeeper.apache.org/doc/r3.7.0/

相关推荐
报错小能手1 小时前
线程池学习(七)实现定时(调度)线程池
学习
●VON2 小时前
从模型到价值:MLOps 工程体系全景解析
人工智能·学习·制造·von
好奇龙猫2 小时前
【人工智能学习-AI-MIT公开课第 18. 表示:分類、軌跡、過渡】
学习
前端不太难2 小时前
从本地到多端:HarmonyOS 分布式数据管理实战详解
分布式·状态模式·harmonyos
Yeats_Liao3 小时前
MindSpore开发之路(二十五):融入开源:如何为MindSpore社区贡献力量
人工智能·分布式·深度学习·机器学习·华为·开源
hhcccchh3 小时前
学习vue第八天 Vue3 模板语法和内置指令 - 简单入门
前端·vue.js·学习
浩瀚地学3 小时前
【Java】异常
java·开发语言·经验分享·笔记·学习
Nan_Shu_6144 小时前
学习: Threejs (3)& Threejs (4)
学习
我爱娃哈哈4 小时前
SpringBoot + Seata + Nacos:分布式事务落地实战,订单-库存一致性全解析
spring boot·分布式·后端
IT=>小脑虎5 小时前
2026版 Python零基础小白学习知识点【基础版详解】
开发语言·python·学习