Zabbix 6.4 LTS离线环境搭建:如何在没有互联网的情况下完成源码编译和部署?

张开发
2026/5/22 2:40:32 15 分钟阅读
Zabbix 6.4 LTS离线环境搭建:如何在没有互联网的情况下完成源码编译和部署?
Zabbix 6.4 LTS离线部署全攻略从源码编译到高可用配置在企业级监控系统部署中完全离线的环境往往是最具挑战性的场景之一。想象一下这样的情境你站在数据中心冰冷的机房中面对着一台无法连接互联网的服务器却需要部署一套完整的Zabbix监控系统。没有在线软件仓库没有即时可用的依赖包甚至连最基本的文档查询都成了奢望。这正是许多金融、军工和政府机构运维团队的日常挑战。1. 离线环境的前期规划与准备1.1 构建离线资源仓库在离线环境中依赖管理是最大的痛点。我们需要的不仅是一个Zabbix安装包而是一个完整的离线生态系统。以下是构建离线资源仓库的关键步骤建立中转服务器选择一台可临时连接互联网的机器建议使用相同OS版本用于下载所有必要资源收集基础依赖# 示例CentOS环境下创建本地仓库 mkdir -p /opt/offline-repo/{rpms,src,tarballs} yum install yum-utils createrepo -y repotrack --download_path/opt/offline-repo/rpms \ libevent-devel net-snmp-devel mysql-devel \ pcre2 openssl-devel libxml2-devel libcurl-devel createrepo /opt/offline-repo/rpms获取Zabbix源码及组件Zabbix 6.4 LTS源码包对应版本的数据库初始化脚本Web前端依赖PHP 8.0、Nginx/Apache提示使用repotrack而非yumdownloader可以自动解决依赖关系确保下载完整的RPM树。1.2 环境一致性检查在隔离环境中版本冲突可能导致灾难性后果。建议制作环境检查清单检查项要求验证命令操作系统CentOS/RHEL 7.4cat /etc/redhat-release内存≥4GBfree -h存储/usr/local ≥10GBdf -hSELinux禁用或宽容模式getenforce防火墙开放10050/10051firewall-cmd --list-ports1.3 离线传输方案当网络隔离严格时需要考虑物理传输方式加密USB存储适用于小规模部署内部镜像仓库通过ISO镜像建立内网yum源专用传输设备如单向光闸等安全设备# 示例生成校验文件确保传输完整性 sha512sum zabbix-6.4.21.tar.gz zabbix-6.4.21.tar.gz.sha512 # 传输后验证 sha512sum -c zabbix-6.4.21.tar.gz.sha5122. 源码编译的深度实践2.1 依赖解析与静态编译在完全离线时编译选项的选择直接影响部署成败。关键配置参数解析./configure \ --prefix/usr/local/zabbix \ --enable-server \ --enable-agent \ --enable-static \ --with-mysql \ --with-net-snmp \ --with-libcurl \ --with-libxml2 \ --with-openssl注--enable-static可减少动态库依赖但会增加二进制体积常见依赖问题解决方案缺少OpenSSL头文件# 从离线仓库安装 rpm -ivh /opt/offline-repo/rpms/openssl-devel-*.rpmMySQL连接异常# 验证MySQL开发包 mysql_config --cflags --libs2.2 编译优化技巧在资源受限环境中这些技巧可提升编译效率并行编译make -j $(nproc)利用所有CPU核心选择性编译只构建必要组件调试符号分离make install-strip # 去除调试符号减小体积2.3 二进制验证编译完成后必须进行完整性检查# 检查动态库依赖 ldd /usr/local/zabbix/sbin/zabbix_server # 验证版本信息 /usr/local/zabbix/sbin/zabbix_server -V3. 数据库配置的高可用实践3.1 离线数据库初始化MySQL离线安装后的关键配置-- 创建专用表空间避免系统表空间膨胀 CREATE TABLESPACE zabbix_ts ADD DATAFILE zabbix_ts.ibd ENGINEInnoDB; -- 优化字符集配置 CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT TABLESPACE zabbix_ts;3.2 批量导入优化大数据量导入时的性能技巧# 调整MySQL配置 echo -e [mysqld]\nbulk_insert_buffer_size256M /etc/my.cnf # 分阶段导入 for sql_file in schema.sql images.sql data.sql; do mysql -uzabbix -p zabbix database/mysql/${sql_file} sleep 10 # 控制并发 done3.3 备份恢复方案离线环境必须考虑备份策略# 每日全量备份脚本 mysqldump -uzabbix -p --single-transaction --master-data2 \ --databases zabbix | gzip /backup/zabbix_db_$(date %F).sql.gz4. 前端部署的进阶配置4.1 PHP离线调优在没有互联网连接时PHP需要特殊配置; php.offline.ini [PHP] memory_limit 256M max_execution_time 300 post_max_size 32M upload_max_filesize 16M [Session] session.save_path /var/lib/php/session session.gc_probability 14.2 Nginx安全加固隔离环境中的Web服务器需要额外安全措施server { listen 80; server_name zabbix.internal; location /zabbix { root /usr/local/nginx/html; index index.php; # 禁止目录遍历 autoindex off; # 限制敏感文件访问 location ~* \.(ini|conf|sql)$ { deny all; } } # PHP-FPM配置 location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }4.3 主题与本地化离线环境下的中文支持方案从Windows系统复制中文字体如simsun.ttc转换字体格式mkfontscale mkfontdir fc-cache修改前端定义文件// include/defines.inc.php define(ZBX_FONT_NAME, simsun);5. 大规模Agent部署策略5.1 离线安装包制作创建自定义RPM包实现批量部署# zabbix-agent2-offline.spec Name: zabbix-agent2-offline Version: 6.4.21 Release: 1%{?dist} Summary: Custom Zabbix Agent2 for offline environments Requires: pcre2, openssl %install mkdir -p %{buildroot}%{_sysconfdir}/zabbix install -m 755 zabbix-agent2 %{buildroot}%{_sbindir}/ %files %config(noreplace) %{_sysconfdir}/zabbix/zabbix_agent2.conf %{_sbindir}/zabbix-agent25.2 配置自动化使用Ansible实现零接触部署# playbook-agent-deploy.yml - hosts: monitored_servers tasks: - name: Copy agent package copy: src: /opt/offline-repo/rpms/zabbix-agent2-offline.rpm dest: /tmp/ - name: Install agent yum: name: /tmp/zabbix-agent2-offline.rpm state: present - name: Configure agent template: src: templates/zabbix_agent2.conf.j2 dest: /etc/zabbix/zabbix_agent2.conf - name: Start service systemd: name: zabbix-agent2 state: started enabled: yes6. 监控系统自监控设计6.1 心跳检测机制在隔离网络中实现健康检查-- 创建心跳监控项 INSERT INTO items (itemid, hostid, name, key_, value_type) VALUES (90000, 10084, Offline Heartbeat, system.run[echo 1], 3); -- 设置触发器 INSERT INTO triggers (triggerid, description, expression, priority) VALUES (20000, Offline Environment Alive, {90000}0, 4);6.2 日志轮转策略长期运行时的日志管理方案# /etc/logrotate.d/zabbix /var/log/zabbix/*.log { daily missingok rotate 30 compress delaycompress notifempty create 640 zabbix zabbix sharedscripts postrotate /usr/bin/systemctl reload zabbix-server /dev/null 21 || true endscript }7. 离线升级与维护方案7.1 版本升级路径制定安全的升级策略在测试环境验证升级包准备回滚脚本#!/bin/bash # rollback-zabbix.sh systemctl stop zabbix-server mysqldump -uzabbix -p zabbix /backup/pre-upgrade.sql rpm -Uvh --oldpackage zabbix-server-6.4.21.rpm分阶段更新组件Server → Proxy → Agent7.2 配置版本控制使用Git管理配置变更# 初始化配置仓库 mkdir /etc/zabbix/.git cd /etc/zabbix git init git add zabbix_server.conf git commit -m Initial config for offline env在完成Zabbix离线部署后的三个月里我们逐渐发现了一些只有在这种特殊环境下才会出现的有趣现象。比如当所有监控项都正常但前端显示异常时最先应该检查的往往是Nginx的PHP缓存目录权限——这个经验让我们节省了至少20次不必要的故障排查时间。

更多文章