HotDB For Zabbix(Standard) 安装说明

简介

HotDB for Zabbix (Standard)是一款专为Zabbix提供分布式的数据访问服务和数据存储服务的定制化软件。

能在数据分布式存储的环境下为用户带来集中式数据库的访问体验,拥有高可靠和高可用等特性。

硬件建议

安装步骤

1. 解压软件包

一键部署软件包共分为两个部分,一个为HotDB for Zabbix 程序主体部分,另一部分为程序所依赖的软件包,需要将两者先解压再进行合并。

tar zxvf hotdb-for-zabbix-rpm.tar.gz 
tar zxvf hotdb-for-zabbix-v2.5.8_user.tar.gz

把rpm 移动到hotdb-for-zabbix目录下:

mv rpm hotdb-for-zabbix-v2.5.8

进入hotdb-for-zabbix-v2.5.8 目录:

conf : yum源地址

hotdb : HotDB所需的程序文件

include : 一键部署脚本调用的脚本

rpm: 包含JDK rpm文件和MySQL rpm文件

install_hotdbforzabbix.sh : 一键部署脚本

2. 初始化MySQL

在HotDB主服务端和4个MySQL节点执行以下命令

sh install_hotdb_for_zabbix.sh

选择(1),并按任意键开始安装MySQL

2.1 验证步骤

a. 执行以下命令检查3306端口是否由MySQL监听

netstat -tnlp | grep mysql

b. 登入MySQL,执行以下命令检查用户和数据库

select user,host from mysql.user;

show databases;

3. 初始化HotDB节点

3.1 配置数据源

编辑include目录下的datasource_list文件,修改4个MySQL数据节点的IP、端口、物理库,格式保持如下图所示:

从左至右为数据源ID、数据源IP、数据源端口以及数据源物理库名称,其中只可根据实际情况修改数据源IP地址.

不正确的数据源地址将会导致安装失败

3.2 安装HotDB

3.2.1 运行以下脚本

sh install_hotdb_for_zabbix.sh

选择(2)

3.2.2 选择对应的Zabbix版本( 默认3.2 )

3.2.3 复用本地实例

部署过程中如果发现本机存在3306端口的MySQL实例,则会询问是否复用:

选择y,复用本地实例作为HotDB配置库

选择n,部署任务中断,并且提示用户需要手动搭建配置库

3.2.4 初始化Zabbix逻辑库

Zabbix逻辑库为HotDB for Zabbix中存在唯一一个数据库,为用户在分布式环境下提供集中式的体验。在HotDB部署完成后,可以选择是否初始化Zabbix逻辑库:

选择y,自动初始化用户选择的zabbix版本所使用的库

选择n,用户需要手动配置Zabbix库,需要手动导入Zabbix初始表结构和数据,或者迁移已有的Zabbix数据库中的数据

3.3 验证方式

a. 查看端口

netstat -tnlp | grep 3323

b. 登录

mysql -uroot -proot -P3323 -h127.0.0.1

3.4 HotDB 配置界面

HOTDB-UI提供用户,节点,分片表等信息的配置管理。

在浏览器中输入以下网址即可访问: http://192.168.220.104:3324 (IP修改为HotDB节点IP)

请使用 chrome 或者 firefox 浏览器,用户名和密码均为admin。

Zabbix所用到的表都已经完成分片且存储于Zabbix逻辑库中,如下图:

数据源可以根据自己的需要进行添加并搭建数据源高可用,并在故障切换中配置切换关系。

在UI界面进行配置后需要进行动态加载,使得在Server端同步。

Zabbix 数据迁移

1. 迁移说明

迁移时,在导出数据期间,建议不要修改zabbix内的配置、模板等内容。如果希望迁移操作过程中的数据也在新环境中保留,zabbix的MySQL服务器需要开启binlog,binlog格式为STATEMENT或者MIXED(MIXED要求数据库的隔离级别为REPEATABLE-READ)。导入数据完成后,需要执行可选的追数据步骤。

由于zabbix使用外键, 以及HotDB for Zabbix版本对外键尚未完整支持,为规避导入数据时出现外键相关报错,当前是分多次执行mysqldump命令,数据不是在一个事务中导出的。因此,如果导出期间,恰巧产生了一个事件,可能会出现导入时产生和外键相关的报错,这是已知的问题,可以忽略或者尝试重新导出数据,或者在停止zabbix服务的情况下导出数据。以及追数据步骤会报主键冲突,也是导出数据时不是在一个事务中导出的原因,可以忽略。

2. 数据导出

本章节说明适用于Zabbix数据库使用MySQL5.6版本的情况,其余版本的MySQL可能需要给脚本中的mysqldump命令减少或者增加必要的参数。

在目录 hotdb-server/conf/tool中,直接运行脚本导出数据,可以看到脚本提示要求给出的参数:

[root@vm1 tmp]# sh zabbix_dump.sh 
invalid input invalid mysqldumpcmd client command

示例

sh zabbixdump.sh 
"mysqldump -h 127.0.0.1 -P 3306 -uroot -proot" zabbix /data

第一个参数 : 要求给出一个可以连接到Zabbix数据库mysqldump命令,主要需要给出的内容就是MySQL的连接信息,IP\端口或SOCKET文件路径、用户名、密码,需要用单引号或者双引号

第二个参数 : Zabbix数据库的数据库名,如果不给出,默认为Zabbix

