1 高可用

概述

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

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

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

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

参见: 实施细节

启用高可用集群

开始将 Zabbix server 作为集群节点

在服务器 configuration 中需要两个参数 以将 Zabbix server 开始作为集群节点:

  • 必须为每个 Zabbix server 指定 HANodeName 参数,它将成为 HA 集群节点。

这是服务器在 agent 和 proxy 配置中引用的唯一节点标识符(例如 zabbix-node-01)。如果不指定 HANodeName,则服务器将以独立模式启动。

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

NodeAddress 参数(地址:端口)将由 Zabbix 前端用于连接 到活动服务器节点。NodeAddress 必须与相应 Zabbix server 的 IP 或 FQDN 名称匹配。

在更改配置文件后,重新启动所有 Zabbix servers。它们现在将 作为集群节点启动。服务器的新状态可以在 报告System information 中查看,也可以通过运行以下命令查看:

zabbix_server -R ha_status
       ```此运行时命令将在 Zabbix server 日志(和标准输出)中记录当前 HA 集群状态:

       ![](../../../../assets/en/manual/config/runtime_ha_status.png){width="600"}



       ##### 准备前端

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

       ![](../../../../assets/en/manual/config/frontend_conf_server_port.png){width="600"}

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


       ##### proxy 配置

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

       对于被动代理,节点名称必须列在 proxy 服务器[参数](/manual/appendix/config/zabbix_proxy)中,以**逗号**分隔。
       

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


       对于主动代理,节点名称必须列在 proxy 服务器[参数](/manual/appendix/config/zabbix_proxy)中,以**分号**分隔。

Server=zabbix-node-01;zabbix-node-02




       ##### Agent 配置

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

       ![](../../../../assets/en/manual/config/zabbix_ha_agent.png)

       启用被动检查agent, 节点名称必须列入Server[参数](/manual/appendix/config/zabbix_agentd), 使用**逗号**分隔.
       

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


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

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




       ### 故障切换到备用节点

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

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

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

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

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

zabbix_server -R ha_set_failover_delay=5m



       ### 管理HA集群

       可以使用专用的 [runtime control](/manual/concepts/server#runtime_control) 选项来管理HA集群的当前状态:

       -   `ha_status` - 在 Zabbix server 日志中(以及标准输出)记录HA集群状态
       -   `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)

可以监控节点状态:

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

可以使用 zabbix[cluster,discovery,nodes] 内部 监控项 进行节点发现,因为它返回包含高可用性节点信息的JSON。

禁用HA集群

禁用HA高可用集群:

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

升级 HA 集群

要对 HA 节点执行主要版本升级,请执行以下操作:

  • 停止所有节点;
  • 创建完整数据库备份;
  • 如果数据库使用复制,请确保所有节点都正常并且处于同步状态。如果复制中断,请不要升级。
  • 选择将要执行数据库升级的单个节点,通过注释掉 HANodeName 参数将其配置为 standalone 模式后再 升级
  • 确保数据库升级已完全完成 (系统信息 应该显示 Zabbix server 正在运行);
  • 在 HA 模式下重新启动节点;
  • 升级并启动其余节点 (不需要将它们更改为 standalone 模式,因为此时数据库已升级完成)。

次要版本的升级,升级第一个节点就足够了,确保该节点已升级并正在运行,然后开始升级下一个节点。

实施细节

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

该解决方案由多个zabbix_server实例或节点组成。 每一个节点: - 单独配置 - 使用相同的数据库 - 可能有几种模式: active, standby, unavailable, stopped

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

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

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

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