• Zabbix从v3.4到v5.0升级实战

    云和安全管理服务专家新钛云服 赵更原创

    一、背景介绍

    公司目前现有的Zabbix版本为v3.4,版本比较低,借着这次公司正在推进统一监控的机会,将v3.4 升级到v5.0版本(为什么直接到v5.0呢?因为生产环境,还是选择稍微保守一点),数据库单独拆出来,配置主从。

    二、升级思路

    本次升级大致分为以下5个步骤:

    1、备份老版本zabbix数据。

    2、老版本数据库导入新版本数据库中。

    3、安装新版本zabbix,并指向新版本数据库。

    4、调试新版本数据库监控项,触发器和报警。

    5、关闭老版本zabbix网卡,新版本zabbix更改IP地址为老zabbix地址。

    注意:

    上面描述的老版本是指Zabbix V3.4;新版本是指Zabbix V5.0。

    三、新环境信息

    本次升级使用三台主机,详细的配置信息如下:

    主机名

    IP地址

    配置

    用途

    系统版本

    Zabbix-Server

    192.168.116.120

    4核、8G内存、50G硬盘

    安装 zabbix server

    Centos7

    ZabbixDB-Master

    192.168.116.121

    4核、8G内存、200G硬盘

    Zabbix数据库主库

    Centos7

    ZabbixDB-Slave

    192.168.116.122

    4核、8G内存、200G硬盘

    Zabbix数据库从库

    Centos7

    四、操作步骤

    1、导出原zabbix V3.4的数据库数据:

    导出命令如下:

    Bash

    mysqldump –single-transaction -u user -p zabbix > zabbix.sql

    注意:

    导出数据库时,为防止锁表,有两个选项分别是—skip-lock-tables和–single-transaction 。

    这两个的选项的区别是,

    —skip-lock-tables #不锁表,但是数据一致性受影响。

    –single-transaction #innodb 不锁表。

    我们选择的是,–single-transaction更合适。

    2、数据库软件安装

    注意:

    安装新版本zabbix不要导入zabbix基础架构,不然导入原数据的时候会因为基础表已存在,原数据导不进去。

    • ZabbixDB-Master:安装Mariadb

    ①使用yum安装

    Bash

    yum -y install mariadb mariadb-server

    ②启动数据库

    Bash

    systemctl start mariadb

    ③初始化数据库(可跳过)

    Bash

    mysql_secure_installation

    首先是设置密码,会提示先输入密码

    Enter current password for root (enter for none):<–初次运行直接回车

    设置密码:

    · Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车

    · New password: <– 设置root用户的密码

    · Re-enter new password: <– 再输入一次你设置的密码

    其他配置:

    · Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

    · Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车(后面授权配置)

    · Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

    · Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

    初始化MariaDB完成,直接登录,成功。

    • ZabbixDB-Master:创建Zabbix数据库并配置权限

    注意:

    在之前需要先查看一下原数据库所用字符集,比如说原字符集是:utf8utf8_general_ci,那我们新建数据库的时候最好也选这个格式,如果创建错了后面也能改。

    ①查看原数据库字符集

    Bash

    MySQL > use zabbix;

    MySQL [zabbix]> SELECT @@character_set_database, @@collation_database;

    ②在创建zabbix库和zabbix用户及添加授权

    Bash

    mysql -uroot -p

    mysql> create database zabbix character set utf8 collate utf8_bin;

    mysql> create user zabbix@localhost identified by ‘zabbix’;

    mysql> grant all privileges on zabbix.* to zabbix@localhost;

    #本地授权

    Bash

    mysql> grant all privileges on zabbix.* to zabbix@’%’ identified by ‘zabbix’;

    #“%”表示所有客户端都可连接

    Bash

    mysql> quit;

    • ZabbixDB-Slave:安装Mariadb

    从库安装完全按照主库即可

    3、配置数据库主从

    • 在ZabbixDB-Master上配置

    ①先停止数据库

    Bash

    systemctl stop mariadb

    ②修改my.conf配置,添加配置内容

    Bash

    vim /etc/my.cnf

    Bash

    [mysqld]

    #有的版本是加在[mysql]里面,加完使用show master status;有数值就可以了

    log_bin=mysql-bin

    server-id=121 #自定义数值,一般选IP最后一位

    log-slave-updates=1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件 里

    expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改

    ③重启mysql创建用于从服务器复制的用户

    Bash

    systemctl restart mariadb

    mysql>GRANT REPLICATION SLAVE ON *.* to ‘root’@’%’ identified by ‘123456’;

    mysql>flush privileges;

    ④使用从服务器登录测试,能正常登陆说明第三步没有问题

    Bash

    mysql -uroot -p -h192.168.117.121

    ⑤记录master状态信息

    查看二进制日志文件名及最新位置。

    Bash

    mysql> show master status;

    +——————+———-+————–+——————+

    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +——————+———-+————–+——————+

    | mysql-bin.000001 | 516 | | |

    +——————+———-+————–+——————+

    1 row in set (0.001 sec)

    注意:

    其中file、position字段需要记录下值,mysql-bin.000001 是用于主从复制的文件名,

    516是日志文件内的最新位置,一会儿要写在备库中。

    • 在ZabbixDB-Slave上配置

    ①先停止数据库

    Bash

    systemctl stop mariadb

    ②修改my.conf配置,添加配置内容

    Bash

    vim /etc/my.cnf

    Bash

    [mysqld]

    server-id=122 #自定义数值

    #read-only=on #开启只读模式

    relay-log=relay-bin #开启日志

    expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改

    ③重启数据库

    Bash

    systemctl restart mariadb

    ④将slave指向master

    Bash

    change master to master_host = ‘192.168.117.121’,

    master_user = ‘root’,

    master_password = ‘123456’,

    master_log_file = ‘mysql-bin.000001’,

    master_log_pos = 516;

    #master_log_file是master记录的文件名, master_log_pos 记录的master最新位置。

    ⑤启动slave

    Bash

    slave start;

    ⑥查看状态

    Bash

    show slave status \G

    Bash

    MariaDB [(none)]> show slave status \G

    *************************** 1. row ***************************

    Slave_IO_State: Waiting for master to send event

    Master_Host: 192.168.117.121

    Master_User: root

    Master_Port: 3306

    Connect_Retry: 60

    Master_Log_File: mysql-bin.000002

    Read_Master_Log_Pos: 637

    Relay_Log_File: relay-bin.000003

    Relay_Log_Pos: 864

    Relay_Master_Log_File: mysql-bin.000002

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    注意:

    Slave_IO_Running和Slave_SQL_Running都YES就可以了;

    过程中遇到的问题都会贴在文章最下方。


    4、在主库中导入数据

    注意:

    数据库不要导入zabbix初始框架。拿原数据库导出的.SQL文件直接导入

    • 导入备份的数据文件

    操作命令如下:

    Bash

    mysql -u root -p

    mysql>use zabbix;

    mysql>source /home/zabbix.sql;

    • 修复字符集问题

    注意:

    这里遇到了问题:

    原数据库字符集:utf8 utf8_general_ci

    新数据库:utf8 utf8_bin

    导入会提示不支持的数据,网页会报错,但是监控和报警正常使用。解决方法如下:

    官方文档

    https://www.zabbix.com/documentation/4.0/en/manual/appendix/install/db_charset_coll

    以下操作仅在主库上进行。

    ①查看字符集命令

    可以看到这里的字符集是utf8_general_ci,不是utf8_bin,所以要进行修复。

    Bash

    MySQL [zabbix]> SELECT @@character_set_database, @@collation_database;

    ②停止 Zabbix。

    ③创建数据库的备份副本!

    ④修复数据库的字符集和排序规则:

    Bash

    MySQL > use zabbix;

    MySQL [zabbix]> alter database zabbix character set utf8 collate utf8_bin;

    ⑤下载官方修复脚本,修复已有数据表的字符集

    打开下方链接:

    https://www.zabbix.com/documentation/5.0/en/manual/appendix/install/db_charset_coll

    说明:

    对于单个表可以使用convert to命令来修复,命令使用方法如下

    alter table history_log convert to character set utf8 collate utf8_bin;

    zabbix官方脚本也是使用这种方法来转换表,字段和现有数据的。

    点击script下载得到脚本utf8_convert.sql,并导入。

    Bash

    mysql -uzabbix -p zabbix < utf8_convert.sql

    ⑦更改表的字符集

    Bash

    SET @ZABBIX_DATABASE = ”;#填入zabbix所在数据库的名字

    set innodb_strict_mode = OFF; #如果你的数据库是mariadb需要执行这条命令

    CALL zbx_convert_utf8();

    set innodb_strict_mode = ON; #如果你的数据库是mariadb需要执行这条命令

    drop procedure zbx_convert_utf8;

    注意:

    整个过程耗时,按照数据量而定,30G大约6小时

    5、安装zabbix server v5.0

    官网地址:

    https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=nginx

    • 配置yum安装源

    由于官方的yum源比较慢,所以替换阿里云yum源,这里可以直接把下方的yum源贴进去。

    Bash

    #cat /etc/yum.repos.d/zabbix.repo

    [zabbix]

    name=Zabbix Official Repository – $basearch

    #baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/

    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/

    enabled=1

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

    [zabbix-frontend]

    name=Zabbix Official Repository frontend – $basearch

    #baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend

    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend

    enabled=0

    gpgcheck=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

    [zabbix-debuginfo]

    name=Zabbix Official Repository debuginfo – $basearch

    #baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/debuginfo/

    baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/debuginfo/

    enabled=0

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

    gpgcheck=1

    [zabbix-non-supported]

    name=Zabbix Official Repository non-supported – $basearch

    #baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/

    baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/

    enabled=1

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

    gpgcheck=1

    • 安装zabbix server 5.0和agent

    Bash

    yum clean all

    yum install zabbix-server-mysql zabbix-agent

    yum install centos-release-scl

    • 编辑配置文件(下载nginx要更改一下yum配置)

    Bash

    vim /etc/yum.repos.d/zabbix.repo

    [zabbix-frontend]

    enabled=1 #找到这一行把0改成1

    • 安装zabbix web端

    Bash

    yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl

    • 修改zabbix配置文件

    配置主数据库的IP,数据库名,及账号密码

    Bash

    vim /etc/zabbix/zabbix_server.conf

    DBHost=192.168.116.121

    DBName=zabbix

    DBUser=zabbix

    DBPassword=zabbix

    • 编辑nginx配置文件,端口改为8080

    Bash

    vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf

    listen 8080;

    • 编辑PHP配置文件,授权nginx和修改时区

    Bash

    vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

    listen.acl_users = apache,nginx

    php_value[date.timezone] = Asia/Shanghai

    • 启动Zabbix Server V5.0 服务

    Bash

    systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

    systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

    注意:

    这里启动之后zabbix会自动更新数据库,整个过程需要一段时间。

    使用tail -f /var/log/zabbix/zabbix-server.log命令查看启动日志

    这个过程需要等待一段时间,速度和服务器性能有关系;

    •登录Zabbix Server 5.0 web页面

    访问地址:http://192.168.116.120:8080

    输入原Zabbix Server v3.4的用户名Admin,密码Zabbix

    注意:

    访问这个网页还会让你输入数据库和主机名,输入完成后就可以了,如果遇到问题可以在文章最下方找解决方法哦

    • 更换IP让Zabbix Server V5.0 接替Zabbix Server V3.4

    第一步,停止Zabbix Server V3.4 服务,并关机

    第二步,新zabbix服务器IP修改为原zabbix服务器IP,重启服务器,

    第三步,观察新的Zabbix 服务器上是否有Agent连接上来的日志,有的话,证明切换完成;

    五、遇到的问题总结

    1、数据库安装启动报错

    报错信息:

    Bash

    220401 19:41:20 InnoDB: remove old data files which contain your precious data!

    220401 19:41:20 [ERROR] Plugin ‘InnoDB’ init function returned error.

    220401 19:41:20 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

    220401 19:41:20 [Note] Plugin ‘FEEDBACK’ is disabled.

    220401 19:41:20 [ERROR] Unknown/unsupported storage engine: InnoDB

    220401 19:41:20 [ERROR] Aborting

    解决办法:

    删除这些文件

    aria_log.00000001、aria_log_control、ib_logfile0、ib_logfile1、bi_data、ibdata1

    我的路径是 /var/lib/mysql/

    如果找不到的话可以使用find / -name “aria_log”命令来搜索

    2、数据库主从报错

    报错信息:

    Bash

    Slave_SQL_Running:no:

    解决办法:

    Bash

    MariaDB [(none)]> stop slave;

    MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

    MariaDB [(none)]> start slave;

    MariaDB [(none)]> show slave status\G

    报错信息:

    Bash

    slave_io_running:no

    解决办法:

    查看主服务器的同步文件和备服务器的同步文件是否一致,如果不一致,需要先停止备服务器同步,然后重新指定同步文件,同步位置。

    ①查看主服务器:

    用show master命令查看当前的同步日志文件:

    Bash

    MariaDB [(none)]> show master status;

    ②在从服务器上查看:

    Bash

    MariaDB [(none)]> show slave status\G

    ③出现Slave_IO_Running:No的机器上操作:

    Bash

    MariaDB [(none)]> slave stop; #停止slave

    MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000026′, MASTER_LOG_POS=0; #重新指定最新的同步文件和位置

    MariaDB [(none)]> slave start; #启动slave

    MariaDB [(none)]> show slave status\G

    3、zabbix server报错

    报错信息:

    Bash

    1、Time zone for PHP is not set (configuration parameter “date.timezone”).

    解决办法:

    修改配置文件后重启httpd服务:

    Bash

    vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

    ;php_value[date.timezone] = Asia/Shanghai

    取消前面的分号。

    报错信息:

    Bash

    nginx启动失败,先检查端口是否被占用

    解决办法:

    先kill -9 杀死master进程,随后杀死子进程即可

    报错信息:

    Bash

    zabbix server is not running:the information displayed may not be current

    解决办法1:

    修改/etc/zabbix/web/zabbix.conf.php这个文件修改里面的服务器IP地址:

    Bash

    $ZBX_SERVER = ‘192.168.116.120’;

    解决办法2:

    编辑zabbix.conf配置文件:

    Bash

    CacheSize=2G

    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单