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

    你可能感兴趣的文章
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>
    npm run build报Cannot find module错误的解决方法
    查看>>
    npm run build部署到云服务器中的Nginx(图文配置)
    查看>>
    npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
    查看>>
    npm scripts 使用指南
    查看>>
    npm should be run outside of the node repl, in your normal shell
    查看>>
    npm start运行了什么
    查看>>
    npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
    查看>>
    npm 下载依赖慢的解决方案(亲测有效)
    查看>>
    npm 安装依赖过程中报错:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
    查看>>