Zabbix 高可用架构部署方案(2最新版)

Zabbix 高可用架构部署方案(MySQL + 双 VIP+HAProxy+Nginx)

前景提要使用 MySQL 作为数据库,两个虚拟 IP(10.0.0.100 和 10.0.0.200),HAProxy 作为数据库负载均衡,Nginx 作为 Web 访问入口。

1. 架构规划

Server1(10.0.0.12):主 Zabbix Server + MySQL 主库 + HAProxy(主) + Keepalived
Server2(10.0.0.15):备 Zabbix Server + MySQL 从库 + HAProxy(备) + Keepalived
Server3(10.0.0.18):Nginx 负载均衡器

2.环境准备

在所有服务器上执行:

# 更新系统   时间可能会有点儿长(可选)
yum update -y# 关闭防火墙和SELinux(生产环境需配置规则)
systemctl disable --now firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 配置主机名解析
cat > /etc/hosts << EOF
127.0.0.1   localhost localhost.localdomain
10.0.0.12   server1 zabbix-master
10.0.0.15   server2 zabbix-backup
10.0.0.18   server3 zabbix-lb
10.0.0.100  zabbix-web
10.0.0.200  zabbix-db
EOF# 安装基础工具(可选)
yum install -y vim wget net-tools

3.安装 MySQL

在Server2(10.0.0.15)上执行: 建议server1在安装zabbix时安装mysql

# 安装mysql
yum install mysql-server -y# 启动并设置开机自启
systemctl enable --now mysql# 安全初始化
mysql_secure_installation

4. 配置 MySQL主从复制(挫折重重)

主库(server1)配置  此步骤建议在zabbix官网安装zabbix完成之后再进行配置

cat > /etc/my.cnf.d/mysql-server.cnf << EOF
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=zabbix
expire-logs-days=10
max-binlog-size=100M
binlog-format=ROW
innodb_flush_log_at_trx_commit=1
sync_binlog=1
EOF# 重启MySQL
systemctl restart mysqld# 创建复制用户  zabbix已经在安装zabbix 的时候创建好,这里就不再赘述
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplicationPassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
SHOW MASTER STATUS;

记录SHOW MASTER STATUS输出的File和Position值。  并将值填写到从库配置里

从库(server2)配置

cat > /etc/my.cnf.d/mysql-server.cnf << EOF
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-do-db=zabbix
expire-logs-days=10
max-binlog-size=100M
binlog-format=ROW
relay-log=mysql-relay-bin
read-only=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
EOF# 重启MySQL
systemctl restart mysqld# 配置从库连接主库(替换FILE和POSITION值)CHANGE MASTER TOMASTER_HOST='10.0.0.12',MASTER_USER='repl',MASTER_PASSWORD='ReplicationPassword',MASTER_LOG_FILE='mysql-bin.000006',MASTER_LOG_POS=1117065;START SLAVE;
SHOW SLAVE STATUS\G;

确保Slave_IO_Running和Slave_SQL_Running均为Yes。

实际挫折1 好几次出现下面的报错

解决方法:

主节点操作

  • 修改复制用户的认证插件为 mysql_native_password(兼容性好,MySQL 5.7 及之前常用 ):

ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplicationPassword'; FLUSH PRIVILEGES;

从节点操作

重新配置主从连接(无需 SSL ,简单场景 ):

CHANGE MASTER TO MASTER_HOST='10.0.0.12', MASTER_USER='repl', MASTER_PASSWORD='ReplicationPassword', MASTER_LOG_FILE='mysql-bin.xxxxxx', MASTER_LOG_POS=xxxxxx;
START SLAVE;
SHOW SLAVE STATUS\G;  # 查看是否恢复

实际挫折2  修改完之后又出现下面的报错

错误分析:主从节点都为1

解决方法:

在主节点或者从节点更改一下server_id=xxx 使两个值不一样即可(/etc/my.cnf.d/mysql-server.cnf)

实际挫折3 改完又遇到下面的错误

查 performance_schema: 登录 MySQL,查询 performance_schema.replication_applier_status_by_worker 表,获取 Worker线程的详细错误
SELECT * FROM performance_schema.replication_applier_status_by_worker\G;
重点看 LAST_ERROR_MESSAGE 字段,能看到事务执行失败的具体 SQL 或原因。

解决办法:
(1)主库导出数据
mysqldump -u root -p zabbix > zabbix_db.sql

(2)将主库里面的zabbix 转到从库里
scp zabbix_db.sql 从库用户@从库IP:/tmp/

(3)在从库导入 zabbix 库:

CREATE DATABASE zabbix;
mysql zabbix < zabbix_db.sql

(4)停止从库

