前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >银行案例|Zabbix跨版本升级指南,4.2-6.0不香吗?

银行案例|Zabbix跨版本升级指南,4.2-6.0不香吗?

作者头像
Zabbix
发布2022-08-01 16:28:18
7080
发布2022-08-01 16:28:18
举报
文章被收录于专栏:Zabbix中国官方Zabbix中国官方

【作者】武玉森,就职于国内某城商行,从事运维框架及智能监控等方面工作,对操作系统、开源监控等方面具有丰富的实践经验。

Zabbix 6.0 LTS 已经发布了一段时间了,面对那么香的新鲜功能,回头看看自己 Zabbix 4.2 版本,难道只能看着眼馋嘛?!

可是如何完成跨版本升级,分析官方文档给出了以下建议:

Zabbix 4.2 → Zabbix 5.x → Zabbix 6.0

然而面对 7*24 小时的无中断业务要求,如果按部就班的逐版本升级,监控停摆周期可能不可控。仔细分析各版本数据结构及升级要求,发现最大的问题还是在数据库及数据结构这块儿,只要处理好这块儿问题,跨版本升级未必不可行,最终决定采用大版本直升的方案进行升级:

Zabbix 4.2 → Zabbix 6.0

注: 该文为后整理,缺少相关页面图示,请见谅。

资源需求

类型

资源

备注

数据库

虚机 1 台

部署 Mysql 8,可按需求是否做主从

前端服务

虚机 1 台

部署 nginx+php,根据实际需求是否需要做负载

后端服务

虚机 2 台

部署 zabbix server 6.0,进行主备验证

升级步骤

本次升级为大版本升级,升级期间新旧版本并行工作,逐步替代,不会长时间影响监控运行(约 10 分钟),但需按照以下升级步骤开展。(为简化文档说明,Proxy 相关部署直接安装新版本即可,不再赘述)

步骤

升级主题

内容简述

备注

1

Mysql 8 数据库部署

部署8.x版本Mysql,并将mysqldump文件导入

该 mysqldump 为 Zabbix 4.2 版本数据库导出

2

新前端部署

安装 nginx 及 php

3

新Server部署

安装 Zabbix 6.0LTS

该阶段启动时触发升级动作

数据库部署 - Mysql 8

步骤一:从原 Server 数据库导出 mysqldump 文件

因数据量过大,导出时排除了 history 和 trend 数据,但需导出表结构

代码语言:javascript
复制
mysqldump -uroot -p --databases zabbix --ignore-table=zabbix.history --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-table=zabbix.history_text --ignore-table=zabbix.history_uint --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint > zabbix_dump.sql

mysqldump -d zabbix -uroot -p --tables history history_log history_str history_text history_uint trends trends_uint > zabbix_tables.sql

步骤二:安装 Mysql8.0.28 版本

该阶段可采用了绿色免安装版,从 mysql 官网下载 mysql-8.0.28-el7-x86_64.tar.gz,并直接解压安装、初始化 mysql、创建 zabbix 用户并附权(可参考官网现有解决方案,不再赘述)。因版本跨度大,数据编码、结构均需人工干预进行处理,以下部分是成功与否的关键,此处划重点!

① 确认 my.cnf 中配置

代码语言:javascript
复制
character-set-server=utf8mb3
collation-server=utf8mb3_bin

② 创建 zabbix 库

代码语言:javascript
复制
create database zabbix character set utf8mb3 collate utf8mb3_bin;

③ 修改导出的 mysqldump 文件

导入前,需确保mysqldump中每个表的DDL语句中参数如下(可采用 sed 批量调整)

代码语言:javascript
复制
ENGINE=InodDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;

此步骤很重要,不然会出现索引异常的问题。

④ 导入 mysqldump

代码语言:javascript
复制
mysql -uroot -p zabbix < zabbix_dump.sql
mysql -uroot -p zabbix < zabbix_tables.sql

⑤ 创建 zabbix 用户并附权

代码语言:javascript
复制
mysql> create user zabbix@'%' identified by 'xxxxxxxx';
mysql> grant all on zabbix.\* to zabbix@'%';
mysql> flush privileges;

⑥ Zabbix plugin 加密方式的确认及修改

代码语言:javascript
复制
#查看(确保加密方式为 mysql_native_password):
mysql> use mysql;
mysql> select user,host,plugin,authentication_string from user;
#修改:
mysql> alter user zabbix@'%' identified with mysql_native_password by 'xxxxxxx';

新前端部署

此处部署全新的 Nginx+PHP 按官网提供的部署方案部署即可,此处不再赘述。(附上官网安装步骤,依据个人喜好,可采用源码安装)

代码语言:javascript
复制
dnf module switch-to php:7.4
dnf install zabbix-web-mysql zabbix-nginx-conf zabbix-selinux-policy

新 Server 部署

可按官方提供的部署方法部署,以下为我所用的部署方案(仅供参考)。

采用源码部署方式部署,主备节点均采用以下方案部署。

① Zabbix Server 所需的依赖包安装

代码语言:javascript
复制
yum install -y gcc mariadb-devel net-snmp-devel libxml2-devel unixODBC-devel libcurl-devel openssl-devel openldap-devel pcre-devel

#需要将 libssh2-devel OpenIPMI-devel libevent-devel 上传到本地
yum localinstall libevent-devel-2.0.21-4.el7.x86_64.rpm libssh2-devel-1.8.0-4.el7.x86_64.rpm OpenIPMI-devel-2.0.27-1.el7.x86_64.rpm

