一:Zookeeper特性与节点数据类型
发布日期:2021-05-08 03:55:24 浏览次数:21 分类:精选文章

本文共 2896 字,大约阅读时间需要 9 分钟。

Zookeeper入门与实战指南

1. 什么是Zookeeper?

Zookeeper 是一个开源的分布式协调框架,属于 Apache Hadoop 生态系统的一部分。它的主要功能是解决分布式系统中常见的数据管理问题,如统一命名服务、状态同步、集群管理以及分布式应用的配置管理等。通过 Zookeeper,可以实现多个节点之间的高效通信与数据协调。

2. Zookeeper 核心概念

2.1 Zookeeper 的文件系统数据结构

Zookeeper维护一个类似文件系统的数据结构,每个子目录项称为 znode(目录节点)。与传统文件系统类似,我们可以创建、删除znode,并在znode下创建子znode。Zookeeper支持多种类型的znode:

  • 持久化目录节点 (PERSISTENT)

    客户端与Zookeeper断开连接后,该节点仍然存在,除非手动删除。

  • 持久化顺序编号目录节点 (PERSISTENT_SEQUENTIAL)

    客户端与Zookeeper断开连接后,该节点仍然存在,但Zookeeper会自动为其分配顺序编号。

  • 临时目录节点 (EPHEMERAL)

    客户端与Zookeeper断开连接后,该节点会被删除。

  • 临时顺序编号目录节点 (EPHEMERAL_SEQUENTIAL)

    客户端与Zookeeper断开连接后,该节点会被删除,且Zookeeper会为其分配顺序编号。

  • 容器节点 (Container)

    容器节点主要用于存储其他znode,若容器节点下没有子节点,Zookeeper会定期清理该节点。

  • TTL节点 (Time To Live, TTL)

    默认禁用,需通过配置启用。TTL节点会在达到设置的时间限制后自动删除。

  • 2.2 监听通知机制

    Zookeeper 提供强大的事件监听功能,客户端可以注册监听某些节点或目录的事件。一旦触发相应事件,监听会立即移除,确保不会有重复触发。

    • 节点监听:注册监听某个节点或其子节点的事件。当节点被删除或修改时,客户端会收到通知。

    • 目录监听:注册监听某个目录的事件。当目录下子节点被创建或删除时,客户端会收到通知。

    • 递归子节点监听:注册监听某个目录及其所有递归子目录的事件。当目录下任何子节点发生结构变化时,客户端会收到通知。

    Zookeeper 支持以下事件类型:

    • NodeCreated:节点创建
    • NodeDeleted:节点删除
    • NodeDataChanged:节点数据变化
    • NodeChildrenChanged:子节点列表变化
    • DataWatchRemoved:节点监听被移除
    • ChildWatchRemoved:子节点监听被移除

    2.3 Zookeeper 的经典应用场景

    Zookeeper 在分布式系统中有广泛的应用场景,常见包括:

  • 分布式配置中心

    统一管理和分发配置文件,确保各节点配置一致。

  • 分布式注册中心

    为服务注册和发现提供统一的接口。

  • 分布式锁

    实现分布式上的互斥操作,防止并发冲突。

  • 分布式队列

    提供高效的消息队列实现,支持异步通信。

  • 集群选举

    用于节点间的领导选举,确保集群中只有一个主节点。

  • 分布式屏障

    实现节点间的同步机制,防止某些节点的失效影响整体系统。

  • 发布/订阅

    支持事件发布和订阅,实现分布式系统间的通信。

  • 3. Zookeeper 实战

    3.1 安装 Zookeeper

    1. 安装 Java 环境

    确保 Java 环境配置正确:

    java -version

    2. 下载并安装 Zookeeper

    wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
    tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
    cd apache-zookeeper-3.5.8-bin

    3. 配置配置文件

    cp zoo_sample.cfg zoo.cfg

    4. 启动 Zookeeper

    bin/zkServer.sh start conf/zoo.cfg

    5. 检查启动状态

    echo stat | nc 192.168.109.200

    6. 连接 Zookeeper

    bin/zkCli.sh -server ip:port

    3.2 使用命令行操作

    查看支持命令

    help

    创建节点

    create /test-node some-data

    查看节点信息

    get /test-node

    修改节点数据

    set /test-node some-data-changed

    查看节点状态

    stat /test-node

    4. Zookeeper 的 ACL 权限控制

    Zookeeper 的 ACL(访问控制列表)用于管理节点的读写权限。权限设置分为三个部分:权限模式(Scheme)、授权对象(ID)、权限信息(Permission)。

    权限模式

  • IP 模式:通过 IP 地址或 IP 段授权权限。
  • Digest 模式:通过用户名密码对节点进行身份验证。
  • Super 模式:具备 Super 权限的客户端可以对所有节点进行任何操作。
  • 权限信息

    Zookeeper 定义了五种操作权限:

  • create(c):允许创建子节点。
  • write(w):允许修改节点数据。
  • read(r):允许读取节点数据及子节点列表。
  • delete(d):允许删除子节点。
  • admin(a):允许设置 ACL。
  • 设置 ACL

    create -s /zk-node datatest digest:gj:X/NSthOB0fD/OT6iilJ55WJVado=:cdrwa

    获取 ACL

    getAcl /zk-node

    超级管理员模式

    通过 JVM 系统参数启用 Super 模式:

    -Dzookeeper.DigestAuthenticationProvider.superDigest=super

    5. Zookeeper 的内存数据与持久化

    5.1 内存数据

    Zookeeper 的数据存储在内存中,通过文件系统数据结构(类似于传统文件系统)组织数据。其核心数据结构包括:

    • DataTree:管理znode节点。
    • DataNode:存储节点数据和 ACL 信息。

    5.2 事务日志

    Zookeeper 记录每一次客户端操作到事务日志中,支持事务的非阻塞性处理。事务日志文件命名规则为 log.X.Y,默认存储在 dataDir 目录。

    5.3 数据快照

    通过配置 snapCount,Zookeeper 会定期生成数据快照,记录全量数据状态。快照文件命名规则为 snapshot.X.X,默认存储在 dataDir 目录。

    总结

    Zookeeper 是一个强大而灵活的分布式协调框架,广泛应用于分布式系统的配置管理、注册中心、分布式锁等场景。通过合理配置和使用其核心功能,开发者可以充分发挥 Zookeeper 的优势,构建高效可靠的分布式系统。

    上一篇:二:Zookeeper客户端使用与集群特性
    下一篇:剑指 Offer 29. 顺时针打印矩阵

    发表评论

    最新留言

    关注你微信了!
    [***.104.42.241]2025年04月11日 12时45分12秒