跃迁进化 Zabbix 性能: MySQL 转向 TimescaleDB 的实战教程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bigmomo
V2EX    推广

跃迁进化 Zabbix 性能: MySQL 转向 TimescaleDB 的实战教程

  •  
  •   bigmomo 242 天前 1137 次点击
    这是一个创建于 242 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介

    本教程用于 Zabbix 6.0.11-7.4+的数据库从 MySQL 迁移到 PostgreSQL + TimescaleDB ,适用于 Rocky Linux 8-9 系统。内容包括版本检查、准备步骤、迁移过程、功能测试以及启用 TimescaleDB 和性能优化的指导。

    注意:!! 迁移前必须备份好数据,用于失败后回退。

    PS:本教程使用 Zabbix 7.0.12 版本。

    为什么要用 TimescaleDB 时序数据库?

    • 相对于 Mysql 可以更快的读写监控数据,TimescaleDB 利用分区(分块 chunk )的机制,将时间序列数据按时间切分,有效减少单个表的数据量,提升写入吞吐量,适合 Zabbix 这种需要大量实时数据写入的场景。 (至少三倍有以上)

    • 支持监控历史数据压缩,节省存储空间。

    • 删除监控历史数据的性能相对也比 Mysql 更好。

    安装前检查和准备

    Zabbix Server Mysql 包版本检查(下载源码使用)

    zabbix_server -V zabbix_server (Zabbix) 7.0.12 

    安装 PostgreSQL + TimescaleDB 时序数据库

    配置 PG YUM 源

    sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{centos})-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y # 配置 Postgresql 源 sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL [timescale_timescaledb] name=timescale_timescaledb baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 EOL # 配置 TimescaleDB 源 dnf -qy module disable postgresql # 关闭系统的 PG 源 

    PG 安装和初始化

    dnf install timescaledb-2-postgresql-16 postgresql16-contrib -y # 安装 postgresql 和 timescaledb sudo -u postgres /usr/pgsql-16/bin/initdb --encoding=UTF8 --locale=en_US.UTF-8 -D /var/lib/pgsql/16/data # 初始化数据库,指定数据库编码。 timescaledb-tune --pg-config /usr/pgsql-16/bin --max-cOnns=256 # 自动调优参数,一路 yes 即可 sudo systemctl enable --now postgresql-16 # 配置 PG 开机启动,并启动 sudo systemctl status postgresql-16 ss -an | grep 5432 # 检查状态是否正常 sudo -u postgres psql \password postgres \q # 进入 psql 然后配置管理员密码,并退出。 sudo -u postgres createuser --pwprompt zabbix # 创建 zabbix 用户并配置密码,我这里配置密码为 Songxwn.com sudo -u postgres createdb -O zabbix zabbix # 创建 zabbix 数据库并指定所属用户为 zabbix. 

    安装转换数据库工具 - pgloader

    dnf install pgloader -y pgloader -V # 安装转换工具 ( pgloader 是一款开源的数据迁移和加载工具) 

    准备使用 pgloader 迁移

    生成 Zabbix 数据库结构 SQL

    mkdir /opt/zabbix-db-migration/ && cd $_ # 创建一个迁移用文件夹 wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.12.tar.gz # 在迁移用文件夹内下载第一步检查获取版本的对应版本 Zabbix 源码,这里是 7.0.12 。 tar -zxvf zabbix-*.tar.gz # 在迁移用文件夹内解压 cd /opt/zabbix-db-migration/zabbix-*/database/postgresql/ # 进入 PG 数据库文件目录 grep -v 'ALTER TABLE ONLY' schema.sql | grep -v INSERT | grep -v 'CREATE INDEX' | grep -v 'CREATE UNIQUE INDEX' > /opt/zabbix-db-migration/create_tables.sql sed -i '/create\ or\ replace\ function/,$d' /opt/zabbix-db-migration/create_tables.sql awk '/INSERT INTO dbversion/{p=1;next} /ALTER TABLE/{p=0} p' schema.sql > /opt/zabbix-db-migration/triggers.sql grep -E 'CREATE INDEX|CREATE UNIQUE INDEX' schema.sql > /opt/zabbix-db-migration/create_index.sql grep 'ALTER TABLE ONLY' schema.sql > /opt/zabbix-db-migration/alter_table.sql ## 分五个步骤生成结构 SQL 用于转换使用。 

    准备 PostgreSQL

    注意:Zabbix 用户和 zabbix 数据库之前步骤已创建。

     sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /opt/zabbix-db-migration/create_tables.sql # 导入 SQL ,需要输入配置的 zabbix 用户密码 sudo -u postgres psql -c "SET password_encryption='md5';" sudo -u postgres psql -c "ALTER ROLE zabbix WITH PASSWORD 'Songxwn.com';" # 为了与 pgloader 程序兼容,请暂时将加密哈希设置为“md5”并更改创建的数据库用户的密码,以便在给定的哈希算法中重新生成该密码。为简单起见,最好使用您在创建此用户时输入的相同密码。 

    准备 MySQL

    vim /etc/my.cnf.d/mysql-server.cnf [mysqld] default-authentication-plugin=mysql_native_password # 在[mysqld]下添加以上参数给予 Mysql systemctl restart mysqld # 然后重启使其生效。 

    创建访问 MySQL Zabbix 数据库的用户

     mysql -uroot -p CREATE USER 'zabbix'@'127.0.0.1' IDENTIFIED BY 'Songxwn.com'; # 已有 zabbix 用户可以忽略 GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'127.0.0.1'; FLUSH PRIVILEGES; SELECT User, Host FROM mysql.user WHERE User='zabbix'; # 确认已经修改完成。 \q 

    创建 pgloader 配置文件

    vim /opt/zabbix-db-migration/pgloader.conf LOAD DATABASE FROM mysql://zabbix:[email protected]/zabbix INTO postgresql://zabbix:[email protected]/zabbix WITH include no drop, truncate, create no tables, create no indexes, no foreign keys, reset sequences, data only, prefetch rows = 1000, batch rows = 1000, batch cOncurrency= 1 ALTER SCHEMA 'zabbix' RENAME TO 'public'; 

    配置文件说明

    原有的 Zabbix Mysql 连接信息:用户名 zabbix 、密码为 Songxwn.com 、连接地址为 127.0.0.1 、数据名称为 zabbix 。

    新建的 Zabbix Postgresql 连接信息:用户名 zabbix 、密码为 Songxwn.com 、连接地址为 127.0.0.1 、数据名称为 zabbix 。

    • **FROM mysql://...**:从 MySQL 数据库 zabbix 读取数据。

    • **INTO postgresql://...**:把数据导入到 PostgreSQL 数据库 zabbix

    • WITH 参数说明

      • include no drop:迁移过程中不要执行 DROP 操作,不会删除表或其他对象。

      • truncate:在导入数据之前先清空目标表(删除旧数据)。

      • create no tables:不创建表,默认你 PostgreSQL 中已经有对应表结构。

      • create no indexes:不创建索引。

      • no foreign keys:不创建外键。

      • reset sequences:重置序列(自增 ID )以保证正确。

      • data only:只导入数据,不导入表结构。

      • prefetch rows = 1000batch rows = 1000batch cOncurrency= 1:控制数据批量读取和加载的参数,性能相关。

    • **ALTER SCHEMA 'zabbix' RENAME TO 'public'**:把导入的 zabbix schema 重命名为 PostgreSQL 默认的 public schema 。

    使用 pgloader 开始正式迁移

    systemctl stop zabbix-server httpd nginx # 停止 zabbix 后端和前端服务 mkdir /opt/zabbix-db-migration/data # 创建数据存储文件夹 pgloader --root-dir=/opt/zabbix-db-migration/data /opt/zabbix-db-migration/pgloader.conf # 开始转换,转换日志最后一行有 Total import time 字段,代表转换完成。 

    将 PG 加密方式切换回去和初始化数据库结构

    sudo -u postgres psql -c "SET password_encryption='SCRAM-SHA-256';" sudo -u postgres psql -c "ALTER ROLE zabbix WITH PASSWORD 'Songxwn.com';" # 切换加密方式并重新设定密码 sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /opt/zabbix-db-migration/create_index.sql sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /opt/zabbix-db-migration/alter_table.sql sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /opt/zabbix-db-migration/triggers.sql sudo -u postgres vacuumdb --dbname=zabbix --analyze --username=postgres --jobs=$(grep -c processor /proc/cpuinfo) ## 创建索引架构、告警、触发器并清理数据库。 

    卸载 Zabbix Mysql 版本安装配置 Zabbix pgsql 版本

     cp /etc/zabbix/zabbix_server.conf /opt/zabbix-db-migration/ # 卸载前备份配置文件 dnf remove zabbix-server-mysql zabbix-web-mysql -y dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf -y 

    修改 Zabbix_server 配置文件

    vim /etc/zabbix/zabbix_server.conf DBName=zabbix DBPassword=Songxwn.com ### 增加数据库用户密码配置 rm /etc/zabbix/web/zabbix.conf.php # 删除 Web 配置文件 systemctl restart zabbix-server nginx # 启动 Zabbix cat /var/log/zabbix/zabbix_server.log # 查看启动日志 

    Zabbix Web 初始化

    登录 Zabbix Web

    输入 PG 数据库连接信息(主要是密码)

    配置 Zabbix 主机名称和时区 - 完成安装

    停止无用的 Mysql

    systemctl disable --now mysqld 

    开启时序数据库 TimescaleDB

    systemctl stop zabbix-server echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql --dbname=zabbix sudo -u postgres psql --host=127.0.0.1 --dbname=zabbix --username=zabbix -f /opt/zabbix-db-migration/zabbix-7.*/database/postgresql/timescaledb/schema.sql 

    修改数据库允许兼容性并启动 Zabbix Server

    vim /etc/zabbix/zabbix_server.conf AllowUnsupportedDBVersiOns=1 # 添加以上字段,因为 zabbix 会拒绝较新未支持的数据库版本,所以需要修改允许一下。 systemctl restart zabbix-server # 重启 

    转换到时序数据库完成确认

    其他版本

    本教程使用 Zabbix 7.0.12 、Rocky Linux 8 作为示例,如果需要其他版本或帮助请加入知识星球。

    运维技术交流群

    发送邮件到 [email protected]

    或者关注 WX 公众号:网工格物

    微信扫码

    博客(最先更新)

    https://songxwn.com/

    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       242 天前   1
    @livid 推广
    Livid
        2
    Livid  
    MOD
    PRO
       242 天前
    @qW7bo2FbzbC0 谢谢,这个广告贴已经被移动并下沉。这个账号会被降权。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2537 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 15:12 PVG 23:12 LAX 07:12 JFK 10:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86