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

    你可能感兴趣的文章
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>