案例 | 某電商如何構建Zabbix高可用監控平臺?

      網友投稿 879 2025-04-01

      編者薦語:

      【背景】由于公司業務環境Zabbix監控平臺架構,無論在性能、穩定性還是版本升級方面都存在很大困難。本文將介紹通過Centos7.7 + Keepalive + Zabbix + DRBD + Heartbeat + MySQL + ES-Cluster 方案,來構建Zabbix的高可用集群環境。

      01 方案架構

      方案:

      Centos7.7+Keepalive+Zabbix+DRBD+Heartbeat+MySQL+ES-Cluster

      02 環境初始化

      2節點ssh互通做免密認證

      Zabbix-HA1節點執行 ssh-keygen -q -t rsa -N ‘’ -f ~/.ssh/id_rsa ssh-copy-id -p36091 root@192.168.8.187

      雙節點做基于主機名解析,分別執行

      cat > /etc/hosts << EOF

      案例 | 某電商如何構建Zabbix高可用監控平臺?

      192.168.8.186 Zabbix-HA1

      192.168.8.187 Zabbix-HA2

      EOF

      所有節點都關閉swap

      swapoff -a # 臨時手動關閉

      永久關閉swap ,注釋掉/ etc/fstab 中swap ,重啟機器

      網絡環境設定

      每個主機分別帶有兩塊以太網卡,其中一塊用于網絡通信,另一塊用于心跳功能。

      兩個節點的網絡設置如下:

      Zabbix-HA1 主節點

      eth0: 192.168.8.86 255.255.0.0 #對外IP地址

      eth1: 172.16.38.1 255.255.255.0 #HA心跳使用地址

      Zabbix-HA2 從節點

      eth0: 192.168.8.86 255.255.0.0 #對外IP地址

      eth1: 172.16.38.2. 255.255.255.0 #HA心跳使用地址

      配置heartbeat 防火墻規則

      在Zabbix-HA1 節點加入Zabbix-HA2 節點上heartbeat 心跳IP和udp 端口防火墻規則 iptables -A INPUT -i eth1 -p udp -s 172.16.38.2 --dport 694 -m comment --comment "heartbeat-slave" -j ACCEPT /usr/libexec/iptables/iptables.init save 在Zabbix-HA2 節點加入Zabbix-HA1 節點上heartbeat 心跳IP和udp 端口防火墻規則 iptables -A INPUT -i eth1 -p udp -s 172.16.38.1 --dport 694 -m comment --comment "heartbeat-master" -j ACCEPT /usr/libexec/iptables/iptables.init save

      時間同步時間同步(zabbix-ha1 和zabbix-ha2 都要執行)

      yum -y install rdate rdate -s time-b.nist.gov

      03 安裝配置DRBD

      安裝drbd9 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum install -y drbd90-utils kmod-drbd90 配置drbd內核模塊開機自動啟動 echo drbd > /etc/modules-load.d/drbd.conf 手動啟動drbd內核模塊modprobe drbd lsmod|grep drbd ps:不管是單獨硬盤、普通分區、lvm,drbd需要的是干凈的分區,不要格式化. 配置drbd 移除默認配置 mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.confbak創建全局配置 cat << EOF > /etc/drbd.d/global_common.conf global { usage-count no; } common { net { protocol C; } } EOF 創建資源配置文件 cat << EOF > /etc/drbd.d/drbd0.res resource drbd0 { disk / dev/sdb; device /dev/drbd0; meta-disk internal; on Zabbix-HA1 { address 192.168.8.186:7789; } on Zabbix-HA2 { address 192.168.8.187:7789; } } EOF ps:根據實際情況修改上面配置中的主機名、IP、和disk為自己的具體配置

      Zabbix-HA1節點操作初始化設備元文件 drbdadm create-md drbd0啟動drbd0資源 drbdadm up drbd0 Zabbix-HA2節點操作初始化設備元文件 drbdadm create-md drbd0啟動drbd0資源 drbdadm up drbd0 在Zabbix-HA1節點,指定為主drbdadm primary --force drbd0 在DRBD主節點上將drbd0塊設備格式化,系統文件格式為xfs mkfs.xfs /dev/drbd0 Zabbix-HA1節點上傳drbd-overview維護工具到/usr/sbin目錄下,并賦權chmod +x /usr/sbin/drbd-overview 復制到Zabbix-HA2節點/usr/sbin目錄下 scp -P36091 /usr/sbin/drbd-overview 192.168.8.187:/usr/sbin/ 分別查看兩個節點上drbd0的主副角色 drbdadm role drbd0 查看drbd同步運行狀態cat /proc/drbd or drbd-overview 0:drbd0/0 Connected Primary/Secondary UpToDate/UpToDate 配置2個節點開機自動drbd服務systemctl enable drbd systemctl start drbd

      04 安裝配置Heartbeat

      下載heartbeat 依賴環境包 cd /usr/src wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2 wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2 wget https://github.com/ ClusterLabs/resource-agents/archive/v3.9.6.tar.gz安裝相關依賴庫 yum -y install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc psmisc創建運行heartbeat 組及用戶 groupadd haclient useradd -g haclient hacluster -s /sbin/nologin 部署heartbeat 編譯安裝依賴環境安裝cluster-glue cd /usr/src tar -jxvf 0a7add1d9996.tar.bz2 cd Reusable-Cluster-Components-glue--0a7add1d9996/ ./autogen.sh ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install 安裝resource-agents tar -zxvf v3.9.6.tar.gz cd resource-agents-3.9.6 ./autogen.sh ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install 安裝heartbeat tar -jxvf 958e11be8686.tar.bz2 cd Heartbeat-3-0-958e11be8686/ ./bootstrap 聲明編譯環境變量 export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib" ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' make && make install 復制heartbeat 核心配置文件 cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/授權認證文件600權限 chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys創建目錄,配置網卡支持插件文件 mkdir -p /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/ cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/ 注:一般啟動時會報錯因為ping 和ucast 這些配置都需要插件支持,需要將lib64下面的插件軟連接到lib目錄才不會拋出異常 ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/ plugins/RAExec/ ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/ Heartbeat配置 sed -i 's/#auth 1/auth 1/g' /usr/local/heartbeat/etc/ha.d/authkeys sed -i 's/#1 crc/1 crc/g' /usr/local/heartbeat/etc/ha.d/authkeys 2個節點分別復制drbd服務drbddisk腳本到heartbeat目錄(編譯安裝heartbeat,默認沒有該腳本),實現DRBD主從節點資源組的掛載和卸載 cp -p /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/ 配置haresources資源文件,用于指定雙機系統的主節點、 VIP、子網掩碼、廣播地址及啟動的服務等集群資源設置Zabbix-HA1為主從節點角色中為主節點,同時2節點分別執行 echo 'Zabbix-HA1 IPaddr::192.168.8.4/24/eth0 drbddisk::drbd0 Filesystem::/dev/drbd0::/opt::xfs' >> /usr/local/heartbeat/etc/ha.d/haresources 注:drbd0為drbd創建資源名稱,一定要與其一致,否則無法用drbddisk腳本實現DRBD主從節點資源組的掛載和卸載

      節點配置Heartbeat

      分別在2節點配置heartbeat的主配置文件ha.cf mv /usr/local/heartbeat/etc/ha.d/ha.cf /usr/local/heartbeat/etc/ha.d/ha.cfbak Zabbix-HA1節點執行 cat > /usr/local/heartbeat/etc/ha.d/ha.cf < /usr/local/heartbeat/etc/ha.d/ha.cf <

      05 配置MySQL高可用

      從節點停止zabbix-server服務和禁止開機自啟動 systemctl stop zabbix-server && systemctl disable zabbix-server 從節點移除zabbix程序和web mkdir -p /data/backup && mv /opt/zabbix/ /data/backup && mv /opt/www_zabbix /data/backup/ 主節點禁用zabbix-server服務開機自啟動,服務由heartbeat托管systemctl disable zabbix-server 主節點都執行以下操作 heartbeat接管zabbix-server服務啟動停止 cat > /usr/local/heartbeat/etc/ha.d/resource.d/zabbix-server <> /etc/rc.local echo 'systemctl start keepalived' >> /etc/rc.local

      06 配置數據庫雙主同步

      Zabbix-HA2節點備份zabbix相關配置表(有VIP地址節點導出) 注:拷貝sql文件到Zabbix-HA1節點,導入sql Zabbix-HA1節點配置my.cnf 忽略要同步的歷史大表 ############Open GTID Mode######### gtid_mode = on enforce_gtid_consistency =true log_slave_updates=true master-info-repository=TABLE relay-log-info-repository=TABLE slave-parallel-workers=4 ###########MySQL AB Replication########## relay-log = /data/mysql/relay-log auto-increment-increment = 2 auto-increment-offset = 1 replicate-wild-ignore-table=zabbix.history replicate-wild-ignore-table=zabbix.history_uint replicate-wild-ignore-table=zabbix.history_str replicate-wild-ignore-table=zabbix.history_log replicate-wild-ignore-table=zabbix.history_text Zabbix-HA2節點配置my.cnf ############Open GTID Mode######### gtid_mode = on enforce_gtid_consistency =true log_slave_updates=true master-info-repository=TABLE relay-log-info-repository=TABLE slave-parallel-workers=4 ###########MySQL AB Replication########## relay-log = /data/mysql/relay-log auto-increment-increment = 2 auto-increment-offset = 2 replicate-wild-ignore-table=zabbix.history replicate-wild-ignore-table=zabbix.history_uint replicate-wild-ignore-table=zabbix.history_str replicate-wild-ignore-table=zabbix.history_log replicate-wild-ignore-table=zabbix.history_text 注:主從復制各個實例server-id必須唯一,分別重啟mysql服務生效 分別在2個主節點上設置主從復制 在Zabbix-HA1節點和Zabbix-HA2節點上分別創建具有復制權限的用戶 grant replication slave on *.* to repl@'192.168.8.%' identified by 'yanghui'; flush privileges; Zabbix-HA1節點授權允許Zabbix-HA2同步相關的表,才能開啟start slave;) change master to master_host='192.168.8.187',master_user='repl',master_password='yanghui',master_auto_position=1; flush privileges; Zabbix-HA2節點授權(允許從Zabbix-HA1同步相關的表,才能開啟start slave;) change master to master_host='192.168.8.186',master_user='repl',master_password='yanghui',master_auto_position=1; flush privileges; 雙節點分別授權允許通過VIP地址遠程登陸MySQL Zabbix-HA1節點節點執行(8.186) grant all on *.* to root@'192.168.8.187' identified by 'Zabbix@2021'; select user,host,password from mysql.user; Zabbix-HA2節點執行(8.187) grant all on *.* to root@'192.168.8.186' identified by 'Zabbix@2021'; select user,host,password from mysql.user; 分別登陸MySQL主從節點啟動主從復制start slave; show slave status\G; drbd掛載的節點更改zabbix-web的IP地址為VIP地址 /opt/www_zabbix/conf/zabbix.conf.php sed -i 's/192.168.8.186/192.168.8.5/g' /opt/www_zabbix/conf/zabbix.conf.php sed -i 's/192.168.8.186/192.168.8.5/g ' /opt/zabbix/etc/zabbix/zabbix_server.conf注:表示綠色為宿主機節點IP,紅色為數據庫的VIP,需重啟zabbix-server服務

      07 測試驗證

      測試HA架構方案-服務主節點VIP漂移

      測試Zabbix-Server + DRBD +heartbeat HA

      systemctl restart heartbeat

      #觀察從節點是否接管Zabbix-Server VIP地址,并且服務是否正常運行

      注:Zabbix-HA1節點第1次切換到Zabbix-HA2節點后,zabbix-server沒有正常啟動,需systemctl restart zabbix-server,后續切換就能自動啟動。

      測試mysql + keepalived HA

      systemctl stop mysql

      #觀察從節點是否接管MySQL VIP地址,并且服務是否正常運行

      注:故障節點服務切換后,修復該節點服務后,需手動啟動keepalived服務來繼續監聽對方節點,形成HA機制

      08 完善方案

      keepalived+mysql HA方案完善補充緣由: 使用腳本和定時任務監測keepalived 服務運行狀態,實現mysql 故障切換后,keepalived 通過后臺定時任務實現自動恢復服務。 keepalived腳本分別放到2個節點的/etc/keepalived目錄 echo '*/2 * * * * root /etc/keepalived/monitor-keepalived.sh' >> /etc/crontab systemctl restart crond 注:修改定時任務調用腳本后,一定要重啟crond任務才會生效 heartbeat+zabbix HA方案完善補充緣由: heartbeat本身不對應用服務狀態做判斷,需要編寫腳本來判斷服務異常,彌補該架構的不足。 部署supervisor yum install -y supervisor mkdir -p /etc/supervisor/config.d echo_supervisord_conf > /etc/supervisor/supervisord.conf 配置supervisord主配置文件 cat >> /etc/supervisor/supervisord.conf < /etc/supervisor/config.d/zabbix-server.ini <

      08 總結

      優點:

      安全性高、穩定性高、可用性高,出現故障自動切換

      缺點:

      只有一臺服務器提供服務,成本相對較高,不方便擴展,可能會發生腦裂

      當zabbix 服務掛掉或者不可用的情況下不能進行自動切換,需要通過的腳本實現(比如shell腳本監測到master 的zabbix 不可用就將主節點上的heartbeat 停掉,這樣就會切換到從節點去)

      危險操作:

      不能在主從節點停止drbd服務, systemctl stop drbd會造成DRBD腦裂,主從節點數據不一致

      手動啟停MySQL服務只能通過systemctl statt/stop mysql操作,禁止使用/etc/init.d/mysqld stop/start操作,防止MySQL PID異常,服務不可用

      09 FAQ

      故障現象:當DRBD出現腦裂后,會導致drbd 主從兩邊的磁盤數據不一致,從節點上切換成secondary ,并放棄該資源的數據從節點執行以下命令:

      drbdadm secondary r0

      drbdadm --discard-my-data connect r0

      故障現象:primary 主節點重新連接secondary (如果這個節點當前的連接狀態為WFConnection 的話)主節點執行以下命令:drbdadm connect r0

      故障現象:# drbdadm create-md r0 ‘r0’ not defined in your config (for this host).原因:

      A. 主機名與資源池(.res) 中配置定義主機名不一致導致

      B. 資源池(.res) 中配置定義資源池名字與資源池(*.res) 不一致導致

      解決方法:統一名稱或者主機名即可。

      Zabbix 運維

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel中如何運用財務函數的償還率計算函數、債券及其他金融函數函數
      下一篇:excel表格怎么自定義函數
      相關文章
      亚洲第一区视频在线观看| 国产亚洲精品影视在线产品| 亚洲色精品vr一区二区三区| 亚洲а∨天堂久久精品| 蜜臀亚洲AV无码精品国产午夜.| 日本亚洲色大成网站www久久| 亚洲人精品亚洲人成在线| 亚洲成AV人综合在线观看| 亚洲综合视频在线观看| 亚洲熟妇无码久久精品| 亚洲国产韩国一区二区| 亚洲综合网美国十次| 亚洲欧洲国产视频| 亚洲一区二区三区免费视频| 国产色在线|亚洲| 亚洲一区二区三区在线观看网站| 亚洲色最新高清av网站| 亚洲精品GV天堂无码男同| 亚洲av色香蕉一区二区三区蜜桃| 国产亚洲欧美在线观看| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲AV日韩AV永久无码下载| 亚洲AV人无码综合在线观看| 亚洲第一福利网站| 亚洲欧洲日产专区| 一本色道久久88—综合亚洲精品| 亚洲精品无码专区| 四虎亚洲国产成人久久精品| 久久精品国产亚洲7777| 日韩亚洲人成在线综合日本| 亚洲国产综合精品中文第一区 | 亚洲AV综合永久无码精品天堂| 在线观看亚洲视频| 亚洲人成影院在线观看 | 亚洲日产无码中文字幕| 亚洲国语精品自产拍在线观看| 亚洲精品美女视频| 亚洲中文字幕乱码熟女在线| 国产成人亚洲精品电影| 久久久久亚洲AV综合波多野结衣 | 亚洲欧美综合精品成人导航|