VIP: 192.168.1.100 (Zabbix Web访问地址和Server API地址) | |
主机 (Active) IP: 192.168.1.10 Keepalived MASTER Zabbix Server Zabbix Web MariaDB Master |
备机 (Backup) IP: 192.168.1.11 Keepalived BACKUP Zabbix Server Zabbix Web MariaDB Slave |
1.两台服务器:主机 (192.168.1.10) 和 备机 (192.168.1.11)
2.共享虚拟IP (VIP):192.168.1.100
3.确保两台服务器时间同步 (使用NTP)
4.相同的操作系统环境
*各组件部署方案参考:超详细 | 如何在OpenEuler系统下安装Zabbix 7.2?
在主机上 (192.168.1.10):
Bash# 编辑MariaDB配置文件
sudo vi /etc/my.cnf.d/server.cnf
# 添加以下内容: [mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW binlog-do-db=zabbix
在备机上 (192.168.1.11):
Bash# 编辑MariaDB配置文件 sudo vi /etc/my.cnf.d/server.cnf # 添加以下内容: [mysqld] server-id=2 relay-log=mysql-relay-bin read-only=1 replicate-do-db=zabbix
在主机上创建复制用户: SQLCREATE USER 'replica'@'192.168.1.11' IDENTIFIED BY 'StrongPassword123!'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.1.11'; FLUSH PRIVILEGES;
在备机上配置主从复制:
SQLCHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='replica', MASTER_PASSWORD='StrongPassword123!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=XXX; -- 从主机执行 SHOW MASTER STATUS; 获取具体值 START SLAVE;
Zabbix服务端安装(二选一方案)
方案A:源码编译安装(推荐)
Bash# 安装依赖 dnf install gcc make libevent-devel openssl-devel pcre-devel mysql-devel -y # 下载源码 wget https://cdn.zabbix.com/zabbix/sources/stable/7.2/zabbix-7.2.0.tar.gz tar -zxvf zabbix-7.2.0.tar.gz cd zabbix-7.2.0 # 编译安装 ./configure \ --prefix=/app/zabbix \ --enable-server \ --enable-agent \ --with-mysql make -j$(nproc) make install # 创建系统用户 groupadd --system zabbix useradd --system -g zabbix -d /app/zabbix -s /sbin/nologin zabbix
方案B:RPM仓库安装
Bash# 添加Zabbix官方仓库 rpm -Uvh https://repo.zabbix.com/zabbix/7.2/release/centos/9/noarch/zabbix-release-latest-7.2.el9.noarch.rpm # 安装核心组件 dnf install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
在主机上配置Zabbix数据库连接:
Bashsudo vi /etc/zabbix/zabbix_server.conf # 修改以下参数: DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=YourZabbixDBPassword
在备机上配置Zabbix数据库连接:
Bashsudo vi /etc/zabbix/zabbix_server.conf # 修改以下参数: DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=YourZabbixDBPassword # 添加以下参数禁用数据收集(备机只做热备) StartPollers=0 StartPollersUnreachable=0 StartPingers=0
Web前端配置(两台服务器相同):
Bashsudo vi /etc/zabbix/web/zabbix.conf.php <?php $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = 'localhost'; $DB['PORT'] = '0'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'YourZabbixDBPassword'; $ZBX_SERVER = '192.168.1.100'; // 使用虚拟IP $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = 'Zabbix HA Cluster';
在两台服务器上安装Keepalived:
Bashsudo dnf install keepalived -y 在主机上 (192.168.1.10) 配置Keepalived: Bashsudo vi /etc/keepalived/keepalived.conf vrrp_script chk_zabbix { script "/usr/bin/pgrep zabbix_server" interval 2 weight 50 } vrrp_script chk_httpd { script "/usr/bin/pgrep httpd" interval 2 weight 50 } vrrp_instance VI_1 { state MASTER interface ens33 # 使用实际网卡名 virtual_router_id 51 priority 200 # 主机优先级更高 authentication { auth_type PASS auth_pass kylin123 } virtual_ipaddress { 192.168.1.100/24 dev ens33 # VIP配置 } track_script { chk_zabbix chk_httpd } notify_master "/etc/keepalived/master.sh" notify_backup "/etc/keepalived/backup.sh" notify_fault "/etc/keepalived/fault.sh" }
在备机上 (192.168.1.11) 配置Keepalived:
Bashsudo vi /etc/keepalived/keepalived.conf vrrp_script chk_zabbix { script "/usr/bin/pgrep zabbix_server" interval 2 weight 50 } vrrp_script chk_httpd { script "/usr/bin/pgrep httpd" interval 2 weight 50 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 100 # 备机优先级较低 authentication { auth_type PASS auth_pass kylin123 } virtual_ipaddress { 192.168.1.100/24 dev ens33 } track_script { chk_zabbix chk_httpd } notify_master "/etc/keepalived/master.sh" notify_backup "/etc/keepalived/backup.sh" notify_fault "/etc/keepalived/fault.sh" }
创建状态切换脚本(两台服务器相同):
Bashsudo mkdir /etc/keepalived/scripts sudo vi /etc/keepalived/master.sh #!/bin/bash # 当此服务器成为MASTER时执行 systemctl start zabbix-server systemctl start httpd systemctl start mariadb exit 0 sudo vi /etc/keepalived/backup.sh #!/bin/bash # 当此服务器成为BACKUP时执行 systemctl stop zabbix-server systemctl stop httpd systemctl stop mariadb exit 0 sudo vi /etc/keepalived/fault.sh #!/bin/bash # 当发生故障时执行 logger "Keepalived进入FAULT状态" exit 0 # 设置脚本权限 sudo chmod +x /etc/keepalived/*.sh
在两台服务器上:
Bash# 启动Keepalived sudo systemctl enable keepalived sudo systemctl start keepalived # 启动Zabbix服务(注意:备机上会自动停止) sudo systemctl enable zabbix-server zabbix-agent httpd sudo systemctl start zabbix-server zabbix-agent httpd
1.检查VIP状态:
Bash ip addr show ens33 # 在主机上应该看到192.168.1.100
2.模拟故障转移:
Bash # 在主机上停止Keepalived sudo systemctl stop keepalived # 在备机上检查VIP是否转移 ip addr show ens33 # 检查备机上Zabbix服务是否启动 systemctl status zabbix-server
3.访问Web界面:
http://192.168.1.100/zabbix
4.验证数据库复制状态:
SQL # 在备机上执行 SHOW SLAVE STATUS\G # 确保Slave_IO_Running和Slave_SQL_Running都是Yes
–检查防火墙是否允许VRRP协议:
Bash sudo firewall-cmd --add-protocol=vrrp --permanent sudo firewall-cmd --reload
•验证两台服务器是否在同一个二层网络
•检查keepalived.conf中的virtual_router_id是否一致且唯一
–检查主从状态:SHOW SLAVE STATUS\G
–修复复制错误:
SQL STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
–检查脚本权限:chmod +x /etc/keepalived/*.sh
–查看Keepalived日志:journalctl -u keepalived
Bash # 备份Zabbix配置 mysqldump -u zabbix -p zabbix > zabbix_backup_$(date +%F).sql
–在Zabbix中添加对两台服务器和VIP的监控
–设置告警规则(VIP切换、服务状态变化)
1. 在备机上停止Keepalived
2. 升级备机上的Zabbix
3. 手动切换VIP到备机
4. 升级原主机上的Zabbix
5. 恢复主备关系
此方案确保了Zabbix服务的高可用性,当主机故障时,VIP会自动漂移到备机,同时备机上的Zabbix服务会自动启动接管工作。数据库主从复制保证了数据的实时同步。
错误信息