2 Proxy 负载均衡 及高可用性

概述

Zabbix proxies 可以组织成 proxy 组 以实现 Proxy 负载均衡 和高可用性。

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

  • 如果 proxy 离线,其 主机 将被移动到其他 proxies,从而保持高 proxy 可用性。
  • 如果 proxy 的 主机 数量比其他 proxies 多/少很多,其 主机 将被移动到其他 proxies 以平衡 proxy 负载。

满足以下条件时,Proxy 负载均衡 和高可用性功能将生效:

  • Proxies 运行的是 Zabbix 7.0 或更高版本;较早的 proxies 在升级前会被排除在 主机 重新分配之外。
  • 该 proxy 组 具有 online state

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 group

在 Zabbix 前端中配置 proxy group:

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

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

此值应小于组内 proxy 的总数。例如,在包含 10 个 proxy 的组中,如果将最小值设置为 10,那么只要有任意一个 proxy 失败,整个组就会变为离线。请注意,离线组中的在线 proxy 仍会正常运行,但不会进行负载均衡/高可用。
Description proxy group 的描述。
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。如果防火墙规则已更改但未经过测试,故障切换可能会失败。
Testing proxy load balancing

测试Proxy 负载均衡:

  1. 配置一个proxy 组.
  2. 确保该proxy 组具有online state.
  3. 确保主机被monitored by到proxy 组,而非单独的proxies(可使用主机mass update将主机从proxies移至proxy 组).
  4. 等待几秒让配置update并在proxy 组的proxies间完成主机分发. 通过刷新管理>Proxies中的主机列表观察变更.
Important notes
  • SNMP traps 不被 proxies 在 proxy 组 中支持.
  • 依赖外部配置的检查(例如 external checks 的脚本或 database checks 的ODBC配置)必须在 proxy 组 中的所有 proxies 上保持相同配置.
  • Database checks 需要对数据库 object/服务器拥有扩展权限.
  • VMware 主机 monitored by 一个 proxy 组 会被随机分配到组内的 proxies 之间. 这会导致每个 proxy 缓存所有VMware数据, 从而给vCenter带来额外负载.
  • 基于来自 proxy 组 中 proxy 的自动注册数据创建的 主机 会被设置为 monitored by 该 proxy 组. 然而, 基于来自 proxy 组 中 proxy 的网络发现数据创建的 主机 会被设置为 monitored by 该 proxy.