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;否则,结果可能不一致。

Host redistribution

Proxy 负载均衡和高可用性由Zabbix server通过服务器进程类型与线程管理,该组件持续监控每个proxy 组中所有proxies的状态及其主机分布。

Proxy通过proxy故障转移确保组内高可用性:当proxy离线时,其主机会立即重新分配到其他proxies。 当主机被重新分配给拥有最少主机的proxies时,也会触发Proxy 负载均衡。

此外,当proxy的主机数量与组平均值相差至少10个主机且达到2倍系数时(主机过剩或主机不足),将触发Proxy 负载均衡。 如果失衡状态在宽限期(10×故障转移延迟)后仍然存在,则该proxy 组将进入主机重新分配队列。

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

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

主机重新分配示例:

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

当proxy 组中的主机数量少于10个monitored by时,可能导致组内proxies之间的主机分布不均。

配置 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 组的描述。
Proxy 编辑包含 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 组中当前的 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中刷新主机列表,观察变化。

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