3.2. zookeeper 集群配置
在大多数生产环境中,建议您部署复制 ZooKeeper 实例的集群。稳定且高度可用的 ZooKeeper 集群对于运行可靠的 ZooKeeper 服务非常重要。ZooKeeper 集群也称为 ensembles。
ZooKeeper 集群通常由奇数个节点组成。ZooKeeper 要求集群中的大多数节点都已启动并在运行。例如:
- 在具有三个节点的集群中,至少有两个节点必须启动并在运行。这意味着它可以容许一个节点被停机。
- 在由五个节点组成的集群中,必须至少有三个节点可用。这意味着它可以容许两个节点处于 down 状态。
- 在由 7 个节点组成的集群中,必须至少有四个节点可用。这意味着它可以容许三个节点被停机。
在 ZooKeeper 集群中拥有更多节点可以提供更好的弹性和可靠性。
ZooKeeper 可以在带有偶数节点的集群中运行。但是,额外的节点不会增加集群的弹性。具有四个节点的集群至少需要三个节点可用,且只能容忍一个节点被停机。因此,它具有与只有三个节点的集群相同的弹性。
理想情况下,不同的 ZooKeeper 节点应该位于不同的数据中心或网络片段中。增加 ZooKeeper 节点数量会增加集群同步上消耗的工作负载。对于大多数 Kafka 用例,有 3、5 或 7 节点的 ZooKeeper 集群应该足够了。
具有 3 个节点的 ZooKeeper 集群只能容忍 1 个不可用的节点。这意味着,如果在 ZooKeeper 集群的其他节点上进行维护,集群节点会崩溃。
重复的 ZooKeeper 配置支持独立配置支持所有配置选项。为集群配置添加附加选项:
initLimit
-
允许后续者连接到集群领导机的时间长度。将时间指定为多个 ticks (请参阅
timeTick
选项 了解更多详情)。 syncLimit
-
跟随者可以位于领导机后的时间长度。将时间指定为多个 ticks (请参阅
timeTick
选项 了解更多详情)。 reconfigEnabled
- 启用或禁用 动态重新配置。必须启用才能向 ZooKeeper 集群添加或删除服务器。
standaloneEnabled
- 启用或禁用独立模式,其中 ZooKeeper 只使用一个服务器运行。
除了以上选项外,每个配置文件还应包含应该是 ZooKeeper 集群成员的服务器列表。服务器记录应以 server.id=hostname:port1:port2
格式指定,其中:
id
- ZooKeeper 集群节点的 ID。
hostname
- 节点侦听连接的主机名或 IP 地址。
port1
- 用于集群内通信的端口号。
port2
- 用于领导选举机制的端口号。
以下是具有三个节点的 ZooKeeper 集群配置文件示例:
timeTick=2000 dataDir=/var/lib/zookeeper/ initLimit=5 syncLimit=2 reconfigEnabled=true standaloneEnabled=false server.1=172.17.0.1:2888:3888:participant;172.17.0.1:2181 server.2=172.17.0.2:2888:3888:participant;172.17.0.2:2181 server.3=172.17.0.3:2888:3888:participant;172.17.0.3:2181
在 ZooKeeper 3.5.7 中,必须在使用前将 四个字母单词 添加到 allow 列表中。如需更多信息,请参阅 ZooKeeper 文档。
myid
文件
ZooKeeper 集群中的每个节点都必须被分配一个唯一 ID
。每个节点的 ID
必须在 myid
文件中配置,并存储在 dataDir
文件夹中,如 /var/lib/zookeeper/
。myid
文件应当仅包含一个将写入 ID
用作文本的一行。ID
可以是从 1 到 255 的任何整数。您必须在每个集群节点上手动创建此文件。使用此文件,每个 ZooKeeper 实例将使用配置文件中的相应 server.
行的配置来配置其监听程序。它还将使用所有其他 server.
行来识别其他群集成员。
在上例中,有三个节点,因此每个节点都有一个不同的 myid
,值分别为 1
、2
、3
。