STOP SLAVE;
非 GTID 模式:
#跳过错误事务 
CHANGE MASTER TO MASTER_LOG_FILE='mysql - bin.000006', MASTER_LOG_POS=75510;  -- 错误位置 +1GTID 模式:先查当前 GTID 集合,找到对应事务的 GTID 并跳过(假设 GTID 为 xxx:123 ):SET GLOBAL sql_slave_skip_counter = 1;启动从库复制:START SLAVE;
验证复制状态:SHOW SLAVE STATUS\G;

实际挫折4  做完上述的 又遇到新的错误

解决方法:

stop slave; reset slave; CHANGE MASTER TO ...(此项又操作一遍) 后再次查看恢复正常


5. 导入 Zabbix 数据库架构

在主库(Server1)上执行:   下载Zabbix   官网安装参考  

# 添加Zabbix仓库
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest-7.0.el9.noarch.rpm
dnf clean all# 导入Zabbix数据库架构
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

6. 安装 Zabbix Server

在主从库上分别执行:

# 安装Zabbix Server、Web前端和Agent
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent# 配置Zabbix Server连接数据库(最好是将原来的文件备份然后重新再建一个)
cat > /etc/zabbix/zabbix_server.conf << EOF
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=10.0.0.200
DBName=zabbix
DBUser=zabbix
DBPassword=ZabbixPassword
DBPort=3306
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StartPollers=15
StartPollersUnreachable=5
StartTrappers=5
StartPingers=1
StartDiscoverers=1
CacheSize=128M
HistoryCacheSize=64M
TrendCacheSize=64M
ValueCacheSize=256M
EOF# 配置Web前端时区
sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/' /etc/php.ini# 启动服务
systemctl enable --now zabbix-server zabbix-agent nginx php-fpm

7. 配置 HAProxy(数据库负载均衡)

在 Server1 和 Server2 上分别执行:

# 安装HAProxy
dnf install -y haproxy# 配置HAProxy
cat > /etc/haproxy/haproxy.cfg << EOF
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /var/lib/haproxy/statsuser haproxygroup haproxydaemondefaultslog globalmode tcpoption tcplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000listen mysql-clusterbind 10.0.0.200:3306mode tcpbalance sourceoption mysql-check user haproxy_checkserver mysql-master 10.0.0.12:3306 check weight 100server mysql-slave 10.0.0.15:3306 check weight 50 backuplisten statsbind *:9000mode httpstats enablestats uri /statsstats realm HAProxy\ Statisticsstats auth admin:password
EOF# 创建监控用户
mysql -u root -p << EOF
CREATE USER 'haproxy_check'@'%' IDENTIFIED BY 'CheckPassword';
GRANT PROCESS ON *.* TO 'haproxy_check'@'%';
FLUSH PRIVILEGES;
EOF# 启动HAProxy
systemctl enable --now haproxy

遇到的问题 haproxy 重启失败

配置文件的问题 

8. 配置 Keepalived 实现双 VIP

主 Server(10.0.0.12)配置:

# 安装Keepalived
dnf install -y keepalived# 配置Keepalived
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalivedglobal_defs {router_id ZABBIX_MASTER
}# Web VIP (10.0.0.100)
vrrp_instance VI_WEB {state MASTERinterface eth0virtual_router_id 101priority 101advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.100/24}track_script {chk_httpd}
}# DB VIP (10.0.0.200)
vrrp_instance VI_DB {state MASTERinterface eth0virtual_router_id 201priority 101advert_int 1authentication {auth_type PASSauth_pass 2222}virtual_ipaddress {10.0.0.200/24}track_script {chk_haproxy}
}# 监控脚本
vrrp_script chk_httpd {script "systemctl is-active httpd"interval 2weight -20
}vrrp_script chk_haproxy {script "systemctl is-active haproxy"interval 2weight -20
}
EOF# 启动Keepalived
systemctl enable --now keepalived

备 Server(10.0.0.15)配置:

# 安装Keepalived
dnf install -y keepalived# 配置Keepalived
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalivedglobal_defs {router_id ZABBIX_BACKUP
}# Web VIP (10.0.0.100)
vrrp_instance VI_WEB {state BACKUPinterface eth0virtual_router_id 101priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.100/24}track_script {chk_httpd}
}# DB VIP (10.0.0.200)
vrrp_instance VI_DB {state BACKUPinterface eth0virtual_router_id 201priority 100advert_int 1authentication {auth_type PASSauth_pass 2222}virtual_ipaddress {10.0.0.200/24}track_script {chk_haproxy}
}# 监控脚本
vrrp_script chk_httpd {script "systemctl is-active httpd"interval 2weight -20
}vrrp_script chk_haproxy {script "systemctl is-active haproxy"interval 2weight -20
}
EOF# 启动Keepalived
systemctl enable --now keepalived

