尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
zabbix_ansible_tidb
【实战】Ansible 自动化部署 Zabbix 6.0 LTS 并自动接入主机数据库平滑迁移到 TiDB 分布式数据库本文以 Rocky Linux 9.6 Zabbix 6.0 LTS 为基础环境完整记录了两大阶段的全过程第一阶段使用 Ansible 自动化部署 Zabbix Server 与 Zabbix Agent并通过 Ansible 自动把 Agent 主机接入 Zabbix Server 监控第二阶段将 Zabbix 自带的 MySQLMariaDB数据库替换为 TiDB 分布式数据库为海量监控数据存储做横向扩展准备。文章所有截图均来自真实环境操作命令可直接复制使用。目录一、环境与架构规划二、第一阶段Ansible 自动化部署 Zabbix2.1 控制端安装 Ansible 并配置主机清单2.2 安装 Ansible Galaxy Collection2.3 编写 Zabbix Server Playbook 并部署2.4 编写 Zabbix Agent Playbook 并部署2.5 Web 界面初始化 Zabbix2.6 Ansible 自动化接入 Agent 主机2.7 第一阶段效果验证三、第二阶段Zabbix 数据库迁移到 TiDB3.1 安装 TiUP3.2 部署 TiDB 集群3.3 数据迁移3.4 修改 Zabbix 配置指向 TiDB3.5 验证迁移结果3.6 踩坑记录与总结一、环境与架构规划1.1 主机规划主机名IP 地址角色操作系统server1192.168.40.141Zabbix Agent / Ansible 控制端Rocky Linux 9.6server2192.168.40.142Zabbix Server mysqlRocky Linux 9.6说明Ansible 控制端部署在 server1 上通过 SSH 免密管理 server1Agent与 server2Server两台主机。1.2 软件版本软件版本Ansible2.14.18Zabbix6.0 LTSzabbix-release-6.0-5.el9数据库第一阶段mysql 8.0数据库第二阶段TiDBTiUP 部署单机测试拓扑1.3 架构拓扑┌──────────────────────────────┐ │ Ansible 控制端 │ │ (server1 192.168.40.141) │ └──────────────┬───────────────┘ │ SSH / 免密 ┌─────────────────┴─────────────────┐ ▼ ▼ ┌───────────────────────┐ ┌────────────────────────────┐ │ Zabbix Agent │ 10050 │ Zabbix Server │ │ server1 │◄──────►│ server2 │ │ 192.168.40.141 │ ServerActive│ 192.168.40.142 │ └───────────────────────┘ │ mysql → (第二阶段) TiDB │ └────────────────────────────┘ │ 8080 httpd / php-fpm ▼ Web 前端 (http://192.168.40.142/zabbix)二、第一阶段Ansible 自动化部署 Zabbix2.1 控制端安装 Ansible 并配置主机清单在 server1 上安装 EPEL 源与 Ansible# 安装 EPEL 源dnf-yinstallepel-release# 安装 Ansiblednf-yinstallansible# 查看版本ansible--version配置 SSH 免密使控制端可以免密登录两台主机# 生成密钥对已有可跳过ssh-keygen-trsa-N-f/root/.ssh/id_rsa# 分发公钥到 server1本机与 server2ssh-copy-id root192.168.40.141 ssh-copy-id root192.168.40.142创建 Ansible 工作目录与主机清单Inventorymkdir-p/root/ansiblecd/root/ansiblehosts清单文件# 控制端根目录下/root/ansible/hosts [zabbix_server] 192.168.40.142 [zabbix_agent] 192.168.40.141 [all:vars] ansible_userrootansible.cfg配置文件[defaults] inventory hosts host_key_checking False验证 Ansible 与所有主机的连通性ansible all-mping2.2 安装 Ansible Galaxy Collection第一阶段共需要两个 Collectionansible.mysql用于在 server2 上创建 zabbix 数据库、数据库用户以及修改 MySQL 参数community.zabbix用于调用 Zabbix API 自动把 Agent 主机接入 Zabbix Server。安装命令如下# 安装 MySQL 相关 collection对应搜索 mysql 的结果ansible-galaxy collectioninstallansible.mysql# 安装 Zabbix 相关 collection对应搜索 zabbix 的结果ansible-galaxy collectioninstallcommunity.zabbix# 查看已安装的 collectionansible-galaxy collection list安装过程中可以参考 Ansible Galaxy 官网搜索对应 Collection搜索mysql可以看到ansible.mysql数据库模块搜索zabbix可以看到community.zabbixZabbix 监控模块如下图所示2.3 编写 Zabbix Server Playbook 并部署在/root/ansible目录下编写zabbix_server.yml完整部署 Zabbix Server、Web 前端并初始化数据库----hosts:zabbix_servertasks:-name:Install zabbix repoansible.builtin.yum:name:https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpmdisable_gpg_check:yesstate:present-name:Install zabbix serveransible.builtin.yum:disablerepo:epelname:-zabbix-server-mysql-zabbix-web-mysql-zabbix-apache-conf-zabbix-sql-scripts-zabbix-agent-zabbix-selinux-policy-mysql-serverdisable_gpg_check:yesstate:present-name:Start service mysqldansible.builtin.service:name:mysqldstate:started-name:Create a new database zabbixansible.mysql.mysql_db:name:zabbixstate:presentcollation:utf8mb4_binencoding:utf8mb4-name:Create database user using with all database privilegesansible.mysql.mysql_user:name:zabbixpassword:passwordpriv:*.*:ALLstate:present-name:Set log_bin_trust_function_creators to 1ansible.mysql.mysql_variables:variable:log_bin_trust_function_creatorsvalue:1-name:Import zabbix sql scriptansible.builtin.shell:zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz|mysql--default-character-setutf8mb4-uzabbix-ppassword zabbixtouch /etc/zabbix/.init_db_sql.lockargs:creates:/etc/zabbix/.init_db_sql.lock-name:Set log_bin_trust_function_creators to 0ansible.mysql.mysql_variables:variable:log_bin_trust_function_creatorsvalue:0-name:Modify zabbix-server.conf DBPasswordansible.builtin.lineinfile:path:/etc/zabbix/zabbix_server.confregexp:^# DBPasswordline:DBPasswordpassword-name:Enable zabbix_server serviceansible.builtin.service:name:{{ item }}state:startedenabled:yesloop:-zabbix-server-zabbix-agent-httpd-php-fpm先做语法检测确保 YAML 与语法没有问题cd/root/ansible ansible-playbook --syntax-check zabbix.yml看到输出playbook: zabbix.yml即代表语法检测通过这里有一个 WARNINGansible.mysql不支持 Ansible 2.14.18属于版本提示不影响执行如下图所示执行 Playbook 部署 Zabbix Serveransible-playbook zabbix.yml执行过程与结果如下图所示server2 : ok11 changed2全部任务成功2.4 编写 Zabbix Agent Playbook 并部署在/root/ansible目录下编写zabbix_agent.yml为 server1 部署 Zabbix Agent并自动把Server / ServerActive指向 Zabbix Server192.168.40.142----hosts:zabbix_agenttasks:-name:Install zabbix repoansible.builtin.yum:name:https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-latest-6.0.el9.noarch.rpmdisable_gpg_check:yesstate:present-name:Install zabbix agentansible.builtin.yum:disablerepo:epelname:zabbix-agentdisable_gpg_check:yesstate:present-name:Modify zabbix-agentd.confansible.builtin.lineinfile:path:/etc/zabbix/zabbix_agentd.confregexp:^{{ item.key }}line: {{ item.key }}{{ item.value }}loop:-{key:Server,value:192.168.40.142}-{key:ServerActive,value:192.168.40.142}-{key:Hostname,value:server1}-name:Enable zabbix-agentd serviceansible.builtin.service:name:zabbix-agentstate:restartedenabled:yes说明截图中的 Playbook 使用key / value字典列表循环修改配置。首次运行Server与ServerActive会显示changedHostname若与已有值一致则显示ok。执行 Agent 部署ansible-playbook zabbix_agent.yml执行结果如下图所示server1 : ok5 changed1Agent 部署成功2.5 Web 界面初始化 Zabbix在浏览器中访问 Zabbix Web 前端http://192.168.40.142/zabbix进入 Zabbix 6.0 安装引导界面Welcome → Check of pre-requisites → Configure DB connection → Settings → Pre-installation summary → Install如下图所示初始化过程中的几个关键点Configure DB connection数据库类型选择MySQL主机名填localhost数据库在 server2 本机端口默认3306数据库名 / 用户 / 密码与 Playbook 中定义的一致zabbix / zabbix / Zabbix2024Settings设置 Zabbix 前端标题并设置 Admin 超级管理员的登录密码一定要记住这个密码后续 connection.yml 调用 Zabbix API 时需要用到安装完成后跳转到登录页使用Admin 刚才设置的密码登录。2.6 Ansible 自动化接入 Agent 主机传统方式需要在 Web 界面手动创建主机而这里我们通过community.zabbix的zabbix_host模块调用 Zabbix API由 Ansible 自动完成主机接入。编写connection.yml----hosts:zabbix_servertasks:-name:Create zabbix hostcommunity.zabbix.zabbix_host:http_login_user:Adminhttp_login_password:zabbixhost_name:server1host_groups:-Linux serverslink_templates:-Linux by Zabbix agentstatus:enabledinterfaces:-type:1main:1useip:1ip:192.168.40.141dns:port:10050vars:ansible_network_os:community.zabbix.zabbixansible_connection:httpapiansible_httpapi_host:192.168.40.142ansible_httpapi_port:80ansible_httpapi_use_ssl:falseansible_httpapi_validate_certs:falseansible_zabbix_url_path:zabbixansible_user:Adminansible_httpapi_pass:zabbix执行自动接入ansible-playbook connection.yml执行结果如下图所示Create zabbix host任务changed说明主机已通过 API 成功创建2.7 第一阶段效果验证登录 Zabbix Web 前端进入Monitoring → Hosts可以看到 server1 与 Zabbix server 两台主机server1192.168.40.141:10050接口显示ZBX绿色图标表示 Agent 正常连接状态为Enabled已经有最新数据Latest data 42、图表Graphs 8与仪表盘Dashboards 2在采集说明模板已经生效底部显示接口192.168.40.141:10050Available监控链路完全打通。如下图所示至此第一阶段完成Zabbix Server / Agent 全部由 Ansible 自动化部署完成Agent 主机也通过 Ansible 自动接入 Zabbix Server 并开始采集数据。三、第二阶段Zabbix 数据库迁移到 TiDB随着监控规模扩大单机 MariaDB 会成为性能瓶颈。TiDB 是国产开源的分布式关系型数据库天然支持 MySQL 协议可以像使用单库一样水平扩展非常适合承载 Zabbix 这种高并发写入的海量监控数据。第二阶段的目标把 Zabbix Server 使用的 MySQL/MariaDB替换为 TiDB 分布式数据库Zabbix 通过 MySQL 协议默认端口 4000连接 TiDB。3.1 安装 TiUPTiUP 是 TiDB 官方的包管理器类似 Python 的 pip用来下载、部署和管理 TiDB 集群。在 server1Ansible 控制端同时也是 TiDB 部署机上执行官方安装脚本curl--protohttps--tlsv1.2-sSfhttps://tiup-mirrors.pingcap.com/install.sh|sh安装过程输出如下安装成功后需要source环境变量使tiup命令生效# 使 tiup 命令在当前会话生效source/root/.bash_profile# 验证版本tiup--version3.2 部署 TiDB 集群由于是测试环境这里部署一个单机 TiDB 拓扑1 个 PD 1 个 TiKV 1 个 TiDB生产环境至少需要 3 个 TiKV 节点此处仅作演示。编写集群拓扑文件topology.yaml# /root/tidb/topology.yamlglobal:user:rootssh_port:22deploy_dir:/data/tidb-deploydata_dir:/data/tidb-datapd_servers:-host:192.168.40.141tidb_servers:-host:192.168.40.141tikv_servers:-host:192.168.40.141monitoring_servers:-host:192.168.40.141grafana_servers:-host:192.168.40.141alertmanager_servers:-host:192.168.40.141使用tiup cluster部署并启动集群v8.5.0为示例版本可按需更换# 部署集群tiup cluster deploy zabbix-tidb v8.5.0 ./topology.yaml--userroot-p# 启动集群tiup cluster start zabbix-tidb# 查看集群状态tiup cluster display zabbix-tidb启动后验证 TiDB 端口ss-lntp|grep4000TiDB 通过4000 端口对外提供 MySQL 兼容协议PD 使用 2379 端口Grafana 监控面板使用 3000 端口。3.3 数据迁移在 TiDB 上创建 Zabbix 所需的数据库与用户# 连接 TiDBMySQL 协议端口 4000mysql-h127.0.0.1-P4000-u root# 创建数据库字符集与 Zabbix 要求一致CREATEDATABASEzabbixCHARACTERSETutf8mb4COLLATEutf8mb4_bin;# 创建用户并授权CREATEUSERzabbix%IDENTIFIEDBYZabbix2024;GRANTALLPRIVILEGESONzabbix.*TOzabbix%;在旧的 server2mysql上导出数据# 导出 zabbix 库包含存储过程/函数mysqldump-uzabbix -pZabbix2024--single-transaction--routines--eventszabbix/tmp/zabbix.sql将导出文件传输到 TiDB 所在主机并导入# 导入到 TiDBmysql-h127.0.0.1-P4000-uzabbix -pZabbix2024zabbix/tmp/zabbix.sql提示如果不需要保留历史监控数据也可以直接导入 Zabbix 官方空 schemazcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h127.0.0.1 -P4000 -uzabbix -pZabbix2024 zabbix3.4 修改 Zabbix 配置指向 TiDB修改 server2 上的 Zabbix Server 配置文件/etc/zabbix/zabbix_server.conf把数据库连接指向 TiDBDBHost192.168.40.141 # TiDB 所在主机原为 localhost DBPort4000 # 关键TiDB 使用 4000 端口 DBSchemazabbix DBUserzabbix DBPasswordZabbix2024同时修改 Web 前端数据库配置文件/etc/zabbix/web/zabbix.conf.php保持前后端都指向 TiDB?php$DB[SERVER]192.168.40.141;$DB[PORT]4000;$DB[DATABASE]zabbix;$DB[USER]zabbix;$DB[PASSWORD]Zabbix2024;重启 Zabbix Server 与相关服务使配置生效systemctl restart zabbix-server httpd php-fpm systemctlenablezabbix-server3.5 验证迁移结果验证是否已成功切换到 TiDB# 1. 确认 Zabbix Server 正常启动且无数据库报错systemctl status zabbix-server# 2. 查看 Zabbix Server 日志确认连接的是 TiDBtail-f/var/log/zabbix/zabbix_server.log# 3. 在 TiDB 中确认 Zabbix 正在写入数据每 1 分钟有新的 items 数据写入mysql-h127.0.0.1-P4000-uzabbix -pZabbix2024zabbix-eSELECT COUNT(*) FROM history;最后登录 Zabbix Web 前端确认主机数据持续采集、仪表盘正常展示即表示 Zabbix 已完全运行在 TiDB 分布式数据库之上。3.6 总结第一阶段通过 Ansible 的dnf、service、community.mysql等模块实现了 Zabbix Server / Agent 的一键化部署再通过community.zabbix.zabbix_host模块调用 Zabbix API实现了Agent 主机的全自动接入全程无需手动登录 Web 界面创建主机。第二阶段Zabbix 作为典型的高并发写入型应用非常适合把存储层切换到 TiDB 这类分布式数据库。利用 TiDB 兼容 MySQL 协议的特性只需要改一个端口和一个地址就能平滑完成数据库的分布式化改造后续只需横向添加 TiKV 节点即可线性扩容。两个阶段的核心价值标准化、自动化、可扩展——部署交给 Ansible存储交给 TiDB监控系统从搭建到扩容全链路自动化。
RELATED

相关推荐

Data Agent 不该直接写 SQL,它需要一层“业务编译器”

Data Agent 不该直接写 SQL,它需要一层“业务编译器”

过去几年,自然语言查询数据库的技术路线看起来非常直接:用户提出一个问题,大模型读取数据库 Schema、生成 SQL,数据库执行查询,再把结果返回给用户。随着模型代码能力提高,这条链路迅速成为 Data Agent 最常…

📅 2026/10/14 2:22:59
深度商店从0到1:编译安装应用市场

深度商店从0到1:编译安装应用市场

深度商店从0到1:编译安装应用市场 【免费下载链接】deepin-appstore 项目地址: https://gitcode.com/gh_mirrors/dee/deepin-appstore Deepin Appstore 是深度操作系统的官方应用市场客户端,你可以在界面里搜索、浏览软件,一键完成下载和安装。跟着这篇文章走一遍,你就…

📅 2026/8/26 3:47:01
一、sci(uart)

一、sci(uart)

序号配置项当前值含义推荐设置1NamemySCI0SCI模块实例名称自行命名2Baud Rate115200串口波特率1152003Actual Baud Rate Value115741实际硬件波特率自动计算,无需修改4Baud Rate Error Percent0.47%波特率误差5Use Loopback Mode关闭内部回环测试模式正常通信保持关…

📅 2026/9/15 10:03:08
MORE NEWS

更多资讯

📰

上下文工程实战:6个核心问题玩转Token预算与上下文管理

做提示工程这几年,我有个越来越深的体会:真正拉开AI应用体验差距的,往往不是模型选型,而是上下文怎么填、怎么管、怎么省。上下文工程(Context Engineering)这个说法出现得比提示工程晚,但它是提…

📰

AI辅助写专著:人机协同全流程实操指南

写一本书,尤其是专著,可能是很多人职业生涯里最难啃的硬骨头。二十万字起步,涉及文献、理论、方法论、案例、术语统一,还要保证前后逻辑闭环。过去一年我用AI辅助跑了几个书稿项目,从选题、大纲到逐章撰写,…

📰

核电设备管理数字化路径:EAM为基、全生命周期数据贯通

简介:本资源是一份深度剖析核电行业信息化演进路径的行业实践报告,面向电力系统信息化建设者、EAM/ERP实施顾问、能源企业数字化转型管理者及高校能源管理专业研究者。文档以大亚湾核电站为全球首个核电EAM落地案例切入,系统阐述其“先EAM后E…

📰

AI辅助教材编写:从查重原理到原创合规的完整实践

这几年AI辅助教材编写确实成了热点,我身边不少高校老师、培训机构教研员都在尝试用AI工具搭教材框架、写初稿。做得好的,确实能大幅压缩编写周期,而且因为AI生成的内容经过合理改写和组织,最终查重率通常比传统“复制粘贴再拼凑”…

📰

深入解读GIC400中断控制器:架构、寄存器与Linux内核实战

最近調一個基於Cortex-A7的項目時碰到一個很奇怪的問題:外設明明產生了中斷,CPU卻毫無反應,加了打印、看了驅動,折騰兩天才定位到GIC400的路由配置上。這個教訓讓我決定把 GIC400研究筆記整理成文,給做嵌入式Linux、RT…

📰

Git新手实战:从身份配置、SSH密钥到分支合并的完整流程

1. 为什么几乎所有团队都让新人在第一天先配好Git身份我以前带过不少新人,第一天到岗几乎都绕不开同一件事:配Git。你以为这就是敲两行命令的功夫,但实际问一圈就会发现,能卡住的点特别多——用户名是全拼还是中文、邮箱到底用哪个…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