马嘉炜 | 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
环境部署
一、环境说明
实际测试过程中,Zabbix HA最少需要2个Zabbix Server节点即可实现HA集群高可用及故障转移。
二、安装Zabbix Server
注:当前为6.0.0Beta1版本,正式版安装方式可能有所不同
- 配置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
- 安装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
- 创建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;
- 初始化Zabbix数据库
注:在某一台Zabbix Server中执行即可,不需要重复执行
$ zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h 172.17.0.17 -uzabbix -p zabbix
- 修改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
- 修改Nginx配置
$ cat /etc/nginx/conf.d/zabbix.conf
## 取消listen和server_name的注释,并设置为相应的监听端口和域名
listen 80;
server_name zabbix.madown.com;
- 启动服务
systemctl restart zabbix-server zabbix-agent2 nginx php-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php-fpm
访问http://zabbix.madown.com/,可以看到熟悉的设置界面
按照提示进行设置即可,需要注意在数据库配置页面修改数据库连接配置
Zabbix server name不用设置。
默认时区需要修改为(UTC +08:00) Asia/Shanghai
。
Zabbix 6.0的时区配置也从PHP配置文件转移到了Web界面配置
初始化的的配置需要在所有Zabbix Server节点上完成,或者将已完成节点的配置文件/etc/zabbix/web/zabbix.conf.php拷贝至其他节点
以上步骤完成后会看到熟悉的登录界面,默认用户名:Admin 密码:zabbix
HA配置验证
一、查看HA状态
查看HA状态有两种方式,一种是通过Web页面查看,另外一种是通过Runtime运行时的命令行查看
- 通过Web页面查看
在Reports -> System infomation页面可以查看HA状态
- 通过Runtime运行时的命令行查看
在Zabbix Server节点上执行命令zabbix_server -R ha_status,并在日志文件/var/log/zabbix/zabbix_server.log中查看HA状态
从图中可以看到HA高可用集群已经启用,目前sh-test-zbxsvr01状态为active(活动)节点,其余的节点为standby(备用)节点
二、配置Agent
- 修改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
- 重启agent
$ systemctl restart zabbix-agent2
- 在Web界面中添加主机,添加完成后如下图所示
- 检查数据采集是否正常
三、模拟Zabbix Server节点故障
这里通过关闭处于active(活动)状态的Zabbix Server节点的zabbix-server服务,模拟Zabbix Server节点故障后,监控系统是否任然处于可用状态
- 停止active(活动)节点的zabbix-server服务
$ systemctl stop zabbix-server
- 查看HA状态
可以看到节点
sh-test-zbxsvr01
现在处于stopped(停止)
的状态,并且节点sh-test-zbxsvr03
状态变为了active(活动)
同时,界面上也出现了集群节点状态变化的告警
- 检查数据采集是否正常
可以看到,监控数据是可以正常采集的,说明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)。