Zabbix6.0已于上周发布,新功能一览见《Zabbix6.0为BSM、DevOps、ITOps助力》。你是否考虑升级至最新版本或者已经升级了?软件升级往往是一个令人生畏的的过程,尤其是当你第一次升级 Zabbix 实例时。本文将介绍升级的过程、必要的先决条件,以及迁移到 Zabbix 6.0 LTS 后,有哪些新功能是你期待的。
在升级 Zabbix 到新版本之前,首先确保底层组件都已经准备好了。在升级之前,你应该注意 Zabbix 发生了一些变化。其中一个变化是 Zabbix 6.0 LTS 支持的数据库引擎及版本:
如果你正在使用 PostgreSQL + TimescaleDB 或 Zabbix Proxies:
你可能已经发现了,我们增加了 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 官方支持的操作系统有:
Zabbix 还支持以下部署方式:
在对 Zabbix 进行大版本更新之前,强烈建议对系统环境进行一次检查,看看环境中有没有未完成的维护任务和健康状态检查。在升级 Zabbix 6.0 LTS 之前,我们需要考虑以下几点:
Zabbix 6.0 LTS 中的一些变化可能会对升级或现有的 Zabbix 工作流程造成影响。
以下是关于 5.0 和 6.0 版本之间 API 变化的文档列表:
API 的一些重要变化:
在迁移到 Zabbix 6.0 LTS 时,有几个重要的变化需要注意:
接下来,我们来讨论一下如何正确安全地执行升级过程:
我们来深入研究一下备份过程,并通过一些示例讨论所需的步骤:
例子: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-table=zabbix.trends --ignore-table=zabbix.trends_uint zabbix | gzip > zabbix_backup.sql.gz
至少,你应该备份以下配置文件:
在 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 软件包,那么升级过程还需要几个步骤,看起来有点复杂。下面让我们详细了解一下升级所需的步骤。这个示例对应的操作系统是 CentOS 8。
安装 Zabbix 6.0 LTS 发行包 ,需要添加必要的 Zabbix 6.0 LTS 存储库信息:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
清除 DNF 包管理器缓存:
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 6.0 LTS 发行包:
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
清除 DNF 包管理器缓存:
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
升级到 Zabbix 6.0 LTS 之后,还需要执行一些额外的工作。我们来看一下需要做些什么。
Zabbix 6.0 LTS 后端数据库历史表结构发生了变化,这些表现在有主键。由于会造成额外的故障,这些表的升级不会自动完成。 执行修改的时间可能很长,这取决于数据库的大小,因为历史表中的每个记录都需要修改。此外,历史记录表中的重复记录可能会导致手动升级数据库表结构失败。更改历史表结构有很多好处:
对全新安装的 Zabbix 6.0 LTS,默认就包含这些更改,对已有的环境进行 Zabbix 6.0 升级,建议充分测试历史表结构修改过程并评估潜在的故障时间。准确的历史表升级步骤,会随着 Zabbix 6.0 LTS 一起发布。
需要注意的是,在 Zabbix 6.0 LTS 中增加了一些新的 Zabbix 进程:
如果你以前做过 Zabbix 升级,你就会知道 Zabbix 不会自动更新现有的模板,因为我们认为用户可能会对上述模板做了一些定制更改。因此,若要在 Zabbix 服务器内部监视图中查看上述新进程,应该下载并导入最新的 Zabbix 服务器模板。
你可以从 Zabbix git 官方页面下载模板。你可以阅读发布说明,来查看模板更新的完整列表以及在对应模板所做的更改。
你也可以考虑升级你的 Zabbix agents。这个不是强制要求的,因为 Zabbix agents 是向后兼容的,所以你可以在 Zabbix 6.0 LTS 中使用旧版本的 Zabbix agents。之前的所有功能可以继续运行,但你也可以考虑更新 agents,因为更新里可能修复了一些问题或者支持一组新的监控项。
升级 Zabbix agent:
dnf install zabbix-agent
升级 Zabbix agent2:
dnf install zabbix-agent2
你可能已经注意到,在 Zabbix 6.0 LTS 中有多个新增的软件包。这些软件包大多数是为了更好地管理软件包而对一些旧的组件进行重新打包,但也有例外:
问: 升级过程是否会影响我自定义的模板?
答: 会的,所有的模板会继续工作。但是对触发语法所做的更改都会自动应用到你现有的模板中。
问: 迁移过程需要多长时间? 如何评估停机时间?
答: 如果不通过完全相同的硬件,来创建现有 Zabbix 实例的测试副本,并检查测试升级的停机时间,就没办法评估出准确的停机时间。
问: 从一个非常旧的版本迁移会怎么样 — 比如 Zabbix 3.0 或更老的版本?
答: 应该没有问题,但是旧版本升级可能有一些注意事项和额外的先决条件。