我想在我的集群中使用 zookeeper。我有几个问题尚未在文档中找到答案。
我希望在主 zookeeper 所在的集群中有一个管理节点,然后在集群的某些节点上拥有 zookeeper,作为故障转移。
节点获取管理节点 URL 的最佳实践是什么?我无法对此进行硬编码,因为数据中心中可能存在多个集群实例(因此 DNS 名称不适用)。换句话说,是否存在发现机制?
当管理节点崩溃时,客户端节点如何知道要联系故障转移节点?它们是否应该能够读取相同的配置文件来了解仲裁中的服务器是什么?
设置仲裁时,是否有生成 myid 文件的最佳实践?这样每个节点都会自行发现其 ID?
答案1
我想要在主 zookeeper 所在的集群中有一个管理节点,然后在集群的某些节点上拥有 zookeeper,作为故障转移。
这不是 zookeeper 的工作方式。您在集群中设置 N 个 zookeeper 服务器,每个服务器都是平等的,并且每个服务器都可以随时成为集群的领导者。当领导者崩溃时,另一个服务器将自动接管领导权。没有一个主 zookeeper 节点。
1) zookeeper 中不存在管理节点。每个 zookeeper 服务器节点都可能成为仲裁节点的领导者。
2) 使用集群中所有 zookeeper 服务器的 host:port 配置客户端。如果客户端正在通信的服务器发生故障,客户端将重新连接到另一台服务器。
3) 我不确定你的意思。每个服务器都有一个 myid 文件,其中包含一个整数。只需自己分配 id,1、2、3...
您可以获取更多信息这里