ZooKeeper 维护简介

ZooKeeper 集成学习旨在保持正常运行,不会丢失数据, 一个或多个 ZooKeeper 节点这种弹性可以有效地 无需系统停机的 ZooKeeper 节点。

关于 ZooKeeper 和 Edge

在 Edge 中,ZooKeeper 节点包含有关 各种 Edge 组件,并在配置更改时通知不同组件。全部 生产系统的受支持 Edge 拓扑使用至少三个 ZooKeeper 节点。

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

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

其中:

  • ZK_HOSTS 指定 ZooKeeper 节点的 IP 地址。IP 地址 必须在所有 ZooKeeper 节点上以相同的顺序列出。

    在多数据中心环境中,列出所有数据中心的所有 ZooKeeper 节点。

  • ZK_CLIENT_HOSTS 指定此节点使用的 ZooKeeper 节点的 IP 地址 仅限数据中心。IP 地址必须在 数据中心。

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

默认情况下,所有 ZooKeeper 节点都会被指定为voter节点。这意味着 都参与选出 ZooKeeper 领导者。您可以将 :observer 修饰符和 ZK_HOSTS,用于表示 该节点是观察者节点,而不是选民节点。一个观察器节点不参与 领导者的选举。

创建多个 Edge 数据时,您通常需要指定 :observer 修饰符 或单个数据中心拥有大量 ZooKeeper 节点时。例如,在 具有两个数据中心的 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 节点选出领导者。选举必须要满足的一项要求 该得分必须达到仲裁,并且可用的 ZooKeeper 选民节点数量必须达到一定数量。答 仲裁意味着在所有数据中心中,超过一半的选民 ZooKeeper 节点 功能。

如果没有可用的选民节点的最小票数,则无法选出任何主要节点。在这种情况下 ZooKeeper 无法处理请求。这意味着您无法向边缘管理服务发出请求 服务器、处理 API 请求或登录 Edge 界面,直到恢复仲裁。

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

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

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

  • 您为每个数据中心安装了三个 ZooKeeper 节点,总共有六个节点
  • 数据中心 1 有三个选民节点
  • 数据中心 2 有两个投票者节点和一个观察者节点
  • 仲裁根据两个数据中心的 5 名选民共同决定,因此 三个正常运行的选民节点
  • 如果只有两个或更少的选民节点可用,ZooKeeper 集成将无法 函数

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

根据您的系统要求,您可能需要向 Edge 添加额外的 ZooKeeper 节点 安装。添加 ZooKeeper 节点文档 介绍了如何向 Edge 添加额外的 ZooKeeper 节点。添加 ZooKeeper 节点时 考虑要添加的节点类型:选民或观察者。

您需要确保有足够的选民节点,以便在一个或多个选民节点关闭时 ZooKeeper 集成学习仍可以正常工作,这意味着仍然有投票者节点的最小票数 可用。通过添加选民节点,您可以增加仲裁的规模 容忍更多选民节点关闭

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

您可以添加观察者节点,而不是添加投票者节点。添加观察者节点会导致 整个系统的读取性能不会增加选择领先变体的开销,因为 观察者节点不会投票,也不会影响仲裁大小。因此,如果一个观察器节点 向下,它不会影响集成学习选择领先变体的能力。但是,丢失观察器 节点可能会导致 ZooKeeper 集成的读取性能下降, 可用于处理数据请求的节点更少。

在单个数据中心内,Apigee 建议您的投票者数量不要超过五位,无论如何选择 观察器节点数。Apigee 建议您将两个数据中心 超过九名选民(其中一间数据中心有五名,另一个数据中心四名)。然后,您可以添加尽可能多的 观测器节点。

移除 ZooKeeper 节点

您可能出于多种原因而需要移除 ZooKeeper 节点:例如,某个节点 或被添加到错误的环境中。

本部分介绍了如何在节点关闭(而非正常)时移除该节点 。

如需移除 ZooKeeper 节点

  1. 修改静默配置文件,并移除 移除。
  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 的机器可能会发生故障, (例如网络连接错误)

如果关闭的节点是观察器节点, 在节点恢复之前,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 行中,您应该会看到 observerleader,或 follower(表示非领先选民) 具体取决于节点配置

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

摘要

对 ZooKeeper 集成进行维护的最佳方法是, 。请注意:

  • 在维护期间,您必须维持投票者节点的仲裁数量,以确保 ZooKeeper 集成正常运行。
  • 删除观察者节点不会影响仲裁或选出主要节点的能力。
  • 系统会跨所有数据中心的所有 ZooKeeper 节点计算仲裁。
  • 在旧服务器正常运行后,继续维护下一台服务器。
  • 使用 nc 命令检查 ZooKeeper 节点。