一、简介
对于Zabbix平台架构而言,单点故障就是Zabbix Server,尽管Zabbix自身非常稳定,但是仍然会因为操作系统问题或其它不可预料的情况发生导致Zabbix平台宕机的情况。如果Zabbix Server停机所有数据的采集、问题检测和警报都将停止运行。所以Zabbix提供了开箱即用的高可用方案。
在Zabbix 6.0 LTS版本中增加Zabbix Server HA集群功能支持之前,一般使用keepalived工具或其它第三方工具方案来实现Zabbix Server的高可用。当然第三方工具在大多数情况下会产生额外的成本。
在第三方高可用性工具不稳定或容易出现故障的情况下会导致不必要的Zabbix系统宕机,在最坏的情况下,可能会导致Zabbix DB后端不一致。如:
- 故障自动切换可能配置不正确;
- 两个Zabbix Server节点同时运行的场景,可能会导致Zabbix数据库后端不一致;
- 错误的stonith配置场景也可能导致两个Zabbix Server宕机;
二、Zabbix集群配置
启用Zabbix Server高可用功能,需要在高可用模式下启动Zabbix服务器组件。在/etc/zabbix/zabbix_server.conf配置文件中配置如下参数:
- HANodeName #Zabbix Server集群指定任意名称
如图zbx-node1是活动节点,zbx-node2是备用节点。两个节点每5秒发送一次心跳到Zabbix数据库,如果一个节点停止发送其心跳信号,另一个节点将接管服务。
注:如未指定HANodeName,Zabbix服务器将不会以集群模式启动;
- ExternalAddress #指定集群节点地址
此参数是让Zabbix前端知道当前活动的Zabbix Server的地址,因为Zabbix前端组件也会不断与Zabbix Server进行通信,如果未指定此参数则Zabbix前端可能无法连接到活动的Zabbix Server节点服务上。
注:修改完配置文件需要重启服务才能生效。
- 前端配置
如果使用Zabbix Server高可用集群功能,必须注释掉前端zabbix.php.conf配置文件中如下参数,因为它们不是静态连接而是依赖于当前活动的Zabbix节点服务器,将从Zabbix后端数据库中获取信息。
如上图可以看到有两个节点zbx-node1当前处于活动状态,zbx-node2处于休眠状态。zbx-node1和zbx-node2的外部地址分别为node1.example.com和node2.example.com进行访问,上图可以看到部署多个前端,每个前端节点都将连接到Zabbix后端数据库,读取当前活动节点的地址进而继续连接该节点。
三、集群状态说明
Zabbix Server集群模式节点有以下几种状态:
- Active 当前处于活动状态的节点,只能有一个节点处于活动状态
- Standby 当前节点正在待机状态,同时可以多个处于单机状态
- Shutdown 检测到之前该节点已正常关闭
- Unreachable 检测到以前节点在未关闭的情况下意外丢失,这可能是由许多不同的原因造成
例如:节点崩溃或出现网络问题,在正常情况下,您将有一个活动节点和一个或多个备用节点。比如正在这节点上执行一些维护任务,则也需要处于关闭模式下的节点。另一方面如果一个活动节点变得不可访问,则此时一个备用节点将接管。
四、集群调整
使用ha_set_failover_delay 命令来调整故障切换延迟,故障转移延迟支持范围在10秒到15分钟,在大多数情况下,默认值1分钟可以正常工作,但也可能有一些例外,很大程度上取决于实际环境问题。
使用ha_remove_node 命令删除节点,此命令要求我们指定要删除的节点ID。