5.Ubuntu16.04-zabbix优化-数据库拆分优化

abbix优化-数据库拆分优化

zabbix安装时把lamp环境都安装在了一台服务器上,但是mysql的容量关系zabbix的命脉,要是容量不够用的话,再多的检测数据也没法存储,严重限制了zabbix性能,就像是相当于给zabbix带上了“紧箍咒”。

针对这种情况,需要把mysql数据库分离出去就解决了。

目标:将zabbix数据库导出到另一台服务器,并更换新数据库的引擎为TokuDB提高数据库写入的性能。TokuDB 适合zabbix这种写多读少的业务,因为zabbix监控数据插入的次数远远高于我们日常查看监控的次数。

一.数据库准备

1.准备一台服务器,安Ubuntu16.04

将源更换成清华源,然后更新源。
安装percona MySQL
apt-get install percona-server-server-5.7 percona-server-client-5.7

启动 Percona
service mysql start

2.安装jemalloc

jemalloc是内存管理软件,开启TokuDB 依赖jemalloc
apt-get install libjemalloc1 libjemalloc-dev -y

优化jemalloc
修改
vim /etc/mysql/percona-server.conf.d/mysqld_safe.cnf

添加
malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1

重启
service mysql restart

3.关闭大页

THP(Transparent Huge Pages) 在有数据库服务(Mysql、Redis、MongoDB)的机器上都是建议关闭,不然总会发生莫名其妙的事情,TokuDB 也是一定要关闭的。

在 /etc/rc.local 加入

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

4.安装TokuDB

apt-get install percona-server-tokudb-5.7

开启TokuDB引擎
ps_tokudb_admin --enable -uroot -p

输入密码
进入数据库查看

show engines、show plugins
5.Ubuntu16.04-zabbix优化-数据库拆分优化_第1张图片5.Ubuntu16.04-zabbix优化-数据库拆分优化_第2张图片
以上完成了tokudb的安装

5.创建zabbix用户及数据库

新建zabbix数据库
mysql> create database zabbix character set utf8 collate utf8_bin;

因为zabbix-server与数据库在两台机器上,所以新建用户的时候,不能用localhost了,应该换成zabbix-server端的IP
mysql>create user [email protected] identified by 'password';

授权
mysql>grant all privileges on zabbix.* to [email protected];

刷新
mysql> flush privileges;

二.数据库备份

1.先导出到本地,用gzip压缩备份

mysqldump -uroot -ppassword --databases zabbix |gzip > /home/zabbix.sql.gz
如果数据库比较大,导出的时间会比较久

2.从远程主机将备份好的数据库压缩文件,复制到本地

scp [email protected]:/home/zabbix.sql.gz /home/zabbix.sql.gz

3.将复制过来的文件进行解压,解压后修改数据库引擎

gzip -d zabbix.sql.gz
vim zabbix.sql

通过vim工具的替换功能,将全文中的InnoDB替换成TokuDB
:%s/InnoDB/TokuDB/g

4.导入数据库

mysql -uroot -p < /home/zabbix.sql
解压后体量会大很多,导入时间会比较久

5.导入完成后查看数据库是否导入,查看数据库的大小

mysql>show databases;

查看指定数据库zabbix的大小以M为单位
mysql>select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='zabbix';

三.修改zabbix-server端配置文件

数据库已经迁移完了,但是数据库的连接信息还在原来的zabbix-server端

1.修改zabbix-server.conf

vim /etc/zabbix/zabbix-server.conf

主要修改

DBHost=192.168.51.xxx 远程数据库的IP地址
DBName=zabbix 数据库名称
DBUser=zabbix 数据库用户
DBPassword=xxxxxxxxxxx 数据库密码

2.修改zabbix.conf.php文件

vim /etc/zabbix/web/zabbix.conf.php

主要修改

$DB['SERVER'] = '192.168.xx.xxx'; 远程数据库的IP地址
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'xxxxxxxxxx'; 数据库密码
$ZBX_SERVER = '192.168.xx.xxx'; zabbix-server端IP

3.重启zabbix-server,关闭zabbix-server端的旧数据库

systemctl restart zabbix-server

systemctl stop mysql

4.在浏览器打开zabbix页面

如果没有问题,一切正常那就说明迁移成功了。到此结束了。

排错:

如果在重启zabbix-server的时候日志报错

…192.168.xx.xxx is not allowed to connect to this mysql server

这个错误,其实就是新搭建的远程MySQL不允许远程登录,所以远程登录失败了,解决方法如下:

在装有MySQL的机器上登录MySQL mysql -u root -p密码
执行use mysql;
执行update user set host = '%' where user = 'root';这一句执行完可能会报错,不用管它。
执行FLUSH PRIVILEGES;
经过上面几步,就可以解决这个问题了。

如果在web端打开后出现
Error connecting to database: Access denied for user ‘zabbix’@‘192.168.51.192’ (using password: YES)

这个就是新搭建的数据库,没有给原来的zabbix-server端授权导致的

刚开始创建user是按照zabbix’@‘localhost创建的,授权也是给zabbix’@‘localhost授权的,所以zabbix-server端的zabbix’@'192.168.51.192肯定没有权限访问数据库。创建user时候要注意这点。

你可能感兴趣的:(zabbix,zabbix,运维)