• 【无标题】


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

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

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

    Zabbix 4.2 → Zabbix 5.x → Zabbix 6.0
    
    • 1

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

    Zabbix 4.2 → Zabbix 6.0
    
    • 1

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

    资源需求
    类型 资源 备注
    数据库 虚机 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
    
    • 1
    • 2
    • 3

    步骤二:安装 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
    
    • 1
    • 2

    ② 创建 zabbix 库

    create database zabbix character set utf8mb3 collate utf8mb3_bin;
    
    • 1

    ③ 修改导出的 mysqldump 文件

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

    ENGINE=InodDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin;
    
    • 1

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

    ④ 导入 mysqldump

    mysql -uroot -p zabbix < zabbix_dump.sql
    mysql -uroot -p zabbix < zabbix_tables.sql
    
    • 1
    • 2

    ⑤ 创建 zabbix 用户并附权

    mysql> create user zabbix@'%' identified by 'xxxxxxxx';
    mysql> grant all on zabbix.\* to zabbix@'%';
    mysql> flush privileges;
    
    • 1
    • 2
    • 3

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

    #查看(确保加密方式为 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';
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    dnf module switch-to php:7.4
    dnf install zabbix-web-mysql zabbix-nginx-conf zabbix-selinux-policy
    
    • 1
    • 2

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

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

    ① Zabbix Server 所需的依赖包安装

    yum install -y gcc mariadb-devel net-snmp-devel libxml2-devel unixODBC-devel libcurl-devel openssl-devel openldap-devel pcre-devel
    
    • 1
    #需要将 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
    
    • 1
    • 2

    #支持 java gateway

    yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
    
    • 1

    ② 编译安装

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ③ 配置自启动服务

    #vim /usr/lib/systemd/system/zabbix-server.service #内容如下:
    [Unit]
    Description=Zabbix Server
    After=syslog.target
    After=network.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注: 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    ⑤ 备节点配置

    #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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

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

    systemctl start zabbix-server
    systemctl enable zabbix-server
    
    • 1
    • 2

    ⑦ 启动备节点服务

    systemctl start zabbix-server
    systemctl enable zabbix-server
    
    • 1
    • 2

    至此,新 Server 部署完成。

    ⑧ 异常处理(★ 关键)

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

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

    character-set-server=utf8mb4
    collation-server=utf8mb4_bin
    
    • 1
    • 2

    ② 导出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
    
    • 1
    • 2
    • 3

    ③ 重启mysql数据库

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

    drop database zabbix;
    create database zabbix character set utf8mb4 collate utf8mb4_bin;
    
    • 1
    • 2

    ⑤ 修改导出的 mysqldump 文件

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

    ENGINE=InodDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
    
    • 1

    ⑥ 导入 mysqldump

    mysql -uroot -p zabbix < zabbix_dump.sql
    mysql -uroot -p zabbix < zabbix_tables.sql
    
    • 1
    • 2

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

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

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

  • 相关阅读:
    Vue2和Vue3的区别——实例创建、响应式数据代理、v-for和v-if优先级、生命周期
    TypeScript DOM类型的声明
    Java编程技巧:Excel导入、导出(支持EasyExcel和EasyPoi)
    JS笔记-数组方法【增删改查】
    使用Speech to Text API进行语音到文本转换
    字符串排序
    samba服务器讲解
    Nginx使用vite部署vue3项目 页面刷新404
    跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展
    Android push到/system/app下,导致找不到so包
  • 原文地址:https://blog.csdn.net/Zabbix_China/article/details/126098199