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 组

要在 Zabbix 前端配置一个 proxy 组:

  • 转至:管理 → proxy 组
  • 点击 创建 proxy 组

参数 描述
Name 输入 proxy 组 名称。
Failover period 输入故障转移执行前的等待时间(默认为 1m;允许范围为 10s-15m)。
支持时间后缀(例如,30s,1m)。
支持用户宏。
Minimum number of proxies 输入组在线所需的最少在线 proxies 数量(默认为 1;允许范围为 1-1000)。
支持用户宏。
Description 输入 proxy 组 描述。
Proxies 组中的 proxies 列表。最多显示五个 proxies(根据对 proxy 的权限,显示为链接或纯文本)。
当编辑现有 proxy 组 且组中至少有一个 proxy 时,将显示此列表。

配置 proxy 负载均衡

要使用Proxy 负载均衡,您需要在Zabbix前端配置一个proxy 组(如上所述),并确保主机被monitored by到proxy 组,而非单独的proxies(您可以使用主机mass update将主机从proxies移至proxy 组)。

若使用Zabbix agent,还需按以下方式配置:

  • 对于passive checks,在服务器参数中列出所有proxy 组的proxies。

  • 对于active checks,建议在ServerActive参数中列出所有proxy 组的proxies或Zabbix server。

    Note that only Zabbix agent 7.0 (or later) will work with proxy groups in its active mode.

ServerActive参数仅包含proxy 组(或Zabbix server)中的一个proxy,agent仍能连接至正确的proxy。 当agent服务启动并连接至指定的proxy时,agent将接收并缓存组内所有proxy的IP列表及其当前负载。 随后,主动检查将根据proxy 组内当前的proxy-主机分配,重定向至正确的在线proxy以执行主机。

在Zabbix agent的ServerActive参数中仅指定单个proxy时,若agent启动/重启期间该proxy处于离线状态,可能导致监控数据丢失。

使用Zabbix sender时,数据请求也会根据proxy 组内当前的proxy-主机分配,重定向至正确的在线proxy以执行主机。 但若通过file发送多个主机的数值,请使用-g option以避免将数据发送至错误的proxy。

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

  • 主动检查期间,proxy可能将agent重定向至另一proxy。若该proxy被防火墙阻断,通信将在等待响应时挂起。
  • 在未进行近期再平衡的稳定高可用性环境中,agents可能从不联系备份proxies。若防火墙规则变更后未测试,故障转移可能失败。
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.