博客
关于我
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/

    你可能感兴趣的文章
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>