proxy 负载均衡和高可用性

概述

Zabbix proxy 可以组织到 proxy 组中,以实现 proxy 负载均衡和高可用性。

proxy 负载均衡和高可用性是指在 proxy 组内的 proxy 之间自动重新分配主机:

  • 如果某个 proxy 离线,其主机将被移动到其他 proxy,从而保持较高的 proxy 可用性。
  • 如果某个 proxy 的主机数量明显高于或低于其他 proxy,其主机将被移动到其他 proxy,以平衡 proxy 负载。

只有满足以下条件的组内 proxy 之间才能重新分配主机:

  • proxy 运行的是 Zabbix 7.0 或更高版本。
  • Proxy version 与 Zabbix 服务器版本匹配。 如果使用 Zabbix agent(被动式),proxy 版本必须与 agent 版本匹配。 主动式 agent 只需使用 Zabbix 7.0 或更高版本。
  • proxy 组处于在线状态。
  • 主机配置为由 proxy 组监控,而不是由单个 proxy 监控。

可以通过分配给 proxy 组的任意主机,使用内部检查监控 proxy 组的运行状况。 但是,要监控组内单个 proxy 的运行状况,请将主机分配给该 proxy;否则,结果可能不一致。

主机重新分配

proxy 负载均衡和高可用性由 Zabbix 服务器通过 proxy group manager 管理,它会持续监控每个 proxy 组中所有 proxy 的状态及其主机分布。

组内的 proxy 高可用性通过 proxy 故障切换来保证:当某个 proxy 离线时,其主机会立即重新分配到其他 proxy。 同时也会发生 proxy 负载均衡,因为主机会被重新分配到已分配主机数量最少的 proxy。

此外,当 proxy 的主机数量与组平均值相差至少 10 台且相差 2 倍时(主机过多或主机不足),会触发 proxy 负载均衡。 如果在宽限期(10 x failover delay)之后不平衡仍然存在,则会将该 proxy 组加入主机重新分配队列。

proxy group manager 使用以下逻辑重新分配主机:

  1. 计算每个 proxy 的平均主机数量。
  2. 对于主机过多的 proxy——将多余的主机移到未分配的 proxy 池中。
  3. 对于主机不足的 proxy——计算达到平衡所需的主机数量。
  4. 从主机数量最多的 proxy 中移除所需数量的主机。
  5. 将未分配的主机移动到主机数量最少的 proxy。

主机重新分配示例:

proxy 上的主机数 组平均值 主机重新分配
100 50 是
60 50 否
40 50 否
25 50 是
15 5 是
10 5 否

由少于 10 台 监控 的主机组成的 proxy 组,可能会导致组内各 proxy 之间的主机分布不均。

配置 proxy 组

要在 Zabbix 前端中配置 proxy 组:

  1. 转到 管理 > Proxy 组。
  2. 单击 创建 proxy 组。
  3. 在表单中输入 proxy 组参数。

参数 描述
名称 proxy 组的名称。
故障转移周期 proxy 组中的 proxy 必须与 Zabbix 服务器通信、才能被视为在线的时间段(默认值:1m;范围:10s-15m)。如果 proxy 未在此时间段内进行通信,其状态将更改为 离线,并且其主机会立即重新分配给其他 proxy。proxy 负载均衡将在经过该时间段的 10 倍时间后开始。
支持时间后缀(例如 30s、1m)和用户宏。
proxy 最小数量 保持proxy 组在线所需的在线 proxy的最小数量(默认值:1;范围:1-1000)。
支持用户宏。

此值应小于组中 proxy 的总数。例如,在包含 10 个 proxy 的组中,将最小数量设置为 10 会导致任意 proxy 发生故障时该组转为离线。请注意,离线组中的在线 proxy 仍会正常运行,但不会进行负载均衡/高可用。
描述 proxy 组的描述。
Proxy 编辑包含 proxy 的组时,显示最多五个 proxy 的列表(根据用户对 proxy 的权限,以链接或纯文本形式显示)。

配置 proxy 负载均衡

要使用 proxy 负载均衡,您需要在 Zabbix 前端中配置 proxy 组(请参见上文),并确保主机由 proxy 组监控,而不是由单个 proxy 监控(您可以使用主机批量更新,将主机从 proxy 移动到 proxy 组)。

如果使用 Zabbix agent,还需要进行以下配置:

请注意,只有 Zabbix agent 7.0(或更高版本)才能在主动模式下与 proxy 组配合使用。

如果 ServerActive 参数中仅包含 proxy 组中的一个 proxy(或 Zabbix 服务器),agent 仍然能够连接到正确的 proxy。 当 agent 服务启动并连接到指定的 proxy 后,agent 将接收并缓存组内所有 proxy 的完整列表及其当前负载。 随后,主动检查将根据 proxy 组中当前的 proxy-主机分配情况,重定向到负责该主机的正确在线 proxy。

如果 Zabbix agent 的 ServerActive 参数中仅指定一个 proxy,那么当 agent 在该指定 proxy 离线时启动或重启,可能会导致监控数据丢失。

使用 Zabbix sender 时,数据请求也会根据 proxy 组中当前的 proxy-主机分配情况,重定向到负责该主机的正确在线 proxy。 但是,如果您要从输入文件发送多个主机的值,请使用 -g 选项,以避免将数据发送到错误的 proxy。

Zabbix agent 还必须能够通过防火墙连接到 proxy 组中的所有 proxy。 否则,在重定向或故障转移期间,主动检查可能会挂起或失败。

例如:

  • 在主动检查期间,某个 proxy 可能会将 agent 重定向到另一个 proxy。 如果该 proxy 被防火墙阻止,通信将在等待响应时挂起。
  • 在没有近期重新平衡的稳定高可用设置中,agent 可能永远不会联系备用 proxy。 如果防火墙规则发生更改且未经过测试,故障转移可能会失败。
测试 proxy 负载均衡

要测试 proxy 负载均衡:

  1. 配置 proxy 组。
  2. 确保 proxy 组处于在线状态。
  3. 确保主机由 proxy 组监控,而不是由单个 proxy 监控(可以使用主机批量更新,将主机从 proxy 移动到 proxy 组)。
  4. 等待几秒钟,以便更新配置并在 proxy 组中的 proxy 之间分配主机。

在管理 > Proxy中刷新主机列表,观察变化。

重要说明
  • proxy 组中的 proxy 不支持 SNMP 陷阱。
  • 依赖外部配置的检查(例如用于外部检查的脚本,或用于数据库检查的 ODBC 配置)必须在 proxy 组中的所有 proxy 上使用相同的配置。
  • 数据库检查需要对数据库对象/服务器具有扩展权限。
  • 由 proxy 组监控的 VMware 主机会随机分配到该组中的各个 proxy。 这会导致每个 proxy 都缓存所有 VMware 数据,从而增加 vCenter 的负载。
  • 根据 proxy 组中某个 proxy 的自动注册数据创建的主机会被设置为由该 proxy 组监控。 但是,根据 proxy 组中某个 proxy 的网络发现数据创建的主机会被设置为由该 proxy监控。