当前位置:网站首页>【无标题】
【无标题】
2022-08-04 08:48:00 【Zabbix_China】
【作者】武玉森,就职于国内某城商行,从事运维框架及智能监控等方面工作,对操作系统、开源监控等方面具有丰富的实践经验。
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 数据,但需导出表结构
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 中配置
character-set-server=utf8mb3
collation-server=utf8mb3_bin
② 创建 zabbix 库
create database zabbix character set utf8mb3 collate utf8mb3_bin;
③ 修改导出的 mysqldump 文件
导入前,需确保mysqldump中每个表的DDL语句中参数如下(可采用 sed 批量调整)
ENGINE=InodDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
此步骤很重要,不然会出现索引异常的问题。
④ 导入 mysqldump
mysql -uroot -p zabbix < zabbix_dump.sql
mysql -uroot -p zabbix < zabbix_tables.sql
⑤ 创建 zabbix 用户并附权
mysql> create user [email protected]'%' identified by 'xxxxxxxx';
mysql> grant all on zabbix.\* to [email protected]'%';
mysql> flush privileges;
⑥ Zabbix plugin 加密方式的确认及修改
#查看(确保加密方式为 mysql_native_password):
mysql> use mysql;
mysql> select user,host,plugin,authentication_string from user;
#修改:
mysql> alter user [email protected]'%' identified with mysql_native_password by 'xxxxxxx';
新前端部署
此处部署全新的 Nginx+PHP 按官网提供的部署方案部署即可,此处不再赘述。(附上官网安装步骤,依据个人喜好,可采用源码安装)
dnf module switch-to php:7.4
dnf install zabbix-web-mysql zabbix-nginx-conf zabbix-selinux-policy
新 Server 部署
可按官方提供的部署方法部署,以下为我所用的部署方案(仅供参考)。
采用源码部署方式部署,主备节点均采用以下方案部署。
① Zabbix Server 所需的依赖包安装
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
② 编译安装
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
③ 配置自启动服务
#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 配置文件
④ 主节点配置
#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
⑤ 备节点配置
#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
注: 在主节点启动服务后,会自动开启数据库表升级操作,待升级完成后在启动备节点。
⑥ 启动主节点服务,此步骤会触发数据库表升级操作
systemctl start zabbix-server
systemctl enable zabbix-server
⑦ 启动备节点服务
systemctl start zabbix-server
systemctl enable zabbix-server
至此,新 Server 部署完成。
⑧ 异常处理(* 关键)
从前端页面登陆,如果页面显示连接数据库产生了报错(如乱码、未知报错等),产生该问题的原因大概率是因为数据库编码导致,需重新将 Mysql 8 的 zabbix 库表导出成 mysqldump 文件,并修改相关编码。具体步骤如下。
① 重新修改并确认 my.cnf 中配置
character-set-server=utf8mb4
collation-server=utf8mb4_bin
② 导出mysqldump文件
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)
drop database zabbix;
create database zabbix character set utf8mb4 collate utf8mb4_bin;
⑤ 修改导出的 mysqldump 文件
导入前,需确保mysqldump中每个表的DDL语句中参数如下(可采用 sed 批量调整)
ENGINE=InodDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
⑥ 导入 mysqldump
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的任何版本的跨版本升级。然而大版本升级具有一定风险,建议在测试环境充分测试后再投入生产实施。
最后祝大家升级顺利,万事大吉!
边栏推荐
- 『递归』递归概念与典型实例
- 第一次用postgreSQL,想装主从,用的12.7 tar.gz版本。安装好后没在 share目录下找到样例配置recovery.conf.sample,是安装方式不对,还是路径不对?
- 虚拟机没有USB网卡选项怎么解决
- Thread类的基本使用。
- 2022的七夕,奉上7个精美的表白代码,同时教大家改源码快速自用
- 线程的状态
- 使用GBase 8c数据库的时候,遇到这种报错
- 如何设计一个注册中心
- 【论文笔记】Delving into the Estimation Shift of Batch Normalization in a Network
- ShuffleNet v2网络结构复现(Pytorch版)
猜你喜欢
给Unity Behavior Designer(Unity行为树) 的Can See Object 画圆锥辅助图
【CNN基础】转置卷积学习笔记
布局管理器
DWB主题事实及ST数据应用层构建,220803,,
此时已莺飞草长,愿世间美好与你环环相扣
高等代数_证明_幂等矩阵一定能够相似对角化
推荐几种可以直接翻译PDF英文文献的方法
B站回应HR称“核心用户都是Loser”、求职者是“白嫖党”:已被劝退
Yolov5 replaces the backbone network of "Megvii Lightweight Convolutional Neural Network ShuffleNetv2"
ShuffleNet v2 network structure reproduction (Pytorch version)
随机推荐
【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
Linux Redis cache avalanche, breakdown, penetration
Unity3D 数据加密
金仓数据库KingbaseES客户端编程接口指南-JDBC(6. JDBC 大对象数据处理)
About Oracle RAC 11g rebuilding the disk group
layout manager
速速脱单诀窍
[NOI Simulation Competition] Paper Tiger Game (Game Theory SG Function, Long Chain Division)
图的基本概念
『递归』递归概念与典型实例
Typora颜色公式代码大全
dalle:zero-shot text-to-image generation
解决报错: YarnScheduler: Initial job has not accepted any resources
高等代数_证明_幂等矩阵一定能够相似对角化
秒懂大模型 | 3步搞定AI写摘要
关于常用状态码4XX提示错误
最近的一些杂感-20220731
线程安全问题
leetcode 22.8.1 二进制加法
DNS 查询原理详解—— 阮一峰的网络日志