200字
Zabbix 高可用
2026-04-04
2026-04-04

Zabbix 高可用

Zabbix 高可用性说明

在前面的部署架构中,Zabbix Server 和MySQL都有只有一台主机,存在单点问题

可以使用Keepalived 实现 Zabbix Server的高可用

基础架构为LAMP或LNMP环境,采用keepalived实现zabbix服务器高可用,保证主服务器或者Httpd宕
掉后能切换到从服务器

MySQL数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。

Zabbix 6.0 HA 概述

注意: 从 Zabbix 6.0 官方提供了高可用解决方案

官方链接

https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha
https://www.zabbix.com/documentation/6.0/zh/manual/concepts/server/ha#implementation-details

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

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

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

启用高可用集群

作为集群节点启动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 HA解决方案由多个zabbix_server实例或节点组成。每个节点独立配置,但数据库是使用同一个
实例。

Zabbix HA节点包括以下几种状态:

  • active(活动)
  • standby(备用)
  • unavailable(不可用)
  • stopped(停止)

在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进
行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接

实战案例:实现 Zabbix Server 6.0 的高可用

在MySQL创建用户并授权

#如果原有的数据库用户无远程连接权限,需要进行授权
[root@zabbix-server ~]#vi /etc/mysql/mysql.conf.d/mysqld.cnf
#注释下面两行
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1

[root@zabbix-server ~]#systemctl restart mysql

[root@zabbix-server ~]#mysql
mysql> create user zabbix@'10.0.0.%' identified by '123456';
mysql> grant all on zabbix.* to zabbix@'10.0.0.%';

两个Zabbix Server 节点都修改配置文件

注意:在没有完成集群配置前,不要同时启动多个Zabbix Server

#主节点配置
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-master
# NodeAddress设置为主节点IP:10051
NodeAddress=10.0.0.200:10051

#重启生效
systemctl restart zabbix-server.service

#备用节点安装相关包
apt update && apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent

#如果nginx需要,修改Nginx配置
vim /etc/zabbix/nginx.conf
#修改下面两行
server {
    listen 80;
    server_name zabbix.wang.org;
......

#备用节点安装Zabbix server,并修改配置,指向同一个数据库
vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.200
DBName=zabbix
DBUser=zabbix
DBPassword=123456
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=zabbix-slave
# NodeAddress设置为备用节点IP:10051
NodeAddress=10.0.0.210:10051

#备用节点初始化配置,修改php配置指向数据库
#初始化的的配置需要在所有Zabbix Server节点上完成,或者将已完成节点的配置文件/etc/zabbix/web/zabbix.conf.php拷贝至其他节点

#默认没有此文件,需要创建
[root@ubuntu2204 ~]#touch /etc/zabbix/web/zabbix.conf.php

#或者从主节点复制文件也可以
[root@ubuntu2204 ~]#rsync -a <zabbix-master>:/etc/zabbix/web/zabbix.conf.php /etc/zabbix/web/zabbix.conf.php

[root@ubuntu2204 ~]#vim /etc/zabbix/web/zabbix.conf.php
$DB['TYPE'] 		= 'MYSQL';
$DB['SERVER'] 		= '10.0.0.200';
$DB['PORT'] 		= '0';
$DB['DATABASE'] 	= 'zabbix';
$DB['USER'] 		= 'zabbix';
$DB['PASSWORD'] 	= '123456';

#注意权限
[root@ubuntu2204 ~]#chown www-data.www-data /etc/zabbix/web/zabbix.conf.php

修改所有Agent的配置指向主和备用Zabbix Server

#配置Agent,Zabbix HA的方案需要在agent配置文件中将所有的Server节点地址同时都配置到Server和ServerActive中
[root@ubuntu2204 ~]#vim /etc/zabbix/zabbix_agent2.conf
Server=10.0.0.200,10.0.0.210
ServerActive=10.0.0.200,10.0.0.210

#重启生效
[root@ubuntu2204 ~]#systemctl restart zabbix-agent2.service

查看状态

查看HA状态有两种方式,一种是通过Web页面查看,另外一种是通过Runtime运行时的命令行查看

#通过Runtime运行时的命令行查看
在Zabbix Server节点上执行命令zabbix_server -R ha_status,并在日志文件/var/log/zabbix/zabbix_server.log中查看HA状态

[root@zabbix-server ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
active 5s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
standby 2s

#备用节节点执行如下提示
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Runtime commands can be executed only in active mode

#查看启动状态
[root@ubuntu2204 ~]#systemctl is-active zabbix-server.service
active

#备用节点不监听端口
[root@ubuntu2204 ~]#ss -nlt |grep 10051

报表Reports -> 系统信息System infomation-->可以查看HA状态

模拟故障

#停止主节点服务,模拟故障
[root@zabbix-server ~]#systemctl stop zabbix-server.service

#在备用节点执行下面命令,可以看到如下状态
[root@ubuntu2204 ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
stopped 7m 20s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
active 1s

#备用节点自动打开监听端口10051
[root@ubuntu2204 ~]#ss -nlt |grep 10051
LISTEN 0 4096 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 4096 [::]:10051 [::]:*

备用节点的Web界面仍然可以看到新数据的采集

恢复原来的主 Zabbix Serve

#恢复原主节点,自动成为备用节点
[root@zabbix-server ~]#systemctl start zabbix-server.service
[root@zabbix-server ~]#zabbix_server -R ha_status
Runtime commands can be executed only in active mode

[root@ubuntu2204 ~]#zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address
Status Last Access
1. clc3bjuvi000145qn9dw080tx zabbix-master 10.0.0.200:10051
standby 7m 20s
2. clc3bk2xf0001hedflh3t72rh zabbix-slave 10.0.0.210:10051
active 1s

实战案例:实现 Zabbix Server 5.0 的高可用

下面实现方式适合所有 Zabbix 版本

#在两个Zabbix Server 使用下面相同的配置
[root@ka1 ~]#grep -i SourceIP= /etc/zabbix/zabbix_server.conf
SourceIP=10.0.0.10
[root@ka1 ~]#grep -i '^server=' /etc/zabbix/zabbix_agentd.conf 
Server=127.0.0.1,10.0.0.10

#不能同时启动 Zabbix Server
[root@ka1 ~]#systemctl enable zabbix-server.service
[root@ka2 ~]#systemctl disable zabbix-server.service

#keepalived相关配置
#ka1节点配置
[root@ka1 ~]#cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
  notification_email {
    root@ayakakuya.com
  }
  notification_email_from 1223445@qq.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id ka1.wang.org
  vrrp_skip_check_adv_addr
  #vrrp_strict
  vrrp_garp_interval 0
  vrrp_gna_interval 0
  vrrp_mcast_group4 230.6.6.6
}
#指定检测脚本
vrrp_script check_zabbix_server{
	script "/usr/bin/killall -0 zabbix_server"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}
include /etc/keepalived/conf.d/*.conf

[root@ka1 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
		10.0.0.10/24 dev eth0 label eth0:1
	}
	#notify_master "systemctl start zabbix-server"
	#notify_backup "systemctl stop zabbix-server"
	track_script {
		check_zabbix_server
	}
}

#ka2节点框配置
[root@ka2 ~]#cat /etc/keepalived/conf.d/vip_zabbix.conf
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
    	10.0.0.10/24 dev eth0 label eth0:1
	}
notify_master "systemctl start zabbix-server"
notify_backup "systemctl stop zabbix-server"
track_script {
# check_zabbix_server #在ka2节点不能启用脚本,否则会导致ka2节点也降低优先级,从而切换失败
}
}

评论