高可用性(HA)通常在关键基础设施中是必需的,这些设施几乎无法承受任何停机时间。因此,对于任何可能发生故障的服务,必须有一个故障转移选项来在当前服务发生故障时接管其工作。
Zabbix 提供了一种原生的高可用性解决方案,易于部署且不需要任何先前的 HA 专业知识。原生 Zabbix HA 可用于为 Zabbix server 的软/硬件故障提供额外的保护层,或在维护期间减少停机时间。
在 Zabbix 高可用性模式下,多个 Zabbix servers 被 run 为集群中的节点。当集群中的一个 Zabbix server 处于活动状态时,其他节点处于待命状态,必要时可以接管其工作。
切换到 Zabbix HA 是非强制性的。您可以随时切换回独立运行模式。
另请参阅:实现细节
服务器 configuration 需要两个参数 启动一个 Zabbix server 作为集群节点:
这是服务器在agent中被引用的唯一节点标识符(例如 zabbix-node-01
) 并且proxy配置。如果不指定HANodeName,则服务器将 以独立模式启动。
NodeAddress参数(地址:端口)将被Zabbix前端用于连接 到活动服务器节点。NodeAddress 必须与相应 Zabbix server 的 IP 或 FQDN 名称匹配。
修改配置文件后,重启所有Zabbix servers。它们将会 现在可以作为集群节点启动。服务器的新状态可以在以下位置看到: 报告 → 系统信息 并通过运行以下命令:
仅返回OutputFormat格式要求结果 zabbix_server -R ha_status 仅返回OutputFormat格式要求结果 此运行时命令会将当前的高可用性集群状态记录到 Zabbix server 日志中(并输出到 stdout):
确保在前端配置中未定义 Zabbix server 地址:端口(在前端文件目录的 conf/zabbix.conf.php
中找到)。
Zabbix 前端将通过读取 Zabbix 数据库中 nodes 表的设置来自动检测活动节点。活动节点的节点地址将被用作 Zabbix server 地址。
HA集群节点(服务器)必须在被动或主动Zabbix proxy的配置中列出。
对于被动的proxy,节点名称必须以逗号分隔的形式列在proxy的Serverparameter中。
Server=zabbix-node-01,zabbix-node-02
对于主动的proxy,节点名称必须以分号分隔的形式列在proxy的Serverparameter中。
Server=zabbix-node-01;zabbix-node-02
HA 集群节点(服务器)必须在 Zabbix agent 或 Zabbix agent 2 的配置中列出。
要启用被动检查,节点名称必须列在 Server parameter 中,并用 逗号 分隔。
Server=zabbix-node-01,zabbix-node-02
要启用主动检查,节点名称必须列在 ServerActive parameter 中。请注意,对于主动检查,节点必须与其他服务器用逗号分隔,而节点本身之间必须用 分号 分隔,例如:
ServerActive=zabbix-node-01;zabbix-node-02
如果主节点停止,Zabbix 将自动故障转移到另一个节点。 发生故障转移时,必须至少有一个处于待机状态的节点。
故障转移的速度有多快?所有节点都会update它们的上次访问时间(以及状态,如果 它每隔 5 秒就会变化一次。所以:
如果主动节点关闭并设法报告其状态 当状态变为“已停止”时,另一个节点将在5 秒内接管。
如果主动节点关闭/无法访问,且无法进行 update 其状态,备用节点将等待故障转移延迟 + 5 秒以接管
故障转移延迟是可配置的,支持的范围介于 10 秒和 15 之间 分钟(默认为一分钟)。要更改故障转移延迟,可以运行:
仅返回OutputFormat格式要求结果 zabbix_server -R ha_set_failover_delay=5m 仅返回OutputFormat格式要求结果
HA集群的当前状态可通过专用的运行时控制选项进行管理:
ha_status
- 在Zabbix server日志中记录HA集群状态(并输出到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)节点状态可以被监控:
ha_status
运行时控制选项(见上文)。可以使用 zabbix[cluster,discovery,nodes]
内部 监控项 进行节点发现,因为它会返回包含高可用性节点信息的JSON。
要禁用高可用性集群:
对HA节点执行重大version升级时:
在较小的version升级中,只需升级第一个节点,确保其已升级并正在运行,然后在下一个节点上开始升级。
高可用性(HA)集群是一个可选解决方案,并且仅支持Zabbix server。原生HA解决方案设计简单易用,支持跨站点运行,并且对Zabbix所识别的数据库没有特殊要求。用户可根据其环境中的高可用性需求,选择使用Zabbix原生HA解决方案或第三方HA解决方案。
该解决方案由多个zabbix_server实例或节点组成。每个节点:
同一时间只能有一个节点处于active(活动)状态。一个standby(备用)节点仅运行一个进程——HA管理器。standby节点不进行数据收集、处理或其他常规服务器活动;它们不监听端口;数据库连接也保持最少。
active节点和standby节点都会每隔5秒update一次其最后访问时间。每个standby节点会监控active节点的最后访问时间。如果active节点的最后访问时间超过“failover delay(故障转移延迟)”秒,standby节点将自动切换为active节点,并将先前的active节点标记为'不可用的'状态。
active节点会监控自身的数据库连接——如果数据库连接中断超过failover delay-5
秒,它必须停止所有处理并切换到standby模式。active节点还会监控standby节点的状态——如果某个standby节点的最后访问时间超过“failover delay”秒,该standby节点将被标记为'不可用的'状态。
节点设计为在Zabbix小版本之间保持兼容。