Zabbix HA高可用集群介绍
关键基础设施通常需要高可用性 (HA),因为这些基础设施几乎不会造成停机。因此,对于任何可能失败的服务,都必须有一个故障转移选项,以便在当前服务失败时接管。
Zabbix 提供了易于设置的本机高可用性解决方案,并且不需要任何先前的 HA 专业知识。本机 Zabbix HA 可能有助于针对 Zabbix 服务器的软件/硬件故障提供额外的保护层,或者减少因维护而导致的停机时间。
在 Zabbix 高可用性模式中,多个 Zabbix 服务器作为集群中的节点运行。当集群中的一台 Zabbix 服务器处于活动状态时,其他服务器处于待命状态,准备在必要时接管。
通过 Zabbix 6.0 LTS 中添加的原生 Zabbix Server HA 集群功能,现在可以快速配置和部署多节点 Zabbix Server HA 集群,而无需使用任何外部工具
对于 Zabbix 组件,单点故障是我们的 Zabbix 服务器。尽管 Zabbix 本身非常稳定,但您仍然可能会遇到由于操作系统级别问题或更琐碎的问题(例如磁盘空间不足)而发生崩溃的情况。如果您的 Zabbix 服务器出现故障,所有数据收集、问题检测和警报都会停止。这就是为什么这个特定的 Zabbix 组件具有某种形式的高可用性和冗余性非常重要。
Zabbix 6.0 LTS 本机高可用性解决方案易于设置,所有必需的步骤都记录在 Zabbix 文档中。原生解决方案不需要任何额外的专业知识,并将继续由 Zabbix 官方支持、更新和改进。原生高可用性解决方案不需要任何新的软件组件 - 高可用性解决方案将有关 Zabbix 服务器节点状态的信息存储在 Zabbix 数据库后端中。
部署环境规划
Zabbix HA最少需要2个Zabbix Server节点即可实现HA集群高可用及故障转移。在同一个Zabbix HA集群中,只有一个实例或节点处于active(活动)状态,standby(备用)节点不进行数据收集、处理或其他任务,并且不监听端口,并保持一个最少的数据库连接。
整体部署架构如下图所示:
节点规划如下:
节点名称 | 节点IP | 节点OS |
---|---|---|
zabbix-web01 | 192.168.72.18 | Ubuntu22.04 |
zabbix-web02 | 192.168.72.19 | Ubuntu22.04 |
zabbix-server01 | 192.168.72.31 | Ubuntu22.04 |
zabbix-server02 | 192.168.72.32 | Ubuntu22.04 |
zabbix-proxy01 | 192.168.72.53 | Ubuntu22.04 |
zabbix-proxy02 | 192.168.72.54 | Ubuntu22.04 |
zabbix-agent01 | 192.168.72.55 | Ubuntu22.04 |
zabbix-agent02 | 192.168.72.56 | Ubuntu22.04 |
mysql-router01 | 192.168.72.41 | Ubuntu22.04 |
mysql-router02 | 192.168.72.42 | Ubuntu22.04 |
mysql-innodb01 | 192.168.72.50 | Ubuntu22.04 |
mysql-innodb02 | 192.168.72.51 | Ubuntu22.04 |
mysql-innodb03 | 192.168.72.52 | Ubuntu22.04 |
lb01 | 192.168.72.33 | Ubuntu22.04 |
lb02 | 192.168.72.34 | Ubuntu22.04 |
zabbix-web-vip | 192.168.72.100 | N/A |
mysql-db-vip | 192.168.72.200 | N/A |
数据库集群部署
部署详情请参考:MySQL InnoDB Cluster 高可用集群部署。
确认zabbix与mysql版本兼容性:
https://www.zabbix.com/documentation/current/en/manual/installation/requirements
推荐的高可用部署选项:
- 推荐部署Mysql innodb cluster集群。如果MySQL(或Percona)用作Zabbix后端数据库,InnoDB 引擎是必需的。
- 或者pgpool2加3台pg数据库做读写分离。
MySQL InnoDB Cluster 为 Zabbix 监控系统提供了一个强大、可靠且易于管理的高可用数据库解决方案。它能够很好地处理 Zabbix 的写入密集型工作负载,同时提供自动故障转移和负载均衡功能,非常适合需要高可用性的监控环境。
负载局衡器部分配置调整
两台负载均衡器配置如下,增加zabbix web 负载均衡配置,分别为zabbix-web以及mysql-db使用不同的VIP地址。
以下操作在所有lb节点执行。
配置主机名
hostnamectl set-hostname lb01
hostnamectl set-hostname lb02
安装haproxy和keepalived
apt install -y haproxy keepalived
创建haproxy配置文件,两个节点配置相同
root@lb01:~# cat /etc/haproxy/haproxy.cfg
# HAProxy Configuration for lb01
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend web_front
bind *:8080
default_backend web_back
backend web_back
balance roundrobin
server web01 192.168.72.18:8080 check
server web02 192.168.72.19:8080 check
frontend db_rw_front
bind *:6446
default_backend db_rw_back
backend db_rw_back
balance roundrobin
server router01 192.168.72.41:6446 check
server router02 192.168.72.42:6446 check
frontend db_ro_front
bind *:6447
default_backend db_ro_back
backend db_ro_back
balance roundrobin
server router01 192.168.72.41:6447 check
server router02 192.168.72.42:6447 check
创建keepalived配置文件,两个节点配置相同
root@lb01:~# cat /etc/keepalived/keepalived.conf
# Keepalived Configuration for lb01
global_defs {
router_id 51
script_user root
enable_script_security
}
vrrp_script check_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
fall 2 # require 2 failures for KO
rise 2 # require 2 successes for OK
}
vrrp_instance web_vip {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass secret123
}
virtual_ipaddress {
192.168.72.100
}
track_script {
check_haproxy
}
}
vrrp_instance db_vip {
state BACKUP
interface ens33
virtual_router_id 52
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass secret456
}
virtual_ipaddress {
192.168.72.200
}
track_script {
check_haproxy
}
}
启动服务
systemctl restart keepalived.service
systemctl restart haproxy.service
验证通过VIP连接mysql集群的读写和只读端口。
mysql -h192.168.72.200 -P 6446 -u app -p'App@123456'
mysql -h192.168.72.200 -P 6447 -u app -p'App@123456'
记录mysql数据库的连接信息,zabbix-server、zabbix-web以及zabbix-proxy需要分别创建独立的库存储数据。
zabbix-server部署
以下操作在所有zabbix-server节点执行,基于外部mysql数据库进行部署。
官方文档:https://www.zabbix.com/cn/download
选择相应平台获取安装命令,这里以Zabbix 7.0 + Ubuntu + MySQL + Nginx
为例。
分别在每个节点配置主机名
hostnamectl set-hostname zabbix-server01
hostnamectl set-hostname zabbix-server02
安装软件源
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update
安装Zabbix server和zabbix agent
apt install -y zabbix-server-mysql zabbix-sql-scripts zabbix-agent
查看安装版本
root@zabbix-server01:~# zabbix_server -V
zabbix_server (Zabbix) 7.0.0
root@zabbix-server01:~# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 7.0.0
在mysql-innodb01数据库服务器上执行
连接数据库
root@mysql-innodb01:~# mysql -uroot -p
创建初始数据库,在数据库主机上运行以下代码。
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
在zabbix-server01节点执行
测试远程连接数据库
mysql -h 192.168.72.200 -P 6446 -u zabbix -p'Zbx@123456' -Dzabbix
导入初始架构和数据,系统将提示您输入新创建的密码。
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix
导入数据库架构后禁用log_bin_trust_function_creators
选项。
root@innodb01:~# mysql -uroot -p
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
在zabbix-server服务器上执行,为Zabbix server配置数据库,编辑配置文件 /etc/zabbix/zabbix_server.conf
zabbix-server01配置
root@zabbix-server01:~# nano /etc/zabbix/zabbix_server.conf
DBHost=192.168.72.200
DBName=zabbix
DBUser=zabbix
DBPassword=Zbx@123456
DBPort=6446
HANodeName=zabbix-server01
NodeAddress=192.168.72.31:10051
zabbix-server02配置
root@zabbix-server02:~# nano /etc/zabbix/zabbix_server.conf
DBHost=192.168.72.200
DBName=zabbix
DBUser=zabbix
DBPassword=Zbx@123456
DBPort=6446
HANodeName=zabbix-server02
NodeAddress=192.168.72.32:10051
启动Zabbix server和agent进程,并为它们设置开机自启:
systemctl restart zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent
安装zabbix-web
以下操作在所有zabbix-web节点执行。
分别在每个节点配置主机名
hostnamectl set-hostname zabbix-web01
hostnamectl set-hostname zabbix-web02
安装软件源
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update
部署zabbix-web前端
apt install -y zabbix-frontend-php zabbix-nginx-conf
为Zabbix前端配置PHP,编辑配置文件 /etc/zabbix/nginx.conf 去除以下行的注释。
zabbix-web01节点配置
root@zabbix-web01:~# nano /etc/zabbix/nginx.conf
server {
listen 8080;
server_name 192.168.72.18;
zabbix-web02节点配置
root@zabbix-web02:~# nano /etc/zabbix/nginx.conf
server {
listen 8080;
server_name 192.168.72.19;
安装中文语言包
sudo apt install -y zabbix-frontend-php language-pack-zh-hans
启动Zabbix web相关进程,并为它们设置开机自启:
systemctl restart nginx php8.1-fpm
systemctl enable nginx php8.1-fpm
打开Zabbix UI网页,开始初始化zabbix
http://192.168.72.18:8080
配置数据库连接信息
zabbix-web02节点配置相同,两个节点配置完成后,测试访问。
通过负载均衡VIP地址192.168.72.100访问zabbix页面,查看HA状态
刷新页面,查看左上角web指向的zabbix-server发生变化,说明负载均衡已生效
安装zabbix-proxy
配置主机名
hostnamectl set-hostname zabbix-proxy01
hostnamectl set-hostname zabbix-proxy02
添加Zabbix repository仓库
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update
安装Zabbix proxy
apt install -y zabbix-proxy-mysql zabbix-sql-scripts
创建初始数据库,在mysql-innodb01数据库主机上运行以下代码。
针对zabbix-proxy01配置
连接到mysql-innodb01节点,为zabbix-proxy01节点创建专用数据库zabbix_proxy01_db
以及用户zabbix_proxy01
root@mysql-innodb01:~# mysql -uroot -p
password
mysql> create database zabbix_proxy01_db character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix_proxy01@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix_proxy01_db.* to zabbix_proxy01@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \
mysql --default-character-set=utf8mb4 -uzabbix_proxy01 -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix_proxy01_db
导入database schema后禁用 log_bin_trust_function_creators option
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
编辑配置文件 /etc/zabbix/zabbix_proxy.conf
root@zabbix-proxy01:~# nano /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.72.31;192.168.72.32
Hostname=zabbix-proxy01
DBHost=192.168.72.200
DBName=zabbix_proxy01_db
DBUser=zabbix_proxy01
DBPassword=Zbx@123456
DBPort=6446
启动zabbix-proxy服务
systemctl restart zabbix-proxy
systemctl enable zabbix-proxy
针对zabbix-proxy02配置
连接到mysql-innodb01节点,为zabbix-proxy02节点创建专用数据库zabbix_proxy02_db
以及用户zabbix_proxy02
root@mysql-innodb01:~# mysql -uroot -p
password
mysql> create database zabbix_proxy02_db character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix_proxy02@'%' identified by 'Zbx@123456';
mysql> grant all privileges on zabbix_proxy02_db.* to zabbix_proxy02@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | \
mysql --default-character-set=utf8mb4 -uzabbix_proxy02 -P 6446 -p'Zbx@123456' -h192.168.72.200 -Dzabbix_proxy02_db
导入database schema后禁用 log_bin_trust_function_creators option
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
编辑配置文件 /etc/zabbix/zabbix_proxy.conf
root@zabbix-proxy01:~# nano /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.72.31;192.168.72.32
Hostname=zabbix-proxy02
DBHost=192.168.72.200
DBName=zabbix_proxy02_db
DBUser=zabbix_proxy02
DBPassword=Zbx@123456
DBPort=6446
启动zabbix-proxy服务
systemctl restart zabbix-proxy
systemctl enable zabbix-proxy
安装zabbix-agent
配置主机名
hostnamectl set-hostname zabbix-agent01
hostnamectl set-hostname zabbix-agent02
添加Zabbix repository仓库
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-1+ubuntu22.04_all.deb
dpkg -i zabbix-release_7.0-1+ubuntu22.04_all.deb
apt update
安装zabbix agent
apt install -y zabbix-agent
修改 Zabbix Agent01 配置文件
root@zabbix-agent01:~# nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.72.53,192.168.72.54
ServerActive=192.168.72.53;192.168.72.54
Hostname=zabbix-agent01
修改 Zabbix Agent02 配置文件
root@zabbix-agent02:~# nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.72.53,192.168.72.54
ServerActive=192.168.72.53;192.168.72.54
Hostname=zabbix-agent02
启动Zabbix代理进程并使其在系统启动时启动。
systemctl restart zabbix-agent
systemctl enable zabbix-agent
添加zabbix proxy
连接到zabbix web控制台。
创建zabbix group。
添加zabbix-proxy01
添加zabbix-proxy02
确认状态为Online
添加zabbix host
添加zabbix agent01
添加zabbix-agent02
确认可用性为ZBX
查看最新的监控数据
至此,zabbix高可用集群部署完成。
参考:
https://blog.zabbix.com/build-zabbix-server-ha-cluster-in-10-minutes-by-kaspars-mednis-zabbix-summit-online-2021/18155/