第三个参数 : 导出文件的存放路径,如果不给出,默认为/data

由于导出时间可能较长,建议在screen中导出。导出结果类似如下:

-rw-r--r-- 1 root root   48301 Dec  5 11:20 Zabbixdatadump20161205.sql
-rw-r--r-- 1 root root   10361 Nov 18 18:25 Zabbix_dump.sh
-rw-r--r-- 1 root root   90960 Dec  5 11:20 Zabbixschemadump20161205.sql
-rw-r--r-- 1 root root 2196863 Dec  5 11:20 Zabbixtemplatedump20161205.sql

3. 数据导入

HotDB的服务端口(默认3323)可以像MySQL一样操作,可以直接MySQL命令连接。

示例

mysql -h 127.0.0.1 -P 3323 -u root -proot

因此导入数据只需要如下方式操作:(前提需要配置并加载Zabbix的配置成功)

mysql -h 127.0.0.1 -P 3323 -u root -proot < Zabbixschemadump20161205.sql
mysql -h 127.0.0.1 -P 3323 -u root -proot < Zabbixtemplatedump20161205.sql

因后续一步的Zabbixdatadump20161205.sql体积较大,需要多线程导入以便加速导入速度,直接执行splitimport.sh可以看到示例命令:

[root@vm1 tmp]# sh splitimport.sh 

示例

sh splitimport.sh 
"mysql -h 127.0.0.1 -P 3323 -uhotdb -photdb hotdb" /tmp/data.sql

第一个参数:导入数据的目标MySQL连接命令,主要需要给出的内容就是MySQL的连接信息,IP\端口或SOCKET文件路径、用户名、密码、和数据库名称,需要用单引号或者双引号

第二个参数:导入的SQL文件名称

说明 :因为导入数据需要占用额外的一倍 data.sql的磁盘空间,因此需要在空间足够的地方执行此命令

drop表问题: 删表的sql文件在 hotdb-server/conf/ini_sql_za* 下。如inisqlza32下的util.sql是drop zabbix 3.2版本的表,inisqlza30下的util.sql是删除zabbix 3.0 的表。

4. 数据追平(可选)

HotDB尚不支持执行行格式的binlog内容,因此追数据是否能够成功主要由是否有行格式的binlog产生决定。因为导出数据时不是在一个事务中导出的,如果该步骤存在主键冲突,可以忽略。

此步骤的原理就是利用mysqlbinlog命令将MySQL的binlog解析成文本的SQL语句,交给HotDB进行执行。 需要从Zabbixtemplatedump20161205.sql搜索出binlog的位置,参考命令(建议在screen中运行):

4.1 从Zabbixtemplatedump20161205.sql搜索出binlog的位置

参考命令

[root@vm1 tmp]# grep "CHANGE MASTER TO" Zabbixtemplatedump20161205.sql 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000029',
MASTER_LOG_POS=120;

4.2 解析出binlog交给HotDB执行

参考命令

mysqlbinlog -R -h 127.0.0.1 -P 3306 -u root -proot --base64-output=decode-rows --skip-gtids --short-form --to-last-log --stop-never --start-position=120 mysql-bin.000029 |sed -u 's/\/\*!\*\/;/;/g'|egrep -v 'SET @@SESSION.PSEUDO_SLAVE_MODE=|SET @@session.max_insert_delayed_threads=|SET @OLD_COMPLETION_TYPE=|^DELIMITER|^SET TIMESTAMP=1.........;|^SET @@session|^use'|mysql -f -h 192.168.220.104 -P 3323 -u root -proot zabbix

命令中开头位置的127.0.0.1需要替换成原有Zabbix服务器的IP

命令中间 --start-position=120 mysql-bin.000029中需要替换上个命令搜索的binlog位置

命令结尾出的192.168.220.104需要替换为实际HotDB服务器的IP地址

FAQ

1. 注意事项

2.为什么我的HotDB for Zabbix一直安装失败/用不了?

3.防火墙问题

防火墙可能会引起安装、连接的失败,软件包在安装时暂时会关闭防火墙,在用户重启时需要注意此问题

4. MySQL的lower_casetablenames没有设置成 1 ,则会出现下图报错

原因为MySQL数据库的lowercasetable_names参数没有设置为1,根据官方手册描述:

If you are using InnoDB tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase.

参数 lower_casetablenames 应该设置为 1.

以下提出的解决方案只适用于此三种场景:

从lowercasetablenames=0修改到lowercasetablenames=1的操作方式

  1. 修改所有数据源,包括配置库的my.cnf配置文件,修改或增加lowercasetable_names=1的配置
  2. 停止zabbix_server,以避免后续操作步骤可能出现的部分提交问题。(Zabbix专版基于HotDB 2.3,尚不支持强一致性模式,因此在数据库故障时存在事务部分提交的可能。)
  3. 重启所有MySQL数据库
  4. 启动zabbix_server
  5. 测试验证问题是否已经解决

5. 5月11日以前收到的软件包中PermSize的过大,建议修改为64M

修改步骤:

  1. 修改脚本中错误的配置:sed -i 's/PermSize=24G/PermSize=64M/g' hotdb-server/bin/startup.sh
  2. 建议查看文件,检查是否修改成功:grep PermSize hotdb-server/bin/startup.sh
  3. 建议停止zabbix_server,减少出现问题的风险。
  4. 重启HotDB: sh hotdb-server/bin/restart.sh
  5. 启动zabbix_server