9. 配置 Nginx 负载均衡(Server3)

# 安装Nginx
dnf install -y nginx# 配置Nginx代理Zabbix Web
cat > /etc/nginx/conf.d/zabbix.conf << EOF
upstream zabbix_backend {server 10.0.0.100:80 weight=10 max_fails=3 fail_timeout=30s;
}server {listen 80;server_name zabbix.example.com;location / {proxy_pass http://zabbix_backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 150;proxy_send_timeout 100;proxy_read_timeout 100;proxy_buffers 4 32k;client_max_body_size 8m;client_body_buffer_size 128k;# Zabbix Web优化proxy_http_version 1.1;proxy_set_header Connection "";proxy_cache_bypass $http_upgrade;}
}
EOF# 启动Nginx
systemctl enable --now nginx

10. 验证高可用性

访问 http://10.0.0.18/zabbix 完成 Web 界面初始化配置
验证 MySQL 主从复制:
bash
mysql -uzabbix -ppassword -h 10.0.0.200 -e "SHOW SLAVE STATUS\G"测试故障转移:
停止 Server1 的 Keepalived 服务,验证 VIP 是否自动切换到 Server2
访问 http://10.0.0.18/zabbix 确认服务正常
恢复 Server1 的 Keepalived 服务,验证 VIP 是否自动切回

11. 防火墙配置(生产环境)

# Server1和Server2
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-port=10051/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=9000/tcp  # HAProxy统计页面
firewall-cmd --permanent --add-protocol=vrrp  # Keepalived
firewall-cmd --reload# Server3
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

12. 监控与维护

MySQL 主从状态:定期检查复制延迟
HAProxy 状态:访问 http://10.0.0.18:9000/stats
Keepalived 状态:检查 VIP 是否正常工作
Zabbix 自监控:配置 Zabbix 监控自身组件状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/909287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Linux分页机制:从虚拟内存到物理地址的魔法转换

目录 引言&#xff1a;为什么需要分页机制&#xff1f; 一、分页机制基础概念 1.1 虚拟地址与物理地址 1.2 页与页框 1.3 为什么是4KB&#xff1f; 二、多级页表结构 2.1 为什么需要多级页表&#xff1f; 2.2 x86_64的四级页表结构 2.3 页表项详解 三、Linux分页实现机…

使用python进行图像处理—图像变换(6)

图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切&#xff08;shear&#xff09;以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…

NLP-数据集介绍(并不全,文本类介绍)

目录 第一章 STS&#xff08;语义文本相似度&#xff09; &#xff08;重点&#xff09;一、SemEval STS 年度任务&#xff08;2012-2017&#xff09;1. SemEval-2012 STS2. SemEval-2013 STS3. SemEval-2014 STS4. SemEval-2015 STS5. SemEval-2016 STS6. SemEval-2017 STS 二…

JS进阶 Day01

1.作用域和作用域链 let不可访问 var可访问&#xff0c;因为没有块作用域这一说法 2.JS垃圾回收机制以及算法 下图如上图同理 下图这个三个相互引用的&#xff0c;根部找不到&#xff0c;就进行清除。 3.JS闭包 4.变量和函数提升(了解) 5.函数剩余参数和展开运算符 还有种写法 …

详解Python当中的pip常用命令

想象一下&#xff0c;如果建造房屋时&#xff0c;每一块砖、每一根钢筋都需要你自己亲手烧制和打造&#xff0c;那会是怎样一番景象&#xff1f;软件开发也是如此。如果没有现成的、高质量的、可复用的代码库&#xff0c;开发者们就不得不重复“发明轮子”&#xff0c;效率低下…

LangChain面试内容整理-知识点10:文本嵌入模型(Embeddings)使用

文本嵌入(Embeddings)是将文字转换为向量(高维数值向量)的过程和结果。在LangChain中,Embeddings模块负责调用各种嵌入模型,将文本转化为向量表示,以便后续在向量空间执行相似度搜索、聚类等操作。这在实现语义搜索、RAG中非常关键,因为向量可以让计算机“理解”文本语…

To be or Not to be, That‘s a Token——论文阅读笔记——Beyond the 80/20 Rule和R2R

本周又在同一方向上刷到两篇文章&#xff0c;可以说&#xff0c;……同学们确实卷啊&#xff0c;要不卷卷开放场域的推理呢&#xff1f; 这两篇都在讲&#xff1a;如何巧妙的利用带有分支能力的token来提高推理性能或效率的。 第一篇叫 Beyond the 80/20 Rule: High-Entropy Mi…

bisheng系列(三)- 本地部署(后端 1.2版本)

一、导读 环境&#xff1a;Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.2.0 背景&#xff1a;需要bisheng二开商用&#xff0c;故而此处进行本地部署&#xff0c;便于后期调试开发 时间&#xff1a;20250612 说明&#xff1a;bisheng的1.2…

使用 PolarProxy+Proxifier 解密 TLS 流量

一、简介 在分析恶意样本或加密流量时,我们常常需要将 TLS 加密通信还原为明文。 本文介绍如何通过 PolarProxy 和Proxifier 解密 TLS 流量并保存为 pcap 文件,在 Wireshark 中进行进一步分析。 二、工具准备 ✅ PolarProxy(推荐 Windows x64 版本)✅ Proxifier(强制非浏…

[技术积累]成熟的前端和后端开发框架

1、后端 1.1、低代码开发框架 1.1.1、jeecg 官网&#xff1a;JEECG技术论坛 - 基于BPM的低代码开发平台 1.1.2、APIJSON github官网地址&#xff1a;https://github.com/APIJSON gitee官网地址&#xff1a;https://gitee.com/Tencent/APIJSON 官网地址&#xff1a;腾讯AP…

产品升级 | 新一代高性能数据采集平台BRICK2 X11,助力ADAS与自动驾驶开发

随着ADAS&#xff08;高级驾驶辅助系统&#xff09;和自动驾驶&#xff08;AD&#xff09;开发中对数据采集与处理的需求日益增长&#xff0c;高性能硬件的重要性愈发凸显。 为此&#xff0c;康谋正式发布了其BRICK系列的最新产品——BRICK2 X11&#xff0c;作为BRICK2的直接升…

蚂蚁集团法人变更:韩歆毅接任,公司治理的正常安排

企查查APP显示&#xff0c;6月11日&#xff0c;蚂蚁科技集团股份有限公司发生工商变更&#xff0c;井贤栋卸任法定代表人&#xff0c;由韩歆毅接任。同时&#xff0c;韩歆毅由董事、总经理变更为执行公司事务的董事、总经理。目前&#xff0c;井贤栋仍担任该公司董事长职务。 接…

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包 前言 在2025游戏模型提取攻略写了&#xff0c;但是想要找的时候又忘了在哪篇文章中写的&#xff0c;所以干脆专门写一下。中间有许多坑。 一坑接一坑。 先说结论&#xff1a;用Umodel&#xff08;UV Viewer&#xff09;查看和导出模型。FModel虽然…

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…

大模型的开发应用(十):对话风格微调项目(上):数据工程与模型选型

数据工程 1 项目介绍2 数据工程2.1 申请 API Key 并测试2.2 文本嵌入模型2.3 生成训练集2.3.1 制作风格模板2.3.2 调用大模型获取数据2.3.3 对大模型生成的数据进行质量过滤2.3.4 程序入口 2.4 数据转换 3 模型选型3.1 候选模型与评估数据集3.2 模型评估 附录&#xff08;对比不…

Jmeter压测手册:脚本配置、服务器环境搭建与运行

序 本文记录了我在新公司的首次压测遇到的一些问题以及解决方案。公司服务部署在国外&#xff0c;网络延迟导致的压不上去&#xff0c;需要本地调试脚本&#xff0c;然后用国外服务器压测的过程。同时记录了过程中遇到的一些问题&#xff0c;特别是Jmeter本身占用CPU资源&#…

立定跳远--二分枚举答案+cehck

P10909 [蓝桥杯 2024 国 B] 立定跳远 - 洛谷 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n,m; int a[N]; int an; bool check(int l) {int pos0;int c1;int wm;for(int i1;i<n;i){if…

蓝桥杯20112 不同的总分值

问题描述 在今年蓝桥杯的决赛中&#xff0c;一共有 10 道题目&#xff0c;每道题目的分数依次为 5 分&#xff0c;5 分&#xff0c;10 分&#xff0c;10 分&#xff0c;15 分&#xff0c;15 分&#xff0c;20 分&#xff0c;20 分&#xff0c;25 分&#xff0c;25 分。 假设某…

[论文阅读] 系统架构 | 零售 IT 中的微服务与实时处理:开源工具链与部署策略综述

零售IT中的微服务与实时处理&#xff1a;开源工具链与部署策略综述 论文信息 Microservices and Real-Time Processing in Retail IT: A Review of Open-Source Toolchains and Deployment Strategies Aaditaa Vashisht (Department of Information Science and Engineering, …

【面板数据】A股上市公司注册地所在地数据集(1991-2023年)

数据简介&#xff1a;上市公司注册地所在地数据指企业在工商行政管理部门登记注册的法定住所信息&#xff0c;涵盖省、市、区三级行政区划及详细地址。该数据是公司法律身份的核心标识&#xff0c;直接影响税务管辖、诉讼归属、政策适用及市场准入等关键环节。更是连接企业行为…