zoukankan      html  css  js  c++  java
  • 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操作要简单不少,但是做起来还是一个熟练度问题,搞不好很多时候就要重头搞,可能数据也给搞没了,所以做的时候需要思路很清醒,很多细节问题需要注意。

  • 相关阅读:
    百度PaddlePaddle入门-14(多个CPU加速训练)
    Quantum Hierarchical State Machine (量子层级状态机)
    百度PaddlePaddle入门-13(网络优化)
    MachineLearning入门-9(数据准备)
    百度PaddlePaddle入门-12(损失函数)
    MachineLearning入门-8(数据可视化)
    百度PaddlePaddle入门-11(网络结构)
    页面生命周期
    JS控制开灯关灯
    JavaScript基础知识
  • 原文地址:https://www.cnblogs.com/gqdw/p/10625534.html
Copyright © 2011-2022 走看看