Apache zookeeper 法定人数与非法定人数

Apache zookeeper 法定人数与非法定人数,apache-zookeeper,quorum,Apache Zookeeper,Quorum,动物园管理员专家 我问的问题对你来说可能是最基本的,但我对ZK是新手,我还没有掌握这个工具,所以请原谅我。考虑到这一点,我的问题是 假设我有一个由5台服务器组成的ZK集群,我的仲裁人数为3。现在,这保证了服务器不会进入分裂大脑的场景,如果它们位于两个物理上独立的DC或机器上 但是,我想知道的是,如果仲裁设置为3,这意味着Leader服务器需要等待至少2台服务器复制写入的数据,总共3个复制的数据。但是,如果客户机连接到不属于仲裁的服务器(这两个服务器中的任何一个),这不意味着它获取旧数据吗 首先,

动物园管理员专家

我问的问题对你来说可能是最基本的,但我对ZK是新手,我还没有掌握这个工具,所以请原谅我。考虑到这一点,我的问题是

假设我有一个由5台服务器组成的ZK集群,我的仲裁人数为3。现在,这保证了服务器不会进入分裂大脑的场景,如果它们位于两个物理上独立的DC或机器上

但是,我想知道的是,如果仲裁设置为3,这意味着Leader服务器需要等待至少2台服务器复制写入的数据,总共3个复制的数据。但是,如果客户机连接到不属于仲裁的服务器(这两个服务器中的任何一个),这不意味着它获取旧数据吗

首先,您不能“设置”法定人数。它是使用
N/2+1
(多数)从配置中自动计算的,其中N是zookeeper服务器的数量*


不属于仲裁的Zookeeper服务器不可用,无法向客户端提供数据,因此没有看到旧数据的风险。

当然,如果计算了仲裁,则可能会有偶数个服务器,导致大脑分裂,即4个服务器仲裁=2,如果我正确理解您的答案,您是说在复制过程中,不属于仲裁的节点变得不可用吗?但是关于ZK中的监视机制,仲裁的not部分不应该使用它吗,或者只为仲裁中的节点保留?仲裁不能是偶数。我已经更新了帖子,不再使用
ceil
,而是使用
+1
来澄清问题,但两者都是相同的。是的,您理解正确,当不在仲裁中时,ZK节点不可用。我不确定我是否理解你的最后一个问题,我也建议你再看一遍,因为我认为它很好地涵盖了你的问题。谢谢你,米克尔,现在开始有意义了。除了一件事。我知道我的问题很模糊。当客户机向主机发送写操作时,一个由5=Ensemble的ZK节点组成的集群和3个为=Quorum的节点组成,然后您必须有3个Quorum,启动并运行以写入数据。但是,如果客户端从非仲裁中读取数据,这意味着数据已经过时,该怎么办?因为数据不会传播到不属于仲裁的其余两个。这是如何处理的?通常,由于两个物理上独立的DC之间的网络延迟,您不会在两个DC中部署ZK。例如,美国和欧洲的单一集群将无法很好地发挥作用