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 "mysql zabbix < 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操作要簡單不少,但是做起來還是一個熟練度問題,搞不好很多時候就要重頭搞,可能資料也給搞沒了,是以做的時候需要思路很清醒,很大細節問題需要注意。
posted on 2019-03-30 10:27 過去的我 閱讀(...) 評論(...) 編輯 收藏