Zabbix6.0升级完全指南
王 军 | 宏时数据技术经理
Zabbix5.0指导⼿册中⽂译者。感谢译者王军,欢迎更多资深⽤户翻译官⽅博⽂并分享!
Zabbix6.0已于上周发布,新功能⼀览见《Zabbix6.0为BSM、DevOps、ITOps助⼒》。你是否考虑升级⾄最新版本或者已经升级了?软件升级往往是⼀个令⼈⽣畏的的过程,尤其是当你第⼀次升级 Zabbix 实例时。本⽂将介绍升级的过程、必要的先决条件,以及迁移到Zabbix 6.0 LTS 后,有哪些新功能是你期待的。
⽬录
升级前检查
数据库版本
⽀持的操作系统
其他安装⽅式
环境检查
影响升级过程的重要变化
API 变化
其他重要变化
升级步骤
备份
备份配置⽂件
通过 Docker 升级
通过 Zabbix 软件包升级
升级 Zabbix 的主要组件
升级 Zabbix proxies
升级后的⼯作
历史表主键
检查新进程
更新现有模板
更新 Zabbix agents
新增的 Zabbix 安装包
Q&A
升级前检查
数据库版本
在升级 Zabbix 到新版本之前,⾸先确保底层组件都已经准备好了。在升级之前,你应该注意 Zabbix 发⽣了⼀些变化。其中⼀个变化是Zabbix 6.0 LTS ⽀持的数据库引擎及版本:
MySQL/Percona 8.0.x
MariaDB 10.5.0 -10.6.x
PostgreSQL 13.x
Oracle 19c – 21c
如果你正在使⽤ PostgreSQL + TimescaleDB 或 Zabbix Proxies:
TimescaleDB 2.0.1-2.3
SQLite 3.3.5 – 3.34.x
你可能已经发现了,我们增加了 Zabbix 后端数据库的版本要求。这样做的原因是 Zabbix 利⽤了这些新版本数据库提供的特性,从⽽确保Zabbix 的最佳性能。如果使⽤不受⽀持的数据库版本,Zabbix 将不会启动。有⼀个配置参数可以解决这种问题,但是不建议这样做,因为⽆法确保 Zabbix 会不会遇到性能问题或者崩溃。在迁移到 Zabbix 6.0 LTS 之前,应该⾸先将数据库升级到⽀持的版本。
⽀持的操作系统
Zabbix ⽀持所有 Linux 发⾏版和许多其他类 unix 操作系统。但不是对每⼀个发⾏版操作系统都提供了
Zabbix 安装包。Zabbix 5.2 的⼀个重要变化就是没有为 RHEL/CentOS 7 提供对应的软件包。因为包含在这些发⾏版操作系统中,有⼀些库⽂件已经过时了,在这些操作系统上构建 Zabbix 变得越来越复杂。但是如果有对应版本的库⽂件,仍然可以从源代码中构建 Zabbix。
Zabbix 6.0 LTS 官⽅⽀持的操作系统有:
RHEL/CentOS/Oracle Linux 8
Ubuntu 18.04+
Debian 10+
SLES 12+
其他安装⽅式
Zabbix 还⽀持以下部署⽅式:
Docker – 官⽅ docker 镜像中提供了所有的依赖关系
Cloud image – 该镜像包含了所有的依赖
Zabbix appliance – 所有可⽤的 Zabbix 应⽤镜像都包含所需的依赖
环境检查
在对 Zabbix 进⾏⼤版本更新之前,强烈建议对系统环境进⾏⼀次检查,看看环境中有没有未完成的维护任务和健康状态检查。在升级Zabbix 6.0 LTS 之前,我们需要考虑以下⼏点:
在升级 Zabbix 之前,升级所需的操作系统或数据库,并检查没有任何问题
检查⾃定义安装——是否修改了数据库表结构?有没有⾃定义的模块或补丁?
最好的⽅式就是复制当前 Zabbix 实例,然后在测试环境中测试升级。
是否为所有 Zabbix 组件都提供了所需的软件包?
是否所有 Proxies 的操作系统都是⽀持的版本?
查看官⽅⽂档,了解将要升级的这个版本中存在的问题。
影响升级过程的重要变化
Zabbix 6.0 LTS 中的⼀些变化可能会对升级或现有的 Zabbix ⼯作流程造成影响。
API 变化
以下是关于 5.0 和 6.0 版本之间 API 变化的⽂档列表:
Zabbix 5.4 中引⼊了新的触发器和计算/聚合监控项语法,对应创建触发器 API 的调⽤⽅式也发⽣了变化(ZBXNEXT-6451)。
你需要修改 API 调⽤的触发器语法,避免出现问题。
对于 ate 和 user.update ⽅法,user_medias 参数被重命名为 medias(ZBX-17955)。
user_medias 参数被弃⽤
⽤户对象不在⽀持type属性,⽽是在⽤户⾓⾊中定义。
监控项⽆法添加到应⽤集,应⽤集⽤标签代替了(ZBXNEXT-2976)
由于值映射不⽀持全局定义了,ate和⽅法需要⼀个hostid属性(ZBXNEXT-5868)
其他重要变化
在迁移到 Zabbix 6.0 LTS 时,有⼏个重要的变化需要注意:
以前,⽆论是在设置密码或修改密码,密码结尾的空格都会被删除。现在密码结尾的空格不会被删除。
未使⽤的值映射将被删除。
由于审计⽇志设计发⽣变化,已存在的审计⽇志记录将被删除。
升级步骤
接下来,我们来讨论⼀下如何正确安全地执⾏升级过程:
备份数据库,以及任何⾃定义⽂件(外部脚本、告警脚本)和配置⽂件。
升级 Zabbix Server 和 Zabbix 前端
⼀旦启动新的 Zabbix 服务器进程,它将⾃动检查数据库结构并⾃动升级。
迁移时长取决于数据库⼤⼩和版本。
⼀旦数据库结构⾃动升级完成,Zabbix Server 将⾃动启动。
升级 proxies。Proxies 必须与 Zabbix Server 版本相同。
检查是否存在问题并且 Zabbix 实例是否已经启动并正常运⾏。
检查 Zabbix Server 和 Zabbix Proxies 是否能采集到数据。
检查是否有触发器告警以及是否收到对应的告警通知。
备份
我们来深⼊研究⼀下备份过程,并通过⼀些⽰例讨论所需的步骤:
根据数据库类型选择数据库备份⽅式
通常,你可以忽略历史和趋势数据表,只备份配置数据表。
历史和趋势数据表通常很⼤,只备份配置数据就很快。
如果有时候需要从备份中执⾏恢复,则需要⼿动重新创建历史和趋势表。
备份 Zabbix 配置⽂件。
⾃定义的告警脚本、外部脚本和其他⾃定义⽂件可以根据需要进⾏备份。
例⼦:MySQL 数据库备份(忽略历史和趋势表):
mysqldump -uroot -p --single-transaction --ignore-table=zabbix.history --ignore-table=zabbix.history_uint --
ignoretable=zabbix.history_text --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-
ds --ds_uint zabbix | gzip > zabbix_
备份配置⽂件
⾄少,你应该备份以下配置⽂件:
/etc/zabbix/*
/usr/lib/zabbix/externalscripts/ 中的外部脚本
/usr/lib/zabbix/alertscripts 中的告警通知脚本
/etc/httpd/conf.f
/etc/php-fpm.f
通过 Docker 升级
在 docker 中运⾏ Zabbix 有多种⽅法。在本⽰例中,假设你是通过 Zabbix 官⽅提供的 Docker 镜像(Mysql+Apache)中运⾏的 Zabbix Server 和 Zabbix 前端。
停⽌ Zabbix Server、Zabbix 前端和 proxy 容器:
docker stop my-zabbix-server
docker stop my-zabbix-frontend
启动 Zabbix 6.0 LTS 容器,并指向相同的后端数据库:
docker run --name my-zabbix-server-6.0 -e DB_SERVER_HOST=“some-mysql-server” -e
MYSQL_USER=“some-user” -e MYSQL_PASSWORD=“some-password” -d zabbix/zabbixserver-mysql:6.0-latest
然后,数据库结构将⾃动升级并启动。
最后,启动 Zabbix 前端容器:
docker run --name my-zabbix-web-apache-6.0 -e DB_SERVER_HOST=“some-mysqlserver” -e MYSQL_USER=“some-user” -e MYSQL_PASSWORD=“some-password” -e ZBX_SERVER_HOST= “my-zabbix-server-6.0” -d zabbix/zabbix-web-apache-mysql:6.0-latest
通过 Zabbix 软件包升级
升级 Zabbix 的主要组件
如果你使⽤的是官⽅提供的 Zabbix 软件包,那么升级过程还需要⼏个步骤,看起来有点复杂。下⾯让我们详细了解⼀下升级所需的步骤。这个⽰例对应的操作系统是 CentOS 8。
安装 Zabbix 6.0 LTS 发⾏包 ,需要添加必要的 Zabbix 6.0 LTS 存储库信息:
dnf clean all
安装所有的依赖软件包
dnf install zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-web-deps
zabbix-apache-conf zabbix-selinux-policy
启动 Zabbix 组件并观察⽇志,你应该可以看到正在进⾏数据库结构升级。⼀旦数据库升级完成,Zabbix 内部的所有进程都应该正常启动:
17602:20210921:131335.333 completed 96% of database upgrade
17602:20210921:131335.355 completed 97% of database upgrade
17602:20210921:131335.379 completed 98% of database upgrade
17602:20210921:131335.606 completed 99% of database upgrade
17602:20210921:131335.711 completed 100% of database upgrade
17602:20210921:131335.711 database upgrade fully completed
17602:20210921:131335.804 server #0 started [main process]
17602:20210921:131335.808 server #2 started [configuration syncer #1]
17602:20210921:131335.810 server #1 started [service manager #1]
升级 Zabbix proxies
此外,我们还需要升级我们的 Zabbix Proxies。这个过程和我们之前的步骤⾮常相似:
安装 Zabbix 6.0 LTS 发⾏包:
dnf clean all
升级 Zabbix proxy
dnf update zabbix-proxy-mysql(pgsql, sqlite3)
对于后端数据库是 MySQL, PostgreSQL, and Oracle 的 proxies,数据库表结构会⾃动更新。
对于后端数据库是 SQLite3 的 Proxies,数据库表结构不会⾃动更新。 我们只需要删除旧的 sqlite3 数据库⽂件——⼀旦启动 Zabbix Proxy,数据库⽂件将⾃动重新创建。
rm –rf /tmp/proxy.sqlite
oracle数据库表结构怎么看
升级后的⼯作
升级到 Zabbix 6.0 LTS 之后,还需要执⾏⼀些额外的⼯作。我们来看⼀下需要做些什么。
历史表主键
Zabbix 6.0 LTS 后端数据库历史表结构发⽣了变化,这些表现在有主键。由于会造成额外的故障,这些表的升级不会⾃动完成。 执⾏修改的时间可能很长,这取决于数据库的⼤⼩,因为历史表中的每个记录都需要修改。此外,历史记录表中的重复记录可能会导致⼿动升级数据库表结构失败。更改历史表结构有很多好处:
所有历史表现在都有主键。
减少了历史表存储空间
提⾼了历史表查询性能
不推荐升级现有实例
对全新安装的 Zabbix 6.0 LTS,默认就包含这些更改,对已有的环境进⾏ Zabbix 6.0 升级,建议充分测
试历史表结构修改过程并评估潜在的故障时间。准确的历史表升级步骤,会随着 Zabbix 6.0 LTS ⼀起发布。
检查新进程
需要注意的是,在 Zabbix 6.0 LTS 中增加了⼀些新的 Zabbix 进程:
StartHistoryPollers:
负责处理计算、聚合和内部检查(需要连接数据库)的进程。
默认值是 5。如果有很多这样的监控项可以考虑增加此值。
StartLLDProcessors(从 4.0 迁移):
⽤于 LLD 任务进程
默认值是 5。如果有很多 lld 规则可以考虑增加此值。
更新现有模板
如果你以前做过 Zabbix 升级,你就会知道 Zabbix 不会⾃动更新现有的模板,因为我们认为⽤户可能会对上述模板做了⼀些定制更改。因此,若要在 Zabbix 服务器内部监视图中查看上述新进程,应该下载并导⼊最新的 Zabbix 服务器模板。
你可以从 Zabbix git 官⽅页⾯下载模板。你可以阅读发布说明,来查看模板更新的完整列表以及在对应模板所做的更改。
更新 Zabbix agents
你也可以考虑升级你的 Zabbix agents。这个不是强制要求的,因为 Zabbix agents 是向后兼容的,所以你可以在 Zabbix 6.0 LTS 中使⽤旧版本的 Zabbix agents。之前的所有功能可以继续运⾏,但你也可以考虑更新 agents,因为更新⾥可能修复了⼀些问题或者⽀持⼀组新的监控项。
升级 Zabbix agent:
dnf install zabbix-agent
升级 Zabbix agent2:
dnf install zabbix-agent2
新增的 Zabbix 安装包
你可能已经注意到,在 Zabbix 6.0 LTS 中有多个新增的软件包。这些软件包⼤多数是为了更好地管理软件包⽽对⼀些旧的组件进⾏重新打包,但也有例外:
zabbix-selinux-policy — Zabbix 的 SELinux 基本策略
zabbix-sql-scripts — 所有后端数据库脚本.sql ⽂件
它们曾经是 zabbix-server 包的⼀部分
在 Zabbix 安装过程中,初始化 Zabbix 数据库结构或数据时需要⽤此安装包
zabbix-web-service — 负责⽣成定时报表的服务
Q&A
问: 升级过程是否会影响我⾃定义的模板?
答: 会的,所有的模板会继续⼯作。但是对触发语法所做的更改都会⾃动应⽤到你现有的模板中。
问: 迁移过程需要多长时间? 如何评估停机时间?
答: 如果不通过完全相同的硬件,来创建现有 Zabbix 实例的测试副本,并检查测试升级的停机时间,就没办法评估出准确的停机时间。
问: 从⼀个⾮常旧的版本迁移会怎么样 — ⽐如 Zabbix 3.0 或更⽼的版本?
答: 应该没有问题,但是旧版本升级可能有⼀些注意事项和额外的先决条件。建议⼤家回顾⼀下往期峰会升级指南:
《⼲货视频|Zabbix5.0升级最佳实践以及常见问题排查》,因为我们在前⼏年已经介绍过⽼版本的升级过程。这些内容应该可以为你升级Zabbix 6.0 LTS 提供⼀个先决条件的检查清单。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。