1 高可用
概述
高可用性(HA)通常是关键基础设施所必需的,这类基础设施几乎不能容忍停机。 因此,对于任何可能发生故障的服务,都必须提供故障切换选项,以便在当前服务发生故障时接管。
Zabbix 提供了一个原生高可用性解决方案,易于设置,并且不需要任何先前的 HA 经验。 原生 Zabbix HA 可用于为 Zabbix 服务器的软件/硬件故障提供额外一层保护,或减少因维护导致的停机时间。
在 Zabbix 高可用模式下,多个 Zabbix 服务器作为集群中的节点运行。 当集群中的一台 Zabbix 服务器处于活动状态时,其他服务器处于待机状态,随时准备在必要时接管。

切换到 Zabbix HA 不具有约束性。 您可以在任何时候切换回单机运行模式。
另请参见:实现细节
启用高可用集群
作为集群节点启动 Zabbix 服务器
要将 Zabbix 服务器作为集群节点启动,需要在服务器 配置 中指定两个参数:
- 必须为每个将作为 HA 集群节点的 Zabbix 服务器指定
HANodeName参数。
这是一个唯一的节点标识符(例如 zabbix-node-01),服务器在 agent 和 proxy 配置中将通过它被引用。
如果不指定 HANodeName,则服务器将以独立模式启动。
- 必须为每个节点指定
NodeAddress参数。
NodeAddress 参数(address:port)将由 Zabbix 前端用于连接到活动的服务器节点。
NodeAddress 必须与相应 Zabbix 服务器的 IP 或 FQDN 名称匹配。
在修改配置文件后,重启所有 Zabbix 服务器。 它们现在将作为集群节点启动。 服务器的新状态可以在 Reports > System information 中查看,也可以通过运行以下命令查看:
zabbix_server -R ha_status
此运行时命令会将当前 HA 集群状态记录到 Zabbix 服务器日志中(以及 stdout):

准备前端
请确保在前端配置中未定义 Zabbix 服务器 address:port(位于前端文件目录中的 conf/zabbix.conf.php)。

Zabbix 前端将通过读取 Zabbix 数据库中 nodes 表的设置自动检测活动节点。 活动节点的节点地址将用作 Zabbix 服务器地址。
proxy 配置
HA 集群节点(服务器)必须列在被动或主动 Zabbix proxy 的配置中。
对于被动 proxy,节点名称必须列在 proxy 的 Server 参数 中,并以 逗号 分隔。
Server=zabbix-node-01,zabbix-node-02
对于主动 proxy,节点名称必须列在 proxy 的 Server 参数 中,并以 分号 分隔。
Server=zabbix-node-01;zabbix-node-02
agent 配置
HA 集群节点(服务器)必须列在 Zabbix agent 或 Zabbix agent 2 的配置中。

要启用被动检查,节点名称必须列在 Server 参数 中,并以 逗号 分隔。
Server=zabbix-node-01,zabbix-node-02
要启用主动检查,节点名称必须列在 ServerActive 参数 中。 请注意,对于主动检查,节点必须与其他服务器之间用逗号分隔,而节点本身之间必须用 分号 分隔,例如:
ServerActive=zabbix-node-01;zabbix-node-02
故障切换到备用节点
如果活动节点停止,Zabbix 将自动故障切换到另一个节点。
要发生故障切换,必须至少有一个节点处于备用状态。
故障切换有多快?
所有节点都会每 5 秒更新一次其最后访问时间(如果状态发生变化,也会更新状态)。
因此:
- 如果活动节点关闭并成功将其状态报告为“stopped”,另一个节点会在 5 秒 内接管。
- 如果活动节点关闭/变得不可用,但无法更新其状态,备用节点会等待 故障切换延迟 + 5 秒后再接管。
故障切换延迟是可配置的,支持范围为 10 秒到 15 分钟(默认 1 分钟)。
要更改故障切换延迟,可以运行:
zabbix_server -R ha_set_failover_delay=5m
管理 HA 集群
可以使用专用的 运行时控制 选项来管理 HA 集群的当前状态:
ha_status- 将 HA 集群状态记录到 Zabbix 服务器日志中(以及 stdout);ha_remove_node=target- 删除由其<target>标识的 HA 节点 - 节点的名称或 ID(名称/ID 可通过运行ha_status的输出获取),例如:
zabbix_server -R ha_remove_node=zabbix-node-02
请注意,活动/备用节点不能被删除。
ha_set_failover_delay=delay- 设置 HA 故障转移延迟(介于 10 秒和 15 分钟之间;支持时间后缀,例如 10s、1m)。
可以监控节点状态:
- 在 Reports > System information 中。
- 在 System information 仪表板小部件中。
- 使用服务器的
ha_status运行时控制选项(见上文)。
内部监控项 zabbix[cluster,discovery,nodes] 可用于节点发现,因为它会返回包含高可用节点信息的 JSON。
禁用 HA 集群
要禁用高可用性集群:
- 备份配置文件2。
- 停止备用节点。
- 从活动主服务器中删除 HANodeName 参数。
- 重启主服务器(它将以独立模式启动)。
升级 HA 集群
要对 HA 节点执行主版本升级:
- 停止所有节点。
- 创建完整的数据库备份。
- 如果数据库使用复制,请确保所有节点都已同步且没有问题。如果复制已损坏,请不要升级。
- 选择一个将执行数据库升级的单个节点,通过注释掉
HANodeName将其配置更改为单机模式,并对其进行升级。 - 确保数据库升级已完全完成(系统信息 应显示 Zabbix 服务器正在运行)。
- 以 HA 模式重启该节点。
- 升级并启动其余节点(由于此时数据库已经升级,因此无需将它们切换为单机模式)。
在次版本升级中,只需升级第一个节点,确认其已完成升级并正在运行,然后再开始升级下一个节点。
实现细节
高可用性(HA)集群是一种可选方案,支持 Zabbix 服务器。 原生 HA 方案的设计目标是使用简单,可跨站点工作,并且对 Zabbix 可识别的数据库没有特定要求。 用户可以根据其环境中的高可用性需求,自由选择使用原生 Zabbix HA 方案,或第三方 HA 方案。
该方案由多个 zabbix_server 实例或节点组成。
每个节点:
- 单独配置。
- 使用同一个数据库。
- 可能有几种模式:active、standby、unavailable、stopped。
同一时间只能有一个节点处于 active(工作)状态。standby 节点只运行一个进程 - HA manager。 standby 节点不进行数据采集、处理或其他常规服务器活动;它们不监听端口;数据库连接数最少。
active 节点和 standby 节点都会每 5 秒更新一次各自的最后访问时间。 每个 standby 节点都会监控 active 节点的最后访问时间。 如果 active 节点的最后访问时间超过了“failover delay”秒,standby 节点会切换为 active 节点,并将之前 active 的节点标记为 unavailable 状态。
active 节点会监控自身的数据库连接状态 - 如果连接丢失超过 failover delay-5 秒,则必须停止所有处理并切换到 standby 模式。
active 节点还会监控 standby 节点的状态 - 如果某个 standby 节点的最后访问时间超过了 failover delay 秒,则该 standby 节点会被标记为 unavailable 状态。
这些节点的设计可兼容 Zabbix 的次要版本之间的变化。