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

    你可能感兴趣的文章
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>
    nginx:/usr/src/fastdfs-nginx-module/src/common.c:21:25:致命错误:fdfs_define.h:没有那个文件或目录 #include
    查看>>
    Nginx:NginxConfig可视化配置工具安装
    查看>>
    ngModelController
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    ngrok内网穿透可以实现资源共享吗?快解析更加简洁
    查看>>
    ngrok内网穿透可以实现资源共享吗?快解析更加简洁
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    nid修改oracle11gR2数据库名
    查看>>
    NIFI1.21.0/NIFI1.22.0/NIFI1.24.0/NIFI1.26.0_2024-06-11最新版本安装_采用HTTP方式_搭建集群_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
    查看>>
    NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
    查看>>
    NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
    查看>>