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
繁體地址,請注明出處:http://hk.pswp.cn/news/909287.shtml
英文地址,請注明出處:http://en.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;直接影響稅務管轄、訴訟歸屬、政策適用及市場準入等關鍵環節。更是連接企業行為…