App实例和Zookeeper服务器的数量是否应该相同?我理解2F + 1要求容忍F失败,但这是为了容忍Zookeeper实例本身的失败。但是App实例的数量呢?例如,我说我有3个zookeeper服务器,我有2个我的APP运行实例,由zookeeper管理,在任何给定时间,我的App的一个实例将在主模式下运行而另一个在待机模式下运行。现在,我希望能够容忍我的APP本身(而不是zookeeper实例)的一个实例故障,以便我的APP的另一个以待机模式运行的实例应该被选为新的领导者。那会有用吗?或者我必须拥有3个App和3 Zookeeper服务器实例?
App实例和Zookeeper服务器数量的正确配置是什么?
答案 0 :(得分:1)
从ZooKeeper的角度来看,不需要运行任何特定数量的应用程序实例。应用程序实例是ZooKeeper客户端。它们不是ZooKeeper集合(服务器端)的成员,因此它们不受2F + 1容错要求的约束。
应用程序实例的数量可能会影响应用程序的整体可用性,具体取决于其设计。 (正如您在示例中所说,您可以运行2个实例,它可以容忍1个失败。)
请注意,您的应用程序的领导者选举与ZooKeeper合唱团的内部领导者选举不同。在ZooKeeper集合中,需要一定数量的服务器(2F + 1)来选举领导者,然后ZooKeeper集合领导者处理来自客户的交易提议。在应用程序层,您的代码充当ZooKeeper客户端,并使用Leader Election配方或Apache Curator Leader Election API执行自己的领导者选举。 ZooKeeper集合节点不会对哪个应用程序节点成为领导者进行投票。相反,您的应用程序节点正在投票决定哪一个成为领导者,并且他们通过与已经拥有自己的领导者的ZooKeeper集合进行协商投票。