configuration - Zookeeper 如何管理其他集群中的节点角色?

标签 configuration apache-zookeeper distributed-computing

我的理解是 Zookeeper 经常用于解决分布式系统中“跟踪哪个节点扮演特定角色”的问题(例如,数据库中的主节点或 MapReduce 集群中的主节点等)。
为简单起见,假设我们有一个具有一个主节点和多个副本的数据库,并且数据库中的当前主节点出现故障。在这种情况下,原则上可以将其中一个副本节点设置为新的主节点。此时我的理解是:
如果我们没有 Zookeeper
应用服务器可能不知道我们有一个新的主节点,所以它们会 不是 除非我们在应用服务器本身上有一些自定义逻辑来检测/纠正这个问题,否则知道将写入发送到哪里。
如果我们有 Zookeeper
Zookeeper 会以某种方式 检测 此失败,并更新相应主 key 的值。此外,应用程序服务器可以(可选地?)在 Zookeeper 中注册钩子(Hook),因此 Zookeeper 可以通知它们此故障,以便应用程序服务器可以更新(例如在内存中)哪个 DB 节点是新的主节点。

我的问题是:

  • Zookeper 如何知道要让哪个节点成为主节点? Zookeper 是否对这个选择负责?
  • 这些信息如何传播到需要与 Zookeeper 交互的节点?例如。如果 之一Zookeeper 节点 下去,应用服务器如何知道在这种情况下要命中哪个 Zookeeper 节点? Zookeeper 的管理方式是否与竞争解决方案不同,例如etcd ?
  • 最佳答案

    1. 和 2. 的答案都称为 leader election process并通过以下方式简要工作:
    当一个进程在 ZK 管理的集群中启动时,集群会进入 election状态。如果有领导者,则存在已建立的层次结构,并且现有领导者只是经过验证。如果没有领导者(比如 master 宕机),ZK 会强制 znode 使用序列标志来寻找新的领导者。每个节点与其对等节点对话并发送包含节点标识符 (sid) 和它执行的最新事务 (zxid) 的消息。这些消息称为 votes .当一个节点收到投票时,它可以忽略它,也可以根据 zxid 保留它。如果 zxid 较新,它会保留投票,如果它比它拥有的旧它会丢弃它。如果 zxids 相同,则 sid 最高的投票获胜!所以会有一段时间,所有节点都将拥有相同的投票,这将由 sid 定义新的领导者。这就是 ZK 选举新领导节点的方式!

    关于configuration - Zookeeper 如何管理其他集群中的节点角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62392433/

    相关文章:

    ubuntu - 在 vmware 中从我的 ubuntu 运行 kafka 时无法识别的 VM 选项 '+UseCompressedOops'

    java - Java 中 Rest Services 分布式环境中解决 Race condition 的不同方法

    distributed-computing - Paxos 和发现

    Java sockets - 如何模拟多个客户端

    c# - 在我的 C# 项目中哪里可以找到 application.exe.config 文件?

    windows-services - 查询Zookeeper Windows API 启动/停止,使用Zk 作为windows 服务(使用prunsrv)

    configuration - 如何在 IIS 7 中防止/延长空闲超时?

    apache-zookeeper - Zookeeper 忽略 JVMFLAGS?

    java - 我应该把这个配置设置放在哪里?

    c# - 每当我打开 VS 2010 解决方案时,如何禁用正在 check out 的 .vspscc 文件?