我有一个由N个节点组成的Zookeeper集群(彼此了解)。如果我仅在zk客户端连接字符串中传递M 在更具体的情况下,如果我从群集传递仅1 zk的主机地址怎么办?zk客户端是否可以从群集连接到其他主机?如果这台主机掉线了怎么办?客户端是否可以连接到整体中的其他Zookeeper节点? 另一个问题是,是否可以限制客户端仅使用集合中的特定节点? 如果我仅在zk客户端连接字符串中传递M ZooKeeper客户端将仅连接到连接字符串中指定的M个节点。ZooKeeper合奏的后端交互(领导者选举和处理写交易建议)将继续由集群中的所有N个节点处理。N个节点中的任何一个仍然可以成为集成领导者。如果ZooKeeper服务器接收到写事务请求,并且该服务器不是当前领导者,则它将请求转发给当前领导者。 在更具体的情况下,如果我从群集传递仅1 zk的主机地址怎么办?zk客户端是否可以从群集连接到其他主机?如果这台主机掉线了怎么办?客户端是否可以连接到整体中的其他Zookeeper节点? 否,客户端只能连接到连接字符串中指定的单个地址。该地址实际上成为应用程序的单点故障,因为如果服务器关闭,客户端将没有任何其他选择来建立连接。 另一个问题是,是否可以限制客户端仅使用集合中的特定节点? 是的,您可以通过仅在客户端的连接字符串中列出那些节点来限制客户端考虑用于建立连接的节点。但是,请记住,群集中的N个节点中的任何一个都仍然可以成为领导者,然后所有客户端写请求都将转发给该领导者。从这个意义上讲,客户端间接使用其他节点,但是客户端没有建立到这些节点的直接套接字连接。 Apache文档中的ZooKeeper概述页面进一步讨论了ZooKeeper集群中客户端和服务器的行为。例如,在“ 实施”部分中有一个相关的引用: 作为协议协议的一部分,来自客户端的所有写请求都转发到称为领导者的单个服务器。其余的ZooKeeper服务器(称为跟随者)从领导者接收消息建议并同意消息传递。消息传递层负责替换出现故障的领导者,并将跟随者与领导者同步。
1> Chris Naurot..: