zabbix安装时把lamp环境都安装在了一台服务器上,但是mysql的容量关系zabbix的命脉,要是容量不够用的话,再多的检测数据也没法存储,严重限制了zabbix性能,就像是相当于给zabbix带上了“紧箍咒”。
针对这种情况,需要把mysql数据库分离出去就解决了。
目标:将zabbix数据库导出到另一台服务器,并更换新数据库的引擎为TokuDB提高数据库写入的性能。TokuDB 适合zabbix这种写多读少的业务,因为zabbix监控数据插入的次数远远高于我们日常查看监控的次数。
将源更换成清华源,然后更新源。
安装percona MySQL
apt-get install percona-server-server-5.7 percona-server-client-5.7
启动 Percona
service mysql start
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
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
apt-get install percona-server-tokudb-5.7
开启TokuDB引擎
ps_tokudb_admin --enable -uroot -p
输入密码
进入数据库查看
show engines、show plugins
以上完成了tokudb的安装
新建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;
mysqldump -uroot -ppassword --databases zabbix |gzip > /home/zabbix.sql.gz
如果数据库比较大,导出的时间会比较久
scp [email protected]:/home/zabbix.sql.gz /home/zabbix.sql.gz
gzip -d zabbix.sql.gz
vim zabbix.sql
通过vim工具的替换功能,将全文中的InnoDB替换成TokuDB
:%s/InnoDB/TokuDB/g
mysql -uroot -p < /home/zabbix.sql
解压后体量会大很多,导入时间会比较久
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端
vim /etc/zabbix/zabbix-server.conf
主要修改
DBHost=192.168.51.xxx 远程数据库的IP地址
DBName=zabbix 数据库名称
DBUser=zabbix 数据库用户
DBPassword=xxxxxxxxxxx 数据库密码
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
systemctl restart zabbix-server
systemctl stop mysql
如果没有问题,一切正常那就说明迁移成功了。到此结束了。
如果在重启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时候要注意这点。