ZooKeeper 维护简介

适用于私有云的 Edge v. 4.17.01

ZooKeeper 集群旨在即使一个或多个 ZooKeeper 节点发生故障,也能保持正常运行且不会丢失数据。这种弹性可以有效地在 ZooKeeper 节点上执行维护,而无需停机。

ZooKeeper 和 Edge 简介

在 Edge 中,ZooKeeper 节点包含有关各种 Edge 组件的位置和配置的配置数据,并会通知不同组件发生的配置变更。生产系统的所有受支持 Edge 拓扑都指定至少使用三个 ZooKeeper 节点。

使用 Edge 配置文件中的 ZK_HOSTSZK_CLIENT_HOSTS 属性指定 ZooKeeper 节点。例如:

ZK_HOSTS="$IP1 $IP2 $IP3" 
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3" 

其中:

  • ZK_HOSTS - 指定 ZooKeeper 节点的 IP 地址。这些 IP 地址必须按相同的顺序列在所有 ZooKeeper 节点上。

    在多数据中心环境中,列出所有数据中心的所有 ZooKeeper 节点。
  • ZK_CLIENT_HOSTS - 指定仅由此数据中心使用的 ZooKeeper 节点的 IP 地址。数据中心的所有 ZooKeeper 节点上的 IP 地址必须按相同的顺序列出。

    在单个数据中心安装中,这些节点就是 ZK_HOSTS 指定的节点。在多数据中心环境中,每个数据中心的 Edge 配置文件应仅列出该数据中心的 ZooKeeper 节点

默认情况下,所有 ZooKeeper 节点都会被指定为voter节点。这意味着,所有节点都参与了 ZooKeeper 主副本的选举。您可以将“:observer”修饰符添加到 ZK_HOSTS 中,以指明该备注是观察器节点,而不是投票节点。观察器节点不会参与主副本的选举。

通常,在创建多个边缘数据中心或单个数据中心包含大量 ZooKeeper 节点时,您需要指定“:observer”修饰符。例如,在一个包含两个数据中心的 12 主机 Edge 安装中,数据中心 2 中节点 9 上的 ZooKeeper 是观察器:

然后,在数据中心 1 的配置文件中使用以下设置:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

对于数据中心

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

关于领袖、跟随者、投票者和观察者

在多节点 ZooKeeper 安装中,其中一个节点被指定为主节点。所有其他 ZooKeeper 节点都被指定为跟随者。虽然可以从任何 ZooKeeper 节点进行读取,但所有写入请求都会转发到主副本。例如,Edge 中添加了一个新的消息处理器。系统会将这些信息写入 ZooKeeper 主副本。然后,所有关注者都会复制数据。

在 Edge 安装时,您可以将每个 ZooKeeper 节点指定为投票者或观察器。然后,所有投票 ZooKeeper 节点都会选举主副本。选举领导者的一个要求是,必须达到仲裁,并且所有可用的 ZooKeeper 选民节点都必须正常有效。达到共识意味着所有数据中心中超过一半的所有 ZooKeeper 投票节点都处于正常运行状态。

如果没有足够数量的有效投票节点,则无法选举出主副本。在这种情况下,Zookeeper 无法处理请求。也就是说,在恢复共识机制之前,您无法向 Edge 管理服务器发出请求、处理 Management API 请求或登录 Edge 界面。

例如,在单个数据中心安装中:

  • 您安装了三个 ZooKeeper 节点
  • 所有 ZooKeeper 节点都是投票者
  • 共识机制要求有两个正常运行的投票节点
  • 如果只有一个投票者节点可用,ZooKeeper 集成学习将无法正常运行

在包含两个数据中心的安装中:

  • 您为每个数据中心安装了三个 ZooKeeper 节点,总共有六个节点
  • 数据中心 1 有三个投票节点
  • 数据中心 2 有两个投票者节点和一个观察者节点
  • 仲裁基于两个数据中心的五位选民,因此需要三个运作的选民节点
  • 如果只有两个或更少的投票节点可用,则 ZooKeeper 集成无法正常运行

将节点添加为投票者或观察器

您的系统要求可能要求您向 Edge 安装中添加其他 ZooKeeper 节点。添加 ZooKeeper 节点文档介绍了如何向 Edge 添加其他 ZooKeeper 节点。添加 ZooKeeper 节点时,您必须考虑要添加的节点类型:投票者或观察器。

您需要确保有足够的投票节点,以便在一个或多个投票节点发生故障时,ZooKeeper 集群仍能正常运行,也就是说,仍有足够的投票节点可用。通过添加投票节点,您可以增加共识机制所需的节点数量,从而容忍更多投票节点发生故障。

