zabbix高可用简介
Zabbix高可用性的实现方式
- 多节点部署
- 将Zabbix部署在多个节点上,每个节点负责监控一部分设备或服务器。这种部署方式可以分散监控负载,提高系统的整体性能和可靠性。
- 使用负载均衡器来实现请求的分发,确保所有节点都能够平均处理监控数据。
- 数据同步
- 在不同节点之间进行数据同步,以避免数据丢失。
- 可以使用数据库复制或分布式存储系统来实现数据的同步,确保每个节点都有最新的监控数据。
- 故障切换
- 当某个节点发生故障时,需要及时切换到其他节点,以确保监控系统的持续运行。
- 可以使用心跳监测或集群管理工具来实现节点的故障切换。
下文zabbix高可用的实现方法
以下高可用配置主要用于测试,共用一个数据库,如果要实现数据库的高可用可以用MHA或者PXC来实现。
zabbix的server节点只有一个是active的,其他处于standbby状态。
主机 | 角色 |
---|---|
192.168.126.51 master | zabbix-server、mysql数据库 |
192.168.126.52 slave | zabbix-server |
zabbix-server安装
安装zabbix源
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
dnf clean all
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy
yum install -y mysql-server
systemctl enable --now mysqld
mysql
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by '123456';
grant all privileges on zabbix.* to zabbix@localhost;
flush privileges;
set global log_bin_trust_function_creators = 1;
quit;
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p123456 zabbix
mysql
set global log_bin_trust_function_creators = 0;
quit;
需要修改端口和域名,zabbix没有在nginx默认主机的位置下
listen 80;
server_name master.zabbix.com;
[root@localhost ~]# vim /etc/nginx/conf.d/zabbix.conf
[root@localhost ~]# nginx -s reload
开启zabbix服务
systemctl restart zabbix-server zabbix-agent nginx php-fpm
systemctl enable zabbix-server zabbix-agent nginx php-fpm
zabbix需要主机名来通信,所以所有机器的hostname和zabbix的设置必须一致
用户名Admin 密码zabbix
高可用配置
修改my.cnf
skip_name_resolve=ON
mysql授权远程连接
create user zabbix@'%' identified by '123456';
grant all privileges on zabbix.* to zabbix@'%';
FLUSH PRIVILEGES;
注意要先停止zabbix-server,然后修改配置,再进行开启zabbix-server,不然容易重启失败
[root@master ~]# egrep -v '^$|^#' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBHost=192.168.126.51
DBName=zabbix
DBUser=zabbix
DBPassword=123456
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=192.168.126.0/24
HANodeName=master
NodeAddress=192.168.126.51:10051
slave节点修改数据库的ip
[root@slave ~]# egrep -v '^$|^#' /etc/zabbix/zabbix_server.conf
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBHost=192.168.126.51
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=192.168.126.0/24
HANodeName=slave
NodeAddress=192.168.126.52:10051
如果之前指定了本机数据库,还需要修改/etc/zabbix/web/zabbix.conf.php
$DB['SERVER'] = '192.168.126.51';
重启服务
systemctl restart zabbix-server
查看zabbix高可用状态,只能在active的节点使用改命令
zabbix_server -R ha_status
agent端配置
所有的agent端都要修改配置文件,指明多个zabbix-server的地址
vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.126.51,192.168.126.52
ServerActive=192.168.126.51,192.168.126.52
重启agent服务
systemctl restart zabbix-agent2.service
master端停止服务
[root@master ~]# systemctl stop zabbix-server.service
可以看到所有的主机状态还是可用的
停止一个nginx,可以看到监控
systemctl start zabbix-server.service
此时master节点处于standby状态
[root@slave ~]# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address Status Last Access
1. clybiis4b00010qjaf1h1ik34 master 192.168.126.51:10051 standby 4s
2. clybjl8jh00016gg4z22vrm4k slave 192.168.126.52:10051 active 2s
错误及解决
zabbix-server无法重启
因为修改了配置,没有先停止服务,导致无法重启。
杀死进程即可重启。
ps -ef | grep zabbix | grep -v grep | awk '{print $2}' | xargs kill -9
Database error:No such file or directory
修改配置/etc/zabbix/web/zabbix.conf.php中的mysql的ip