博客
关于我
Zookeeper实战(开发重点)
阅读量:797 次
发布时间:2019-03-25

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

选举机制(面试重点)

Zookeeper作为一个分布式的协调一致性的服务,采用一种独特的选举机制来维护集群内部的节点状态。在实际应用中,选举机制的理解是面试中的重点之一。以下是关于Zookeeper选举机制的详细解释。

半数机制

在Zookeeper中,集群中超过半数的节点必须存活才能标记集群为可用状态。因此,Zookeeper服务的安装通常采用奇数台服务器。这是因为,当一半以上的节点发生故障时,剩下的节点仍然能够通过选举产生新的Leader,确保集群的高可用性。

Leader选举过程

Zookeeper并不在配置文件中显式指定Master和Slave,但在运行时,集群中的节点会通过内部选举机制自动产生一个Leader节点。Leader是集群中能够提供高一致性的服务的节点,其选举过程遵循以下规则:

  • 最早启动的节点优先权:如果集群中有多个节点同时启动,则最早启动的节点会有更高的优先权。
  • 节点ID的比较:在选举过程中,节点通过ID字段进行比较,ID较大的节点胜出。
  • 半数以上支持:只有当有超过半数的节点确认同一个候选人作为Leader时,该候选人才会正式成为Leader。
  • 一个简单的选举过程示例

    以下是一个简单的Zookeeper集群选举过程示例:

    假设集群中有5台服务器(ID从1到5),它们依序启动:

  • 服务器1启动:由于仅有1台服务器运行,服务器1自动成为Leader,但其状态仍为LOOKING。
  • 服务器2启动:服务器2与服务器1通信,两者交换选举信息。由于两者都没有历史数据,ID较大的服务器2胜出。但由于只有2台服务器支持,未超过半数(3台以上),服务器1和服务器2继续保持LOOKING状态。
  • 服务器3启动:服务器3与前面两个服务器通信,与服务器1、2、3的支持,ID为3的服务器3胜出。因为有3台服务器支持,超过半数(3/5),所以服务器3正式成为集群的Leader。
  • 服务器4启动:服务器4与集群中的所有节点通信。当它与3台服务器(1、2、3)进行比较时,学3台服务器已经确认了服务器3作为Leader。因此,服务器4只能接收小弟身份,成为Follower节点。
  • 服务器5启动:类似服务器4的过程,服务器5也只能接收小弟身份,成为Follower节点。
  • 在这个过程中,Leader是由半数以上节点支持产生的,而不是全体节点的简单选择。


    节点类型

    Zookeeper中的节点主要分为两种类型,基于其存活状态的设计:

    短暂节点(Ephemeral)

    • 特点:在客户端与Zookeeper服务器断开连接后,节点会被自动删除。
    • 用途:短暂节点通常用于临时性数据,如用户会话中存储的数据。

    持久节点(Persistent)

    • 特点:在客户端与Zookeeper服务器断开连接后,该节点依然保持存在。
    • 用途:适用于需要长期存储的数据,如系统配置、关键业务数据等。

    Zookeeper还支持四种形式的目录节点:

  • 持久化目录节点(PERSISTENT)

    • 根节点默认为持久化目录节点。
    • 断开连接后,节点依旧存在。
  • 持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)

    • 客户端与Zookeeper断开连接后,其路径名称会 以顺序编号形式存在。
    • 举例说明:若有多台Zookeeper服务器,断开后路径为/path0000000001等。
  • 临时目录节点(EPHEMERAL)

    • 断开连接后节点被删除,适用于不需要长期存储的临时数据。
  • 临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)

    • 断开连接后节点被删除,路径名称使用顺序编号形式。
  • 创建Znode时,支持在节点路径下附加顺序编号。顺序号由父节点维护,确保 atomic性和一致性。这种顺序号机制可用于给分布式系统中的所有事件进行全局排序,便于客户端,通过序列号推断事件顺序。


    客户端命令行操作

    通过Zookeeper客户端工具(如bin/zkCli.sh),可以对Zookeeper进行丰富的操作管理:

  • 启动客户端

    bin/zkCli.sh
  • 查看所有操作命令

    help
  • 查看根目录下的节点

    ls /
  • 查看节点详细信息

    ls2 /
  • 创建普通节点

    create /sanguo "caocao"

    创建带序号节点时,使用-s参数:

    create -s /sanguo/weiguo "caocao"
  • 设置节点值

    set /sanguo "simayi"
  • 创建短暂节点

    create -e /sanguo/wuguo "zhouyu"
  • 监听节点数据变化

    watch /sanguo

    被监听的其他节点会收到数据变化通知。

  • 删除节点

    delete /sanguo/jin

    递归删除节点时,使用rmr命令。

  • 查看节点状态

    stat /sanguo
  • 通过这些命令,可以进行节点数据的创建、修改、删除等操作,同时支持节点状态和变化监听功能。

    转载地址:http://losyk.baihongyu.com/

    你可能感兴趣的文章
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    mxGraph改变图形大小重置overlay位置
    查看>>
    MongoDB可视化客户端管理工具之NoSQLbooster4mongo
    查看>>
    Mongodb学习总结(1)——常用NoSql数据库比较
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    mongodb定时备份数据库
    查看>>
    mppt算法详解-ChatGPT4o作答
    查看>>
    mpvue的使用(一)必要的开发环境
    查看>>
    MQ 重复消费如何解决?
    查看>>
    mqtt broker服务端
    查看>>
    MQTT 保留消息
    查看>>
    MQTT 持久会话与 Clean Session 详解
    查看>>
    MQTT介绍及与其他协议的比较
    查看>>
    MQTT工作笔记0007---剩余长度
    查看>>
    MQTT工作笔记0008---服务质量
    查看>>
    MQTT工作笔记0009---订阅主题和订阅确认
    查看>>
    Mqtt搭建代理服务器进行通信-浅析
    查看>>
    MS COCO数据集介绍
    查看>>
    MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
    查看>>