zabbix server優化與遷移
zabbix server優化與遷移
1. 概述
zabbix 系統其實分3個大部分,一個是server本身,另一個是php的httpd服務,第三個是非常需要優化的資料庫。公司的zabbix監控主機在3000不到的體量,不優化真的不行。主要說說mysql,其他幾個略了,結合zabbix自身的監控資料,引數該調大就調大。
2. mysql 優化導表
2.1 tokudb引擎
重點是這個資料庫,設計原因,造成幾個表過大。每次insert時間過長造成效能問題,我目前的實踐發現tokudb引擎是很好的解決方案,有關tokudb的原理可看https://www.percona.com/software/mysql-database/percona-tokudb 。mysql官方的包是不支援tokudb引擎的,可以下載percona的包,或者是alisql的。我的選擇是percona 原始碼包編譯,percona其實是提供rpm安裝方式的,但是好像網路有問題總會下載不下來。
有關mysql安裝可以參考我之前的文章https://gqdw.github.io/2017/01/17/mysql-5-7-install/ ,有些不同之處在於percona的包沒有帶boost ,我是從官網mysql原始碼包上下載了以後拷過去的,可以用。
先要在系統裡設定2個核心引數。
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
之後要在mysql中啟用一下tokudb引擎,
INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_file_map SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_fractal_tree_info SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_fractal_tree_block_map SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_trx SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_locks SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_lock_waits SONAME 'ha_tokudb.so'; INSTALL PLUGIN tokudb_background_job_status SONAME 'ha_tokudb.so';
安裝完了SHOW ENGINES 一下。
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | Engine| Support | Comment| Transactions | XA| Savepoints | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | MyISAM| YES| MyISAM storage engine| NO| NO| NO| | MRG_MYISAM| YES| Collection of identical MyISAM tables| NO| NO| NO| | CSV| YES| CSV storage engine| NO| NO| NO| | BLACKHOLE| YES| /dev/null storage engine (anything you write to it disappears)| NO| NO| NO| | InnoDB| DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES| YES| YES| | TokuDB| YES| Percona TokuDB Storage Engine with Fractal Tree(tm) Technology| YES| YES| YES| | PERFORMANCE_SCHEMA | YES| Performance Schema| NO| NO| NO| | ARCHIVE| YES| Archive storage engine| NO| NO| NO| | MEMORY| YES| Hash based, stored in memory, useful for temporary tables| NO| NO| NO| | FEDERATED| NO| Federated MySQL storage engine| NULL| NULL | NULL| +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
可以看到tokudb完美的支援Transactions , XA ,Savepoints ,可以放心使用。早些年其實tokudb還是有明顯bug的,用用會崩潰,但是2019年這些不存在了,感謝開源老哥的無私奉獻。
另外說一下,硬體需要選擇ssd,普通的盤io真的跟不上。
2.2 導資料
之後是導資料,我的做法是跳過幾個大表,把小庫匯入,之後在導2個大表。
- trends
- trends_uint
history的幾個表不用導,但是表結構需要建好,而且這幾個表一定要做表分割槽,不然管理的時候會有些麻煩。
匯出表需要寫幾個小指令碼,寫個for,done ,so easy:
day=0329 mkdir $day for t in `cat tabs` do echo "mysqldump zabbix $t > $day/$t.sql" mysqldump --set-gtid-purged=OFF zabbix $t > $day/$t.sql done
我這裡加了--set-gtid-purged=OFF,不然會把gtid給帶上。
恢復的時候就是這樣:
for t in `cat tabs` do echo "mysqlzabbix <0329/$t.sql" mysql -uzabbix -pzabbixpass zabbix <0329/$t.sql done
mysqldump只導表結構的引數是-d 。
導歷史資料的時候也有個技巧,把dump出來的sql修改一下,去掉
DROP TABLE IF EXISTS `trends`; LOCK TABLES `trends` WRITE;
去掉lock table可以線上導。總不能停服務導吧~
3. 總結
細節是魔鬼,mysql這塊雖然是比oracle操作要簡單不少,但是做起來還是一個熟練度問題,搞不好很多時候就要重頭搞,可能資料也給搞沒了,所以做的時候需要思路很清醒,很多細節問題需要注意。