#支持 java gateway
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

② 编译安装

代码语言:javascript
复制
mkdir -p /home/ source-code
tar -zxvf zabbix-6.0.3.tar.gz -C /home/source-code
cd /home/ source-code/zabbix-6.0.3
./configure --prefix=/home/zabbix-server --enable-server --enable-java --enable-ipv6 --with-mysql --with-libxml2 --with-unixodbc --with-net-snmp --with-ssh2 --with-openipmi --with-openssl --with-libcurl

make && make install

③ 配置自启动服务

代码语言:javascript
复制
#vim /usr/lib/systemd/system/zabbix-server.service #内容如下:
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/home/zabbix-server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/home/zabbix-server/zabbix_server.pid
KillMode=control-group
ExecStart=/home/zabbix-server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

注: Zabbix 6.0LTS 支持 HA 配置,请在主从节点各自配置 Zabbix Server 配置文件

④ 主节点配置

代码语言:javascript
复制
#vi /home/zabbix-server/etc/zabbix_server.conf #修改项如下:

LogFile=/home/logs/zabbix/zabbix_server.log
LogFileSize=200
PidFile=/home/zabbix-server/zabbix_server.pid
DBHost=[数据库节点 ip]
DBName=zabbix
DBUser=zabbix
DBPassword=
StartPollers=20
StartPollersUnreachable=5
StartPingers=5
CacheSize=1024M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=16M
ValueCacheSize=128M
Timeout=15
User=[启动用户]
StatsAllowedIP=0.0.0.0/0

HANodeName=[主节点 name]
NodeAddress=[主节点 IP]:10051

⑤ 备节点配置

代码语言:javascript
复制
#vi /home/zabbix-server/etc/zabbix_server.conf #修改项如下:

LogFile=/home/logs/zabbix/zabbix_server.log
LogFileSize=200
PidFile=/home/zabbix-server/zabbix_server.pid
DBHost=[数据库节点 ip]
DBName=zabbix
DBUser=zabbix
DBPassword=
StartPollers=20
StartPollersUnreachable=5
StartPingers=5
CacheSize=1024M
HistoryCacheSize=64M
HistoryIndexCacheSize=16M
TrendCacheSize=16M
ValueCacheSize=128M
Timeout=15
User=[启动用户]
StatsAllowedIP=0.0.0.0/0

HANodeName=[备节点 name]
NodeAddress=[备节点 IP]:10051

注: 在主节点启动服务后,会自动开启数据库表升级操作,待升级完成后在启动备节点。

⑥ 启动主节点服务,此步骤会触发数据库表升级操作

代码语言:javascript
复制
systemctl start zabbix-server
systemctl enable zabbix-server

⑦ 启动备节点服务

代码语言:javascript
复制
systemctl start zabbix-server
systemctl enable zabbix-server

至此,新 Server 部署完成。

⑧ 异常处理(★ 关键)

从前端页面登陆,如果页面显示连接数据库产生了报错(如乱码、未知报错等),产生该问题的原因大概率是因为数据库编码导致,需重新将 Mysql 8 的 zabbix 库表导出成 mysqldump 文件,并修改相关编码。具体步骤如下。

① 重新修改并确认 my.cnf 中配置

代码语言:javascript
复制
character-set-server=utf8mb4
collation-server=utf8mb4_bin

② 导出mysqldump文件

代码语言:javascript
复制
mysqldump -uroot -p --databases zabbix --ignore-table=zabbix.history --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-table=zabbix.history_text --ignore-table=zabbix.history_uint --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint > zabbix_dump.sql

mysqldump -d zabbix -uroot -p --tables history history_log history_str history_text history_uint trends trends_uint > zabbix_tables.sql

③ 重启mysql数据库

④ 删除原 zabbix 库并创建新的 zabbix 库(编码为utf8mb4)

代码语言:javascript
复制
drop database zabbix;
create database zabbix character set utf8mb4 collate utf8mb4_bin;

⑤ 修改导出的 mysqldump 文件

导入前,需确保mysqldump中每个表的DDL语句中参数如下(可采用 sed 批量调整)

代码语言:javascript
复制
ENGINE=InodDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

⑥ 导入 mysqldump

代码语言:javascript
复制
mysql -uroot -p zabbix < zabbix_dump.sql
mysql -uroot -p zabbix < zabbix_tables.sql

后记

Server 版本升级完成后,这是一个全新的尚未有 Agent/Proxy 数据接入 Server 端,可逐个更改 Agent/Proxy(Proxy 版本需与 Server 端相匹配)指向来实现监控无中断。

理论上,该文档适配zabbix 4.x的任何版本的跨版本升级。然而大版本升级具有一定风险,建议在测试环境充分测试后再投入生产实施。

最后祝大家升级顺利,万事大吉!

感谢本文作者,欢迎交流!期待更多用户投稿。

-------------- --------------

7月29日,拥有Zabbix5.0认证证书的工程师想要升级为6.0,只需参与为期1天的课程(原培训为5天),省时省钱!

联系文末小Z,了解更多。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Zabbix开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 资源需求
  • 升级步骤
    • 数据库部署 - Mysql 8
      • 新前端部署
        • 新 Server 部署
          • 后记
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档