不过,添加额外的投票节点可能会对写入性能产生负面影响,因为写入操作需要全体投票节点就主副本达成一致。确定领先变体所需的时间取决于投票者节点数量,随着您添加更多选民节点的时间增加,该数量会增加。因此,您不希望将所有节点都设为投票节点。

您可以添加观察器节点,而不是添加投票节点。添加观察者节点可提高整体系统读取性能,而不会增加选择主要节点的开销,因为观察者节点不会投票,也不会影响仲裁大小。因此,如果观察器节点发生故障,不会影响集合选举主副本的能力。但是,如果观察器节点丢失,可能会导致 ZooKeeper 集合的读取性能下降,因为可用于处理数据请求的节点数量会减少。

在单个数据中心内,Apigee 建议您的投票者数量不超过 5 个,无论观察者节点的数量是多少。对于两个数据中心,Apigee 建议您最多设置 9 个选举人(一个数据中心有 5 个,另一个数据中心有 4 个)。然后,您可以根据系统要求添加任意数量的观察器节点。

维护注意事项

在完全正常运行的集群上执行 ZooKeeper 维护时,如果一次只在单个节点上执行,则不会出现任何停机时间。通过确保任何时候只有一个 ZooKeeper 节点关闭,您可以确保总是有投票者节点参与投票,投票选出领导者。

跨多个数据中心进行维护

使用多个数据中心时,请注意 ZooKeeper 集群不会区分数据中心。ZooKeeper 集会将所有数据中心中的所有 ZooKeeper 节点视为一个集合。

在 ZooKeeper 执行仲裁计算时,投票者节点在给定数据中心的位置并不是影响因素计算的因素。各个数据中心中的个别节点可能会宕机,但只要整个集合中保留了足够的节点数,ZooKeeper 仍会正常运行。

维护影响

有时,您为了进行维护而需要关闭 ZooKeeper 节点(选民节点或观察者节点)。例如,您可能需要升级节点上的 Edge 版本,托管 ZooKeeper 的机器可能会发生故障,或者节点可能会因网络错误等其他原因而变得不可用。

如果发生故障的节点是观察器节点,那么在该节点恢复之前,ZooKeeper 集合的性能可能会略有下降。如果节点是投票节点,则可能会因参与主选举进程的节点丢失而影响 ZooKeeper 集合的可行性。无论选民节点为何停用,保持可用选民节点的最小票数非常重要。

维护流程

只有在确保 ZooKeeper 集群正常运行后,您才应考虑执行任何维护程序。这假设观察者节点正常运行,并且在维护期间有足够的选民节点可用于维持仲裁。

满足这些条件后,任意大小的 ZooKeeper 集合都可以在任何时候容忍单个节点丢失,而不会丢失数据或对性能产生显著影响。这意味着,只要一次只在一个节点上执行维护,您就可以随意对集合中的任何节点执行维护。

在执行维护操作时,请按照以下步骤确定 ZooKeeper 节点的类型(主节点、投票节点或观察器):

  1. 如果 ZooKeeper 节点上未安装 nc,请安装 nc:
    > sudo yum install nc
  2. 在节点上运行以下 nc 命令:
    > echo stat | nc localhost 2181

    其中 2181 是 ZooKeeper 端口。您应该会在表单中看到输出:
    Zookeeper 版本:3.4.5-1392090,
    构建时间:2012 年 9 月 30 日 17:52 GMT
    客户端:/a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    最小/平均/最大延迟时间:0/0/0
    已接收:1
    已发送:0
    连接数:1
    未处理:0
    Zxid:0xc00000044
    模式:跟随器
    节点数:653


    在节点输出的 Mode 行中,您应该会看到 observerleaderfollower(表示不是主副本的投票者),具体取决于节点配置。

    注意:在只有一个 ZooKeeper 节点的独立 Edge 安装中,Mode 设置为 standalone
  3. 在每个 ZooKeeper 节点上重复第 1 步和第 2 步。

摘要

对 ZooKeeper 集群执行维护的最佳方式是一次处理一个节点。请注意:

  • 您必须在维护期间维持足够的投票节点,以确保 ZooKeeper 集群保持正常运行
  • 停用观察器节点不会影响共识机制或选举主副本的功能
  • 系统会跨所有数据中心的所有 ZooKeeper 节点计算共识机制的最低要求人数
  • 在前一台服务器恢复运行后,继续对下一台服务器进行维护
  • 使用 nc 命令检查 ZooKeeper 节点