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/

相关推荐
一隅论数智5 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20165 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本5 天前
离散数学第六课
学习·离散数学
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光5 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊5 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁5 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz5 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope5 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统