Apache zookeeper 应用程序实例和Zookeeper服务器的数量应该相同吗?

Apache zookeeper 应用程序实例和Zookeeper服务器的数量应该相同吗?,apache-zookeeper,Apache Zookeeper,应用程序实例和Zookeeper服务器的数量应该相同吗?我理解2F+1的要求是容忍F故障,但这是容忍Zookeeper实例本身的故障。但应用程序实例的数量如何?例如,假设我有3台zookeeper服务器,我有2个应用程序实例正在运行,由zookeeper管理,在任何给定时间,只有一个应用程序实例将在主模式下运行,另一个在待机模式下运行。现在,我希望能够容忍我的应用程序本身的一个实例失败(而不是zookeeper实例),这样,在待机模式下运行的另一个应用程序实例应该被选为新的领导者。这样行吗?或者

应用程序实例和Zookeeper服务器的数量应该相同吗?我理解2F+1的要求是容忍F故障,但这是容忍Zookeeper实例本身的故障。但应用程序实例的数量如何?例如,假设我有3台zookeeper服务器,我有2个应用程序实例正在运行,由zookeeper管理,在任何给定时间,只有一个应用程序实例将在主模式下运行,另一个在待机模式下运行。现在,我希望能够容忍我的应用程序本身的一个实例失败(而不是zookeeper实例),这样,在待机模式下运行的另一个应用程序实例应该被选为新的领导者。这样行吗?或者我必须有3个应用实例和3个Zookeeper服务器


应用程序实例和Zookeeper服务器的正确配置是什么?

从Zookeeper的角度来看,不需要运行任何特定数量的应用程序实例。应用程序实例是ZooKeeper客户端。它们不是ZooKeeper集成(服务器端)的成员,因此不受2F+1容错要求的约束

但应用程序实例的数量可能会影响应用程序的总体可用性,具体取决于应用程序的设计。(正如您在示例中所说,您可以运行2个实例,并且它可以容忍1个失败。)


请注意,应用程序的领导人选举与ZooKeeper集合的内部领导人选举不同。在ZooKeeper集成中,需要服务器(2F+1)的仲裁来选择一个领导者,然后ZooKeeper集成领导者处理来自客户端的事务建议。在应用程序层,您的代码充当ZooKeeper客户端,并使用配方或API之类的内容执行自己的领导人选举。ZooKeeper集合节点不会投票决定哪个应用程序节点成为领导者。相反,您的应用程序节点将投票决定哪一个节点将成为领导者,并通过与ZooKeeper集成的协调进行投票,ZooKeeper集成已经有了自己的领导者。

它如何容忍一个应用程序实例失败?因为只有一个应用程序实例需要作为主应用程序运行,而其他应用程序实例需要作为备用应用程序运行。当我的一个应用程序实例失败时,应该运行leader选举,因此在我的情况下,我将只剩下一个应用程序实例,因此leader选举不会正常工作?不,你的应用程序的leader选举仍然可以成功。事实上,您描述的体系结构与HDFS NameNode实现高可用性的方式相同:通过ZooKeeper协调主节点和备用节点。您可能会想到动物园管理员团队自己的内部领导人选举,这确实需要法定人数(2F+1个实例),但这与您的应用程序的leader election不同。@user1870400了解更多关于中应用程序级leader election的实施情况。@Chris Nauroth说我总共有3台ZK服务器,这意味着我可以容忍一次失败,并说我有2个应用程序实例在运行。如果一个ZK实例失败,我将剩下2个ZK服务器,现在说ZK服务器1投票给应用实例1,ZK服务器2投票给应用实例2。在这种情况下,Zookeeper将如何为我的应用程序选择领导者?@user1870400 Zookeeper集合节点实际上不会投票给应用程序实例1或实例2。相反,您的应用程序实例将投票选出哪个应用程序实例成为领导者,并且通过与ZooKeeper集合协调事务来实现领导者选举。ZooKeeper集合已经在内部选择了自己的领导者,但这与您的应用程序决定哪个实例成为领导者不同。我编辑了答案以澄清这一点。我也回应了推荐阅读领导人选举方案,也考虑阿帕奇策展人。