1 高可用

概述

通常高可用性(HA)需要在几乎不需要停机的关键基础设施中使用。为了在服务出现任何失败故障时进行故障转移,进行接管。

Zabbix提供了一个本地的高可用性解决方案,方便设置,不需要任何HA专业知识也可以完成。本地Zabbix HA对于防止Zabbix server的软件/硬件故障或减少维护停机时间是有用的。

Zabbix高可用模式下,多台Zabbix server作为集群中的节点运行。 当集群中的一个Zabbix server 处于active 时,其他服务器处于standy,随时准备在必要时接管。

1 高可用 - 图1

切换到Zabbix HA还不确定。 您可以在任何时候切换回standalone状态。

参见: 实施详细

启用高可用集群

作为集群节点启动Zabbix server

在server配置中需要两个参数来启动Zabbix server作为集群节点:

  • HANodeName 集群中每个zabbix server节点名称必须要有且唯一。

这是将在agent和proxy配置中引用server的名称 (例如: zabbix-node-01)。如果您没有指定HANodeName,那么服务器将以standalone模式启动。

  • NodeAddress 参数必须为每个节点指定。

NodeAddress参数(address:port)将被Zabbix前端用来连接到主server节点。NodeAddress必须匹配相应Zabbix server的IP或FQDN名称。

在对配置文件进行更改后,重新启动所有Zabbix server。- 它们现在将作为集群节点启动。- server的新状态可以在 报表系统信息 查看 ,也可以用以下命令查看:

  1. zabbix_server -R ha_status

此运行时命令会将当前 HA 集群状态记录到 Zabbix 服务器日志中(并输出到标准输出):

1 高可用 - 图2

准备前端

确保Zabbix server地址:端口在前端配置中没有定义 (在frontend文件目录的conf/zabbix.conf.php中找到)。

1 高可用 - 图3

Zabbix前端将通过读取Zabbix数据库中节点表的设置来自动检测活动节点。使用主节点的节点地址作为Zabbix server地址。

代理配置

HA 集群节点(服务器)必须列在被动或主动 Zabbix 代理的配置中。

对于被动代理,节点名称必须列在代理的服务器 参数 中,以逗号分隔。

  1. Server=zabbix-node-01,zabbix-node-02

对于主动代理,节点名称必须列在代理的服务器参数中,以分号分隔。

  1. Server=zabbix-node-01;zabbix-node-02
Agent 配置

Zabbix agent 或者 Zabbix agent 2.必须将HA 集群节点列入配置文件。

1 高可用 - 图4

启用被动检查agent, 节点名称必须列入Server参数, 使用逗号分隔.

  1. Server=zabbix-node-01,zabbix-node-02

启用主动检查agent, 节点名称必须列入ServerActive参数. 注意,对于主动检查agent,节点与其他server之间必须用逗号分隔,而节点本身必须用分号分隔,例如:

  1. ServerActive=zabbix-node-01;zabbix-node-02

故障切换到备用节点

如果主节点停止,Zabbix将自动故障转移到另一个节点。 要发生故障转移,必须至少有一个节点处于备用状态。

故障转移会有多快? 所有节点每5秒更新一次他们的最后访问时间(和状态,如果它被更改)。 因此:

  • 如果主节点关闭并成功报告其状态为“stopped”,另一个节点将在5秒内接管。

  • 如果主节点关闭/变得不可用,而无法更新其状态,备用节点将等待故障转移延迟 + 5秒来接管。

故障转移延迟是可配置的,支持的范围在10秒到15分钟之间(默认为1分钟)。 要修改故障切换延迟,可以执行以下命令:

  1. zabbix_server -R ha_set_failover_delay=5m

管理 HA 集群

可以使用专用的 运行时控制 选项管理 HA 集群的当前状态:

  • · ha_status - 在 Zabbix 服务器日志中记录 HA 集群状态(并输出到标准输出)
  • · ha_remove_node=target - 删除由其 <target> 标识的 HA 节点 - 列表中节点的编号(该编号可以从运行 ha_status 的输出中获得),例如:
  1. zabbix_server -R ha_remove_node=2

请注意,主备节点不能被删除。

  • · ha_set_failover_delay=delay - 设置 HA 故障转移延迟(10 秒到 15 分钟之间;支持时间后缀,例如 10s、1m)

可以监控节点状态:

  • · 在报告系统信息
  • · 在系统信息仪表板小部件中
  • · 使用服务器的 ha_status 运行时控制选项(见上文)。

zabbix[cluster,discovery,nodes] 内部监控项可用于节点发现,因为它返回具有高可用性节点信息的 JSON。

禁用HA集群

禁用HA高可用集群:

  • 备份配置文件
  • 停止standby节点
  • 移除HANodeName 参数从活跃的主server上
  • 重启主 server (它将以standalone 模式启动)

Upgrading HA cluster

To perform a major version upgrade for the HA nodes:

  • stop all nodes;
  • create a full database backup;
  • if the database uses replication make sure that all nodes are in sync and have no issues. Do not upgrade if replication is broken.
  • select a single node that will perform database upgrade, change its configuration to standalone mode by commenting out HANodeName and upgrade it;
  • make sure that database upgrade is fully completed (System information should display that Zabbix server is running);
  • restart the node in HA mode;
  • upgrade and start the rest of nodes (it is not required to change them to standalone mode as the database is already upgraded at this point).

In a minor version upgrade it is sufficient to upgrade the first node, make sure it has upgraded and running, and then start upgrade on the next node.

实施细节

Zabbix server 支持高可用性(HA)集群是一个可选择的解决方案。本地HA解决方案被设计为易于使用,它可以跨站点工作,并且对Zabbix识别的数据库没有特定的要求。用户可以自由地使用本地Zabbix HA解决方案或第三方HA解决方案,这取决于什么最适合其环境中的高可用性需求。

该解决方案由多个zabbix_server实例或节点组成。

每一个节点: - 单独配置 - 使用相同的数据库 - 可能有几种模式: active, standby, unavailable, stopped

一次只能有一个节点处于活动状态(工作)。 备节点只运行一个进程——HA管理器。备用节点不进行数据收集、处理或其他常规server活动; 它不监听端口; 它们拥有最少的数据库连接。

主节点和备节点每5秒更新一次上次访问时间。每个备节点监控主节点的最后一次访问时间。如果主节点的最后一次访问时间超过了“故障转移延迟”秒,备用节点将自己切换为主节点,并将“不可用”状态分配给先前的主节点。

主节点监视自己的数据库连接—如果丢失超过“故障转移延迟-5”秒,它必须停止所有处理并切换到备用模式。主节点还监视备用节点的状态——如果备用节点的最后访问时间超过了“故障转移延迟”秒,备用节点将被分配为“不可用”状态。

这些节点被设计成跨较小的Zabbix版本兼容。