马嘉炜 | Zabbix开源社区签约专家


  • SRE运维工程师,六年Zabbix监控系统使用经验。在Zabbix架构设计及性能优化领域有丰富的经验,擅长监控模板制作及Zabbix API的二次开发。
  • 官方使用手册《Zabbix标准模板指南》译者


简介

日前,Zabbix发布了6.0.0Beta1版本,笔者也是第一时间下载部署。Zabbix 6.0最受期待的一项新功能便是原生支持了HA集群高可用。

Zabbix HA概述

Zabbix HA解决方案由多个zabbix_server实例或节点组成。每个节点独立配置,但数据库是使用同一个实例。

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


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


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

详细的官方文档说明大家可以参考:https://www.zabbix.com/documentation/devel/en/manual/concepts/server/ha



环境部署

一、环境说明

主机名

IP地址

操作系统

说明

sh-test-zbxsvr01

172.17.0.10

CentOS 8.2

Zabbix Server节点

sh-test-zbxsvr02

172.17.0.8

CentOS 8.2

Zabbix Server节点

sh-test-zbxsvr03

172.17.0.14

CentOS 8.2

Zabbix Server节点

sh-test-tdb01

172.17.0.17

云数据库TencentDB

MySQL数据库

剪切
复制
粘贴
左边插入 列
右边插入 列
上方插入 行
下方插入 行
合并单元格
拆分单元格
删除选中列
删除选中行
删除表格
清空内容


实际测试过程中,Zabbix HA最少需要2个Zabbix Server节点即可实现HA集群高可用及故障转移。


二、安装Zabbix Server


注:当前为6.0.0Beta1版本,正式版安装方式可能有所不同



  1. 配置Zabbix的yum源


需要在三台Zabbix Server节点上执行


$ rpm -Uvh https://repo.zabbix.com/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.el8.noarch.rpm
$ dnf clean all

  1. 安装Zabbix Server、Zabbix Web和Zabbix Agent2


需要在三台Zabbix Server节点上执行


$ dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2

  1. 创建Zabbix数据库及用户


Zabbix 6.0首次支持了MySQL带有 utf8mb4_bin 排序规则的 utf8mb4 字符集
这里对授权登录的IP进行了限制,搭建可以根据自己的实际情况来创建用户


$ mysql -h 172.17.0.17 -u root -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@'172.17.0.%' identified by 'zabbix';
mysql> grant all privileges on zabbix.* to zabbix@'172.17.0.%';
mysql> quit;

  1. 初始化Zabbix数据库


注:在某一台Zabbix Server中执行即可,不需要重复执行


$ zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h 172.17.0.17 -uzabbix -p zabbix
  1. 修改Zabbix Server配置


需要注意:三个Zabbix Server节点的数据库配置是一致的,HA配置不一样


$ cat /etc/zabbix/zabbix_server.conf
## 以下数据库配置参数需要修改,其余参数根据实际情况修改
DBHost=172.17.0.17
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
## 以下两个参数是HA配置的参数
# HANodeName设置为当前节点主机名或者IP地址,需保证同一集群中唯一
HANodeName=sh-test-zbxsvr01
# NodeAddress设置为节点IP:10051
NodeAddress=172.17.0.10:10051

  1. 修改Nginx配置
$ cat /etc/nginx/conf.d/zabbix.conf
## 取消listen和server_name的注释,并设置为相应的监听端口和域名
listen 80;
server_name zabbix.madown.com;

  1. 启动服务
systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm


Web初始化配置


访问http://zabbix.madown.com/,可以看到熟悉的设置界面



来了,Zabbix 6.0原生HA高可用抢先体验!_mysql


按照提示进行设置即可,需要注意在数据库配置页面修改数据库连接配置



来了,Zabbix 6.0原生HA高可用抢先体验!_keepalived_02


Zabbix server name不用设置。
默认时区需要修改为​​(UTC +08:00) Asia/Shanghai​​。
Zabbix 6.0的时区配置也从PHP配置文件转移到了Web界面配置



来了,Zabbix 6.0原生HA高可用抢先体验!_zabbix_03


初始化的的配置需要在所有Zabbix Server节点上完成,或者将已完成节点的配置文件/etc/zabbix/web/zabbix.conf.php拷贝至其他节点



以上步骤完成后会看到熟悉的登录界面,默认用户名:Admin 密码:zabbix



来了,Zabbix 6.0原生HA高可用抢先体验!_mysql_04

HA配置验证

一、查看HA状态

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


  • 通过Web页面查看



在Reports -> System infomation页面可以查看HA状态



来了,Zabbix 6.0原生HA高可用抢先体验!_php_05


  • 通过Runtime运行时的命令行查看


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


来了,Zabbix 6.0原生HA高可用抢先体验!_keepalived_06

从图中可以看到HA高可用集群已经启用,目前sh-test-zbxsvr01状态为active(活动)节点,其余的节点为standby(备用)节点


二、配置Agent


  1. 修改agent配置 Zabbix HA的方案需要在agent配置文件中将所有的Server节点地址配置到Server和ServerActive中
$ cat /etc/zabbix/zabbix_agent2.conf
Server=172.17.0.10,172.17.0.8,172.17.0.14
ServerActive=172.17.0.10,172.17.0.8,172.17.0.14
## 注释掉以下配置,Zabbix默认使用主机名作为Hostname,若未设置主机名,则需要配置此参数
# Hostname=Zabbix Server

  1. 重启agent
$ systemctl restart zabbix-agent2

  1. 在Web界面中添加主机,添加完成后如下图所示

来了,Zabbix 6.0原生HA高可用抢先体验!_php_07


  1. 检查数据采集是否正常

来了,Zabbix 6.0原生HA高可用抢先体验!_keepalived_08


三、模拟Zabbix Server节点故障

这里通过关闭处于active(活动)状态的Zabbix Server节点的zabbix-server服务,模拟Zabbix Server节点故障后,监控系统是否任然处于可用状态


  1. 停止active(活动)节点的zabbix-server服务
$ systemctl stop zabbix-server

  1. 查看HA状态

来了,Zabbix 6.0原生HA高可用抢先体验!_keepalived_09


可以看到节点​​sh-test-zbxsvr01​​现在处于​​stopped(停止)​​的状态,并且节点​​sh-test-zbxsvr03​​ 状态变为了​​active(活动)​​同时,界面上也出现了集群节点状态变化的告警


来了,Zabbix 6.0原生HA高可用抢先体验!_keepalived_10


  1. 检查数据采集是否正常

来了,Zabbix 6.0原生HA高可用抢先体验!_centos_11


可以看到,监控数据是可以正常采集的,说明Zabbix HA集群已经自动完成了故障切换


总结

Zabbix 6.0的HA集群高可用功能确实让笔者眼前一亮,相比于之前使用第三方Keepalived的高可用方案,在Server的配置上要简单很多,只需要两个参数即可完成HA集群的搭建。

唯一美中不足的就是需要修改agent的配置,对于旧版本的agent的兼容性官方也还未给出说明,毕竟目前还只是测试版,希望在不久的将来Zabbix 6.0发布正式版之后官方会给出详细的说明。

另外,在HA集群管理上,需要依赖于Runtime运行时命令,例如移除节点、设置HA故障转移延迟等操作。当然,这并不影响HA的基本功能,期待未来官方在HA集群高可用管理上的创新。

最后,大家可以访问http://zabbix.madown.com/ 来体验Zabbix 6.0(用户名:Admin 密码:masix.cn 请大家不要修改密码)


公众号 - Zabbix开源社区(china_zabbix)。