ZooKeeper 维护简介

Edge for Private Cloud v4.19.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 地址。IP 地址在数据中心的所有 ZooKeeper 节点上必须按相同的顺序列出。

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

默认情况下,所有 ZooKeeper 节点均指定为 voter 节点。这意味着节点都会参与 ZooKeeper 领导者的选择。您可以在 ZK_HOSTS 中包含 :observer 修饰符,用于表示节点是观察者节点而不是选民。观察者节点不参与领导者选举。

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

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

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

对于数据中心 2:

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

以下部分详细介绍了主要节点、投票者节点和观察者节点,并介绍了添加投票者和观察者节点的注意事项。

关于领导者、关注者、投票者和观察者

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

在 Edge 安装时,您将每个 ZooKeeper 节点指定为投票者或观察者。然后,领导者会由所有投票者 ZooKeeper 节点投票选出。选择领导者的一项要求是,必须有quorum处方可用,并且正常运行的 ZooKeeper 选民节点数量有限。达成仲裁即意味着所有数据中心内超过一半的投票者 ZooKeeper 节点都在正常运行。

如果没有达到最低数额可用的选民节点,则无法选出任何领先者。在这种情况下,Zookeeper 无法处理请求。这意味着在恢复仲裁之前,您无法向边缘管理服务器发出请求、处理 Management API 请求或登录边缘界面。

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

  • 您安装了三个 ZooKeeper 节点
  • 所有 ZooKeeper 节点都是投票者
  • 仲裁阶段是两个正常工作的选民节点
  • 如果只有一个投票者节点可用,则 ZooKeeper 集成学习无法正常工作

在具有两个数据中心的安装中:

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

将节点添加为投票者或观察者的注意事项

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

您希望确保有足够的投票者节点,以便在一个或多个投票者节点下线时,ZooKeeper 集成学习仍然能够正常运行,这意味着仍然有一定数量的投票者节点可用。通过添加选民节点,可增加仲裁的规模,因此可以容忍更多选民节点停机。

但是,添加其他投票者节点可能会对写入性能产生负面影响,因为写入操作需要以最小票数与主要角色达成一致。确定主要副本所需的时间取决于选民节点的数量,选民节点的数量会随着您添加更多的选民节点而增加。因此,您不想让所有节点都投票者。

您可以添加观察者节点,而不是添加投票者节点。添加观察者节点可提高系统的整体读取性能,而不会增加选择主副本的开销,因为观察者节点不投票,不会影响仲裁大小。因此,即使某个观察者节点发生故障,也不会影响集成学习选择领先变体的能力。但是,丢失观察者节点可能会导致 ZooKeeper 集成的读取性能下降,因为可用于服务数据请求的节点较少。

在单个数据中心内,Apigee 建议您不要超过五名投票者,无论观察者节点有多少。在两个数据中心,Apigee 建议您不要超过九个投票者(一个数据中心有五名,另一个数据中心有四名)。然后,您可以根据需要添加任意数量的观察者节点,以满足系统要求。

移除 ZooKeeper 节点

您可能有多种原因需要移除 Zookeeper 节点;例如,节点损坏或添加到错误的环境中。

本部分介绍如何在 ZooKeeper 节点关闭且无法访问时移除该节点。

如需移除 ZooKeeper 节点,请执行以下操作

  1. 修改您的静默配置文件,并移除要移除的 ZooKeeper 节点的 IP 地址。
  2. 针对 ZooKeeper 重新运行 setup 命令,以重新配置剩余的 ZooKeeper 节点:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. 重启所有 ZooKeeper 节点:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. 重新配置管理服务器节点:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. 重新配置所有路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. 重新配置所有邮件处理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. 重新配置所有 Qpid 节点:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. 重新配置所有 Postgres 节点:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

维护注意事项

如果您一次在单个节点上执行 ZooKeeper 维护,您可以对功能齐全的集成方案进行维护,且无需停机。通过确保任何时候只有一个 ZooKeeper 节点关闭,您可以确保始终有一定数量的投票者节点可用于选择领导者。

跨多个数据中心进行维护

在使用多个数据中心时,请记住,ZooKeeper 集成学习不区分数据中心。ZooKeeper 组件会将所有数据中心中的所有 ZooKeeper 节点视为一个集成式组件。

在 ZooKeeper 执行仲裁计算时,投票者节点在给定数据中心中的位置不是影响因素。数据中心内的单个节点可以停机,但只要在整个集成式中保持仲裁,ZooKeeper 就会一直正常工作。

维护影响

在不同时间,您都必须关闭 ZooKeeper 节点(投票者节点或观察者节点)以进行维护。例如,您可能必须升级节点上的 Edge 版本,托管 ZooKeeper 的机器可能会发生故障,或者节点可能因某些其他原因(例如网络错误)而不可用。

如果下降的节点是观察者节点,那么在该节点恢复之前,ZooKeeper 集成的性能可能会略有下降。如果该节点是选民节点,由于参与领导者选举流程的节点丢失,可能会影响 ZooKeeper 集成方案的可行性。无论选民节点关闭的原因,保持可用选民节点的仲裁人数十分重要。

维护程序

只有在确保 ZooKeeper 集成正常运行后,才执行维护过程。这假设观察者节点正常运行,并且在维护期间有足够的投票者节点来保持仲裁。

满足这些条件时,任意大小的 ZooKeeper 集成学习模型可以在任何时候容忍单个节点的丢失,而不会丢失数据,也不会对性能产生有意义的影响。这意味着,只要某一节点同时位于一个节点上,您就可以随意对集成学习中的任何节点执行维护。

在执行维护过程中,请使用以下过程确定 ZooKeeper 节点类型(主要节点、投票者或观察者):

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

    您应该会在表单上看到输出:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

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

  3. 对每个 ZooKeeper 节点重复执行第 1 步和第 2 步。

摘要

对 ZooKeeper 集成学习执行维护的最佳方法是一次执行一个节点。请注意:

  • 在维护期间,您必须让选民节点达到一定数量,才能确保 ZooKeeper 集成方案保持正常运行。
  • 拆除观察者节点不会影响仲裁决定也不会影响领导者的票选能力。
  • 仲裁结果通过所有数据中心的所有 ZooKeeper 节点计算得出。
  • 在前一个服务器正常运行后对下一个服务器继续进行维护。
  • 使用 nc 命令检查 ZooKeeper 节点。