天天看點

zabbix server優化與遷移

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個大表。

  1. trends
  2. 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 過去的我 閱讀(...) 評論(...) 編輯 收藏