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



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

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

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

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

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

最新更新