2 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 组管理器 进行管理,该管理器会持续监控每个 proxy 组中所有 proxy 的状态及其主机分布情况。

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

此外,当 proxy 的主机数量与组平均值相比至少相差 10 台主机且达到 2 倍时(主机过多或主机不足),也会触发 proxy 负载均衡。
如果在宽限期(10 x 故障切换延迟)后这种不平衡仍然存在,则该 proxy 组会被加入主机重新分配队列。

proxy 组管理器使用以下逻辑重新分配主机:

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

主机重新分配示例:

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

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

配置 proxy 组

要在 Zabbix 前端中配置 proxy 组:

  1. 转到 管理 > Proxy groups
  2. 单击 Create proxy group

Parameter Description
Name proxy 组的名称。
Failover period 以秒为单位的时间段,在此期间 proxy 组中的某个 proxy 必须与 Zabbix 服务器通信,才会被视为在线(默认值:1m;范围:10s–15m)。如果 proxy 未在此期间内通信,则其状态将变为 Offline,并且其主机会立即重新分配给其他 proxy。proxy 负载均衡将在该时间段的 10 倍之后开始。
支持时间后缀(例如 30s、1m)和用户宏。
Minimum number of proxies 保持proxy 组在线所需的最少在线 proxy数量(默认值:1;范围:1–1000)。
支持用户宏。

该值应小于组中的 proxy 总数。例如,在一个包含 10 个 proxy 的组中,如果将最小值设置为 10,则任何一个 proxy 发生故障都会导致该组离线。请注意,离线组中的在线 proxy 仍会继续正常工作,但不会进行负载均衡/高可用性处理。
Description proxy 组的描述。
Proxies 在编辑包含 proxy 的组时,最多显示五个 proxy 的列表(显示为链接或纯文本,具体取决于用户对 proxy 的权限)。

配置 proxy 负载均衡

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

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

  • 对于被动检查,请在 Server 参数中列出 proxy 组中的所有 proxy。
  • 对于主动检查,建议在 ServerActive 参数中列出 proxy 组中的所有 proxy 或 Zabbix 服务器。 请注意,只有 Zabbix agent 7.0(或更高版本)才能在主动模式下与 proxy 组配合工作。

如果 ServerActive 参数中仅包含某个 proxy 组中的一个 proxy(或 Zabbix 服务器),agent 仍然能够连接到正确的 proxy。
当 agent 服务启动并连接到指定的 proxy 时,agent 将接收并缓存该组内完整的 proxy IP 列表及其当前负载。
随后,主动检查将根据 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 之间的主机分配。通过刷新 管理 > Proxies 中的主机列表来观察变化。
重要说明
  • proxy 组中的 proxy 不支持 SNMP traps
  • 依赖外部配置的检查(例如,external checks 的脚本,或 database checks 的 ODBC 配置)必须在 proxy 组中的所有 proxy 上具有相同的配置。
  • Database checks 需要对数据库对象/服务器具有扩展权限。
  • 由 proxy 组监控的 VMware 主机将随机分布到组内的各个 proxy 上。这会导致每个 proxy 都缓存所有 VMware 数据,从而增加 vCenter 的负载。
  • 根据来自 proxy 组中某个 proxy 的自动注册数据创建的主机,将被设置为由该 proxy 组监控。但是,根据来自 proxy 组中某个 proxy 的网络发现数据创建的主机,将被设置为由该 proxy 监控