zabbix优化记一次惨痛的zabbix数据库优化
最近负责公司的zabbix项目,由于前期缺少整体性能架构的规划,导致后期出一系列的问题,玩zabbix的兄弟都知道,zabbix最大的瓶颈本身不在zabbix服务,而在mysql数据库的压力上,因此,优化zabbix其实就是优化zabbix的配置以及zabbix的mysql了;Zabbix 数据库常见的优化处理方法有两种:
01. 优化数据库,对数据库进行分表处理;
02. 清空数据库中的history, history_uint表;
在接下来的方案我们就mysql数据库分表来进行优化;
具体思路:
1. 首先下载脚本
https://github.com/itnihao/zabbixdbpartitioning
感谢hao哥提供脚本以及帮助。
2. 前期准备工作,安全起见最好安装screen,也不怕程序卡死,关于screen的用法请参考http://www.kwx.gd/CentOSApp/CentOS-screen.html
关闭zabbix的邮件报警,也可以关闭zabbix server服务,mysql本身会锁表
3. 在screen模式下运行脚本,
在这里需要注意的是,如果你的数据库特别大,最好先备份,然后在修改脚本,然后分表,在修改脚本的时候需要注意的几个地方我这里先列出来下,如下:
首先修改zabbix 数据库和密码 默认情况下是都是zabbix 如果你的也是这样的话,那么不用修改,
然后修改配置文件的路径,根据自己的自定义的路径来修改脚本的路径
如果手动备份了那么关闭脚本中备份.
4. 然后来查看是否创建完成;
具体实施:
1. 首先在安装部署之前,来查看两张图片,然后我们就知道压力怎么样了,
http://devliangel.blog.运维网.com/attachment/201406/19/469347_1403175812nNwl.jpg
http://devliangel.blog.运维网.com/attachment/201406/19/469347_140317581313kK.jpg
2. 切记记得备份,关于备份就不在这里列出来了,使用mysqldump来完成备份.关闭zabbix服务器;
完整导出数据库备份,
mysqldump -uroot -p zabbix > /www/zabbix.sql
导出数据库结构不导出数据:
mysqldump --opt -d zabbix -uroot -p > zabbix.biao.sql
关闭zabbix服务:
/etc/rc.d/init.d/zabbix-server stop 3. 执行脚本,在执行脚本之前,我们先创建两张表, history_bak和history_uint_bak,然后我们重命名原来的两张表history和history_uint两张表;然后把创建的两张表变成原来的,这样表中就没有数据了.如下:
创建表:关于创建,可以到处zabbix数据库的表结构,然后找到这个表就可以,还好这两张表没有依赖关系。
CREATE TABLE `history_bak` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`value` double(16,4) NOT NULL DEFAULT '0.0000',
`ns` int(11) NOT NULL DEFAULT '0',
KEY `history_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `history_uint_bak` (
`itemid` bigint(20) unsigned NOT NULL,
`clock` int(11) NOT NULL DEFAULT '0',
`value` bigint(20) unsigned NOT NULL DEFAULT '0',
`ns` int(11) NOT NULL DEFAULT '0',
KEY `history_uint_1` (`itemid`,`clock`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 重命名表:
rename table history to history_bak_14_03_08;
rename table history_bak to history;
rename table history_uint to history_uint_bak_14_03_08;
rename table history_uint_bak to history_uint; 4. 然后来执行脚本;
bash -x partitiontables.sh,可以根据提示来选择Y/N
因为我是代bug模式输出的脚本,输出比较多,我在这里截几张重要的图片,大家已做参考:
http://devliangel.blog.运维网.com/attachment/201406/19/469347_1403175813DiFb.jpg
http://devliangel.blog.运维网.com/attachment/201406/19/469347_1403175814ki3f.png
http://devliangel.blog.运维网.com/attachment/201406/19/469347_1403175814G63h.jpg
5. 完成之后我们可以查看数据是否来看有没有成功
http://devliangel.blog.运维网.com/attachment/201406/19/469347_1403175815SAwl.jpg
生成的任务计划脚本路径:
cat /etc/cron.daily/zabbixhousekeeping 记得要在脚本中配置邮件,因为在我们的案例中我们使用的是mutt+msmtp 脚本如下:
# cat /usr/local/zabbix/cron.d/housekeeping.sh
#!/bin/bash
MAILTO=431054426@qq.com
tmpfile=/tmp/housekeeping$$
date >$tmpfile
/usr/bin/mysql --skip-column-names -B -h localhost -u zabbix -pzabbix zabbix -e "CALL create_zabbix_partitions();" >>$tmpfile 2>&1
/usr/bin/mutt -s "Zabbix MySql Partition Housekeeping" $MAILTO
页:
[1]