2 Proxy 负载均衡和高可用

概览

Proxy 负载均衡 允许通过 proxy 组 监控主机,具有自动在 proxies 和高 proxy 可用性之间分配主机的功能。

如果 proxy 组 中的一个 proxy 离线,其主机将立即重新分配给组中分配的主机最少的其他 proxies。或者,如果一个 proxy 的主机数量相比组平均值过多或过少,将通过均匀分配主机来触发组的重新平衡。

主机重新分配仅在在线 proxy 组 中发生。一个 proxy 组 被视为“在线”,如果其配置的最少数量的 proxies 在线(不是离线或未知)。

在线 proxies 的最小数量应该少于组中的 proxy 总数。在一个由 10 个 proxies 组成的组中,将在线 proxy 的数量设置为 10 会创建一个情况,即如果只有一个 proxy 失败,整个组将离线。最好要求有 6 个在线的 proxies。这将支持 4 个不健康的 proxies。

proxy 的状态为:

  • 在线 - 如果在 failover delay 期间与其有通信(被动 proxy 响应了服务器请求,而主动 proxy 向服务器发送了请求);
  • 离线 - 如果在故障转移延迟期间没有与其通信;
  • 未知 - 在 proxy 创建后或服务器启动后。

您可以使用 zabbix[proxy 组,<name>,state]zabbix[proxy 组,discovery] 内部 监控项 监控 proxy 组 的状态。

Proxy 负载均衡 和高可用性由 proxy group manager 进程管理。proxy 组 管理器始终了解哪些其他 proxies 是健康的或不健康的。

版本兼容性

  • 只有 Zabbix agents 7.0 及更高版本支持以主动模式与 proxy 组 一起工作;
  • Zabbix 7.0 之前的版本的 proxies 以及由这些 proxies 监控的主机将被排除在重新平衡操作之外,直到它们升级。

主机重新分配

Zabbix server 检查主机分配给proxy的平衡情况。如果存在以下情况,组被认为“不平衡”:

  • 主机过剩 - 一个proxy拥有的主机远多于组平均值;
  • 主机不足 - 一个proxy拥有的主机远少于组平均值。

如果分配给proxy的主机数量高于/低于组平均值至少10且是平均值的2倍,组则被认为“不平衡”。在这种情况下,如果平衡没有恢复,服务器会在宽限期(10倍故障转移延迟)后标记该组进行主机重新分配。

下表通过示例数字说明了何时触发(或不触发)主机重新分配:

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

proxy组管理器将以以下方式重新分配proxy组中的主机:

  • 计算每个proxy的平均主机数量;
  • 对于主机过剩的proxy - 将过剩主机移至未分配主机;
  • 对于主机不足的proxy - 计算平衡proxy所需主机数量;
  • 从主机最多的proxy中移除所需数量的主机;
  • 在主机最少的proxy之间分配未分配主机。

使用Zabbix sender与proxy组

在输入文件中发送来自不同主机的值到proxy组中的proxy时,使用-g选项,以避免某些值被错误地发送到错误的proxy。

配置Proxy 负载均衡

要配置Proxy 负载均衡以监控主机:

  1. 创建一个proxy 组(参见下方的“配置proxy 组”)。

对于被动检查,组中的所有proxies必须列在agents的Server参数中。

将组中的所有proxies添加到受监控主机的ServerActive agent参数中(使用分号分隔)是有益的,但不是强制性的。一个主动agent可以在ServerActive字段中只有一个proxy,Proxy 负载均衡仍然可以工作。当agent服务启动时,agent将接收所有Zabbix proxies的完整IP地址列表,加载并保留在内存中。基于当前的proxy-主机分配,主动检查(和Zabbix发送数据请求)将被重定向到正确的在线proxy。

如果在特定的proxy离线时启动/重启agent,在ServerActive字段中只有一个proxy可能会导致监控数据丢失。

  1. 确保proxy 组在线。

  2. 配置主机由proxy 组监控(而不是单个proxies)。您可以使用主机mass update将主机从proxy移动到proxy 组。

由单个proxy监控的主机(即使它属于proxy 组)不参与负载均衡/高可用性。 此外,分配给proxy 组的主机少于10个可能会导致组中proxies之间的主机分布不均。

  1. 等待几秒钟以更新配置,并在proxy 组中的proxies之间分配主机。通过刷新监控 -> 主机中的主机列表来观察变化。

当根据属于proxy 组的proxy的自动注册/网络发现数据创建主机时,此主机将设置为由该proxy 组监控。

限制:
  • Proxy组中的Proxy不支持 SNMP 陷阱。
  • 取决于外部配置的检查必须在Proxy组中的所有Proxy具有相同的配置。这包括:
    • 外部检查 - 脚本;
    • 数据库检查 - ODBC 配置。
  • 使用“数据库监控”项目时,DB 对象/服务器必须具有扩展权限。
  • 在Proxy组中监视 VMware 主机时,将在组内的Proxy之间随机分配 VMware 主机,并导致每个Proxy缓存所有 VMware 数据,从而对 vCenter 造成额外负载。
可能的防火墙问题

Agents 必须始终在防火墙级别允许访问所有Proxy。考虑以下几种情况:

  • 在 Zabbix agent 的主动检查中,在Proxy启动时,第一个Proxy响应并重定向到另一个Proxy。由于防火墙问题,另一个Proxy无法访问,通信停止在等待另一个Proxy响应的状态。这种情况的根本原因是第一个Proxy确信另一个Proxy是健康的。如果第一个Proxy失败,则它将尝试连接“ServerActive”参数中配置的不同地址,这不会成为问题。

  • HA 设置已经稳定运行了多个月。主机重新平衡从未发生过;也不需要。Proxy不需要验证到任何其他Proxy的“备用”通道。在故障转移场景中,可能因为半年前防火墙被修改而导致失败。

配置一个Proxy组

去配置一个Proxy组在Zabbix前端:

  • 前往: Administration → Proxy 组
  • 点击 创建Proxy组

参数 描述
Name 输入Proxy组名称。
Failover period 输入故障切换执行前的时间段(默认为 1 分钟;允许范围为 10 秒至 15 分钟)。
支持时间后缀(例如,30s,1m)。
支持用户宏。
Minimum number of proxies 输入使该组在线所需的最小在线Proxy数量(默认为 1;允许范围为 1 到 1000)。
支持用户宏。
Description 输入Proxy组描述。
Proxies Proxy组中的Proxy列表。最多显示五个Proxy(作为链接或普通文本显示,取决于对Proxy的权限)。
编辑现有代理组时显示此列表,如果组中至少有一个Proxy。