Redian新闻
>
Zabbix从v3.4到v5.0升级实战

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

科技

新钛云服已为您服务1482



一、背景介绍
公司目前现有的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


了解新钛云服

新钛云服荣膺第四届FMCG零售消费品行业CIO年会「年度数字化服务最值得信赖品牌奖」

新钛云服三周岁,公司月营收超600万元,定下百年新钛的发展目标

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案


往期技术干货

Kubernetes扩容到7,500节点的历程

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?



点👇分享

戳👇在看

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
记一次实战攻防(打点-Edr-内网-横向-Vcenter)【梦呓流年】第十六章:花谱夺魁(一)|慈禧慈安两宫太后听堂会 | 原创长篇轻小说连载烟火人间超50篇论文串联起从VQA到多模态预训练大模型的前世今生—Part 2智能汽车信息安全进入“实战”时代,云驰未来助力车厂筑起安全防线孩子不睡,大人崩溃!4招实战经验,搞定睡觉拖延CPU利用率从10%提升至60%:中型企业云原生成本优化实战指南年赚50w的副业IP变现保姆级实操攻略(黑)前端性能优化实战【运维实战家】无线三建七优之负载均衡实战经验丨EB1A/NIW面签时需注意的六大问题从vivo的创新体系中,我们看到中国手机行业的未来 | 特别策划沉浸式还原《血染钟楼》实战的紧张悬疑阿里10年沉淀|那些技术实战中的架构设计方法重返办公室后,该重新思考什么才是好组织了 | 榕汇实战分享Inspector安全与自动生成报表实战[电脑] 全面升级——九州风神大霜塔V5 AG620开箱及手头双塔散热简测跳蚤市场第一春把战略从艺术变成科学,再走向艺术,华为这样做 | 榕汇实战分享一首拉丁文教会歌曲【星星点灯 露一手】《烟花三月》自动驾驶大迁徙:从L4到L2的降维之战 | 甲子光年魁省知名牛奶厂, 几天倒掉2,000,000升牛奶...远程房东的实战经验:如何远程选房客,修房子?【Gold → Platinum 75k or 100k 升级奖励】AmEx 信用卡升级奖励小结焕新升级实验室全系列检测,助力临床开发,安渡生物如何成为“客户首选”?六年团队Leader实战秘诀|程序员最重要的八种软技能云安全中心API应急漏洞扫描实战实战|蓝翔家族“宫斗”再激化:孔素英二次举报丈夫!家族内斗,殃及企业?深度干货!最强交易心理学实战分享(上)牛津大学录取降级至BBB?照顾弱势生,还是自毁声誉?父亲节礼物清单:23件好物高级实用,一秒送到心坎里!美国信用分数有多重要?快速提升信用分数实战经验帖下一代品牌如何成为世界品牌?安克创新的“枪炮与玫瑰” | 榕汇实战分享超50篇论文串联起从VQA到多模态预训练大模型的前世今生—Part 1
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。