尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

zabbix_ansible_tidb

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监控系统从搭建到扩容全链路自动化。
返回列表