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

Configuration Zookeeper如何管理其他集群中的节点角色?,configuration,apache-zookeeper,distributed-computing,Configuration,Apache Zookeeper,Distributed Computing,我的理解是,Zookeeper通常用于解决分布式系统中“跟踪哪个节点扮演特定角色”的问题(例如,数据库中的主节点或MapReduce集群中的主节点等) 为简单起见,假设我们有一个数据库,其中有一个主节点和多个副本,而数据库中的当前主节点将关闭。在这种情况下,原则上可以将其中一个副本节点设置为新的主节点。在这一点上,我的理解是: 如果我们没有动物园管理员 应用程序服务器可能不知道我们有一个新的主节点,因此除非我们在应用程序服务器上有一些自定义逻辑来检测/纠正此问题,否则它们将不知道向何处发送写操作

我的理解是,Zookeeper通常用于解决分布式系统中“跟踪哪个节点扮演特定角色”的问题(例如,数据库中的主节点或MapReduce集群中的主节点等)

为简单起见,假设我们有一个数据库,其中有一个主节点和多个副本,而数据库中的当前主节点将关闭。在这种情况下,原则上可以将其中一个副本节点设置为新的主节点。在这一点上,我的理解是:

如果我们没有动物园管理员 应用程序服务器可能不知道我们有一个新的主节点,因此除非我们在应用程序服务器上有一些自定义逻辑来检测/纠正此问题,否则它们将不知道向何处发送写操作

如果我们有动物园管理员 Zookeeper会以某种方式检测到该故障,并更新相应主密钥的值。此外,应用服务器可以(可选地)在Zookeeper中注册钩子,以便Zookeeper可以通知它们此故障,以便应用服务器可以更新(例如在内存中),哪个DB节点是新的主节点


我的问题是:

  • Zookeper如何知道将哪个节点作为主节点?Zookeper对这个选择负责吗
  • 如何将此信息传播到需要与Zookeeper交互的节点?例如,如果一个Zookeeper节点发生故障,应用程序服务器如何知道在这种情况下点击哪个Zookeeper节点?Zookeeper的管理方式是否与竞争解决方案(例如)不同

  • 这两个问题的答案都是1。二,。被称为
    领导人选举过程
    ,其工作原理如下:


    当进程在ZK管理的集群中启动时,集群进入
    选择
    状态。如果有一个领导者,那么就存在一个既定的等级制度,现有的领导者只是经过验证。如果没有前导(假设master已关闭),ZK将强制znode使用序列标志来查找新的前导。每个节点与其对等方对话并发送一条包含节点标识符(sid)和最近执行的事务(zxid)的消息。这些消息称为投票。当一个节点收到一个投票时,它可以忽略它,也可以保留它,具体取决于zxid。如果zxid较新,它将保留投票权,如果它比现有的投票权旧,它将放弃投票权。如果zxids中出现平局,则sid最高的选票获胜!因此,总有一天,所有节点都将拥有相同的投票权,这将通过sid定义新的前导。这就是ZK如何选择新的leader节点

    谢谢!那么Zookeper实际上是否可以负责为数据库集群选择主节点呢?i、 e.我不是说为Zookeeper本身选择一个主节点或领导者,而是为不同的集群选择一个主节点或领导者,例如,一个具有一个主节点和多个读取副本的数据库集群。Zookeeper真的可以管理其他集群的主节点选举吗?如果是这样,您是否有提供上述证据的链接,或者理想地解释这是如何工作的,以及针对什么类型的集群?如果您使用
    集群配置ZK
    ,您的所有问题都是肯定的。下面是一个列表(来自Apache),其中列出了ZK与之集成的许多项目。我希望有帮助。谢谢!因此,我想说的是:一方面,我们有一个ZK集群,它是一个专门用于运行和托管ZK本身的集群。另外,我们可能还有其他集群可以由ZK管理。例如,这可以是一个具有主节点和从节点的DB集群,我们可能希望ZK通过您上面概述的领导人选举过程来管理哪些节点是“主节点”。我做对了吗?我这样问是因为我认为您上面提到的领导人选举过程只适用于在ZK集群中选择一个主节点,而不是其他集群。确切地说,ZK是分布式系统的协调服务,但它本身也是一个分布式应用程序。现在,假设您使用ZK(集成或单个ZK实例)管理集群。这个集群(客户端节点)创建ZK管理的不同ZNode。这些znode和各种znode(短暂的、持久的、连续的)有一个层次结构。如果集群的一个客户机(声明为主节点)死亡,那么其余客户机节点创建的剩余znode将由ZK排序,并且集群将重新同步。1和2都在m y点view@ShalithaJayamal隐马尔可夫模型?我不太明白