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 组
  2. 单击 创建 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 组的描述。
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 组中所有 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 监控