一、簡介
在本教程中,我們將逐步學(xué)習(xí)如何使用分區(qū)腳本在 MySQL 或 MariaDB 上對 Zabbix 數(shù)據(jù)庫(歷史和趨勢表)進行分區(qū)。
Zabbix 從主機收集數(shù)據(jù)并使用歷史和趨勢表將它們存儲在數(shù)據(jù)庫中。Zabbix 歷史記錄保留原始數(shù)據(jù)(Zabbix 收集的每個值),趨勢存儲合并的每小時數(shù)據(jù),平均為 min、avg 和 max。
Zabbix 的管家進程負(fù)責(zé)刪除舊的趨勢和歷史數(shù)據(jù)。使用 SQL 刪除查詢從數(shù)據(jù)庫中刪除舊數(shù)據(jù)會對數(shù)據(jù)庫性能產(chǎn)生負(fù)面影響。因此,我們中的許多人都收到了那個煩人的警報“ Zabbix housekeeper processes more than 75% busy”使用數(shù)據(jù)庫分區(qū)可以輕松解決該問題。分區(qū)每小時或每天創(chuàng)建表,并在不再需要時刪除它們。SQL DROP 比 DELETE 語句更有效。您可以將本教程用于 3.0 之后的任何 Zabbix 版本(3.2、3.4、4.0、4.2、4.4、5.0、5.2 等)
注:官網(wǎng)部署地址==https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database/==
二、搭建環(huán)境
系統(tǒng)版本:CentOS Linux release 7.6.1810 (Core)
Zabbix軟件版本:zabbix-server-mysql_5.0
Mysql版本:mysql-community-server.x86_64 0:5.7.22-1.el7
Php版本:7.2以上(zabbix5.0默認(rèn)支持php7.2及以上版本)
關(guān)閉防火墻 systemctl stop firewalld.service
禁止防火墻開機自啟 systemctl disable firewalld.service
關(guān)閉selinux
sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g’ /etc/selinux/config
重啟系統(tǒng)即可 reboot
三、分區(qū)方式
方式一:針對剛搭建的zabbix數(shù)據(jù)庫做分區(qū)(為提升日后查詢數(shù)據(jù)速度做考慮)
方式二:針對已有的zabbix數(shù)據(jù)庫做分區(qū)(為提升當(dāng)前查詢數(shù)據(jù)速度做考慮)
注:兩種方式從部署本質(zhì)來說唯一的區(qū)別就是,如果是新安裝的zabbix數(shù)據(jù)庫則不需要備份數(shù)據(jù),直接按照部署操作即可;如果是以前安裝的zabbix數(shù)據(jù)庫,則需要備份數(shù)據(jù),然后按照部署操作,部署完成后將數(shù)據(jù)導(dǎo)回數(shù)據(jù)庫即可或者參考==https://www.cnblogs.com/suyj/p/15078684.html==這個博客的針對有數(shù)據(jù)的(200G-300G的分區(qū)實踐過程)。
四、部署創(chuàng)建分區(qū)過程
1、下載用于分區(qū)的sql腳本
wget http://bestmonitoringtools.com/dl/zbx_db_partitiong.tar.gz2、解壓腳本
tar -zxvf zbx_db_partitiong.tar.gz3、查看默認(rèn)的配置
cat zbx_db_partitiong.sql
注:以上截圖配置為保留7天的歷史數(shù)據(jù)和365天的趨勢數(shù)據(jù),可根據(jù)不同場景自行配置。4、使用sql腳本創(chuàng)建分區(qū)
mysql -u ' ZABBIX ' -p ' zabbixDBpass ' ZABBIX <zbx_db_partitiong.sql
注:腳本在新Zabbix安裝上可以快速地創(chuàng)建MySQL分區(qū)程序,但在大型數(shù)據(jù)庫上(以前安裝的數(shù)據(jù)庫),可能會持續(xù)數(shù)小時。
五、部署自動分區(qū)程序(以下兩種方式二選一)
方式一:使用MySQL 事件調(diào)度程序
1、修改mysql配置文件
cat /etc/my.cnf
[mysqld]
event_scheduler = ON
注:默認(rèn)情況下,禁用 MySQL 事件調(diào)度程序。您需要通過在 MySQL 配置文件(/etc/mysql/mariadb.conf.d/ 或 /etc/my.cnf.d/)中的“[mysqld]”行之后設(shè)置“ event_scheduler=ON ”來啟用它,如果沒有這行那就新增一行即可。2、重啟mysql服務(wù)器
systemctl restart mysqld3、命令檢測MySQL 事件調(diào)度程序狀態(tài)
mysql -u 'zabbix' -p'zabbix' zabbix -e "SHOW VARIABLES LIKE 'event_scheduler';"4、創(chuàng)建一個測試事件(60秒創(chuàng)建一次)
mysql -u 'zabbix' -p'zabbix' zabbix -e "CREATE EVENT zbx_partitioning ON SCHEDULE EVERY 60 SECOND DO CALL partition_maintenance_all('zabbix');"5、檢查驗證
mysql -u 'zabbix' -p'zabbix' zabbix -e "SELECT * FROM INFORMATION_SCHEMA.eventsG"
注:如上截圖說明創(chuàng)建成功了。
方式二:使用Crontab定時任務(wù)
1、創(chuàng)建定時任務(wù)
sudo crontab -e
30 03 * / USR / bin中/ MySQL的-u ' ZABBIX ' -p” zabbixDBpass ' ZABBIX -e“CALL partition_maintenance_all(' ZABBIX ');“ > /tmp/CronDBpartitiong.log 2>&12、查看每天的計劃任務(wù)的日志
tail -f /tmp/CronDBpartitiong.log
注:Crontab 將每天執(zhí)行分區(qū)(刪除舊表并創(chuàng)建新表)并將所有內(nèi)容記錄在文件“ /tmp/CronDBpartitiong.log”中。3、檢查分區(qū)狀態(tài)
mysql -u 'zabbix' -p'zabbix' zabbix -e "show create table historyG"
注:如上圖所示未歷史表新創(chuàng)建了三個分區(qū),表示完成。
六、在Zabbix前端配置管家(Housekeeping)
注:配置文件在網(wǎng)頁>管理>一般>管家目錄下,History and Trends 部分下為趨勢和歷史定義“數(shù)據(jù)存儲期”的天數(shù)(必須與數(shù)據(jù)庫分區(qū)中配置的天數(shù)相同,如果分區(qū)腳本中有更改記得這里也要更改)
七、分區(qū)和存儲的常用命令
#查看表信息 | 查看表分區(qū)
show create table historyG#查看生效中的存儲過程 | 查看某個存儲過程的執(zhí)行記錄 | 某個event的信息
SELECT * FROM INFORMATION_SCHEMA.eventsG#查看所有的存儲過程
show procedure status like 'partition_maintenance%' G#查看某個存儲過程的創(chuàng)建詳情
show create procedure partition_maintenance_all_30and365and24hand4pG#event使用新的存儲過程,每個小時執(zhí)行一次
ALTER EVENT zbx_partitioning ON SCHEDULE EVERY 3600 SECOND DO CALL partition_maintenance_all_30and365and24hand4p('zabbix');#手動執(zhí)行某個存儲過程
CALL partition_maintenance_all('zabbix');#創(chuàng)建一個event,每個小時執(zhí)行一次存儲過程
CREATE EVENT zbx_partitioning ON SCHEDULE EVERY 3600 SECOND DO CALL partition_maintenance_all_30and365and24hand4p('zabbix');#刪除一個存儲過程
DROP PROCEDURE ShowStuScore;
本文摘自 :https://blog.51cto.com/w