當前位置:首頁 > IT技術 > 數據庫 > 正文

zabbix5.0數據庫分區(qū)
2021-09-10 18:15:53

一、簡介

在本教程中,我們將逐步學習如何使用分區(qū)腳本在 MySQL 或 MariaDB 上對 Zabbix 數據庫(歷史和趨勢表)進行分區(qū)。
Zabbix 從主機收集數據并使用歷史和趨勢表將它們存儲在數據庫中。Zabbix 歷史記錄保留原始數據(Zabbix 收集的每個值),趨勢存儲合并的每小時數據,平均為 min、avg 和 max。
Zabbix 的管家進程負責刪除舊的趨勢和歷史數據。使用 SQL 刪除查詢從數據庫中刪除舊數據會對數據庫性能產生負面影響。因此,我們中的許多人都收到了那個煩人的警報“ Zabbix housekeeper processes more than 75% busy”使用數據庫分區(qū)可以輕松解決該問題。分區(qū)每小時或每天創(chuàng)建表,并在不再需要時刪除它們。SQL DROP 比 DELETE 語句更有效。您可以將本教程用于 3.0 之后的任何 Zabbix 版本(3.2、3.4、4.0、4.2、4.4、5.0、5.2 等)
注:官網部署地址==https://bestmonitoringtools.com/zabbix-partitioning-tables-on-mysql-database/==

二、搭建環(huán)境

系統版本: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默認支持php7.2及以上版本)
關閉防火墻 systemctl stop firewalld.service
禁止防火墻開機自啟 systemctl disable firewalld.service
關閉selinux
sed -i ‘s/SELINUX=enforcing /SELINUX=disabled/g’ /etc/selinux/config
重啟系統即可 reboot

三、分區(qū)方式

方式一:針對剛搭建的zabbix數據庫做分區(qū)(為提升日后查詢數據速度做考慮)

方式二:針對已有的zabbix數據庫做分區(qū)(為提升當前查詢數據速度做考慮)

注:兩種方式從部署本質來說唯一的區(qū)別就是,如果是新安裝的zabbix數據庫則不需要備份數據,直接按照部署操作即可;如果是以前安裝的zabbix數據庫,則需要備份數據,然后按照部署操作,部署完成后將數據導回數據庫即可或者參考==https://www.cnblogs.com/suyj/p/15078684.html==這個博客的針對有數據的(200G-300G的分區(qū)實踐過程)。

四、部署創(chuàng)建分區(qū)過程

1、下載用于分區(qū)的sql腳本
wget http://bestmonitoringtools.com/dl/zbx_db_partitiong.tar.gz

2、解壓腳本
tar -zxvf zbx_db_partitiong.tar.gz

3、查看默認的配置
cat zbx_db_partitiong.sql
圖片1.png
注:以上截圖配置為保留7天的歷史數據和365天的趨勢數據,可根據不同場景自行配置。

4、使用sql腳本創(chuàng)建分區(qū)
mysql -u ' ZABBIX ' -p ' zabbixDBpass ' ZABBIX <zbx_db_partitiong.sql
圖片2.png
注:腳本在新Zabbix安裝上可以快速地創(chuàng)建MySQL分區(qū)程序,但在大型數據庫上(以前安裝的數據庫),可能會持續(xù)數小時。

五、部署自動分區(qū)程序(以下兩種方式二選一)

方式一:使用MySQL 事件調度程序

1、修改mysql配置文件
cat /etc/my.cnf
[mysqld]
event_scheduler = ON
注:默認情況下,禁用 MySQL 事件調度程序。您需要通過在 MySQL 配置文件(/etc/mysql/mariadb.conf.d/ 或 /etc/my.cnf.d/)中的“[mysqld]”行之后設置“ event_scheduler=ON ”來啟用它,如果沒有這行那就新增一行即可。

2、重啟mysql服務器
systemctl restart mysqld

3、命令檢測MySQL 事件調度程序狀態(tài)
mysql -u 'zabbix' -p'zabbix' zabbix -e "SHOW VARIABLES LIKE 'event_scheduler';"
圖片3.png

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"
1.png
注:如上截圖說明創(chuàng)建成功了。

方式二:使用Crontab定時任務

1、創(chuàng)建定時任務
sudo crontab -e
30 03 * / USR / bin中/ MySQL的-u ' ZABBIX ' -p” zabbixDBpass ' ZABBIX -e“CALL partition_maintenance_all(' ZABBIX ');“ > /tmp/CronDBpartitiong.log 2>&1

2、查看每天的計劃任務的日志
tail -f /tmp/CronDBpartitiong.log
注:Crontab 將每天執(zhí)行分區(qū)(刪除舊表并創(chuàng)建新表)并將所有內容記錄在文件“ /tmp/CronDBpartitiong.log”中。

3、檢查分區(qū)狀態(tài)
mysql -u 'zabbix' -p'zabbix' zabbix -e "show create table historyG"
圖片7.png
注:如上圖所示未歷史表新創(chuàng)建了三個分區(qū),表示完成。

六、在Zabbix前端配置管家(Housekeeping)

圖片8.png
注:配置文件在網頁>管理>一般>管家目錄下,History and Trends 部分下為趨勢和歷史定義“數據存儲期”的天數(必須與數據庫分區(qū)中配置的天數相同,如果分區(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

開通會員,享受整站包年服務立即開通 >