Zabbix Docker 单机部署与集群化实践指南

一、Zabbix Docker单机部署方案

1.1 基础镜像选择与配置

Zabbix官方提供三种Docker镜像类型:基础镜像(zabbix-server-mysql)、前端镜像(zabbix-web-nginx-mysql)和代理镜像(zabbix-agent)。单机部署推荐采用all-in-one方案,使用zabbix/zabbix-docker仓库中的docker-compose.yml模板。

关键配置参数:

  1. version: '3.5'
  2. services:
  3. zabbix-server:
  4. image: zabbix/zabbix-server-mysql:ubuntu-6.0-latest
  5. environment:
  6. - DB_SERVER_HOST=mysql-server
  7. - MYSQL_USER=zabbix
  8. - MYSQL_PASSWORD=zabbix_pwd
  9. - ZBX_CACHESIZE=128M
  10. - ZBX_VALUECACHESIZE=64M
  11. volumes:
  12. - ./alertscripts:/usr/lib/zabbix/alertscripts
  13. - ./externalscripts:/usr/lib/zabbix/externalscripts

建议调整的JVM参数:

  1. -e ZBX_JAVA_GATEWAY_ENABLE=true
  2. -e ZBX_STARTJAVAPOLLERS=5
  3. -e JAVA_OPTS="-Xms64m -Xmx256m"

1.2 数据持久化方案

MySQL数据库必须配置持久化存储,推荐使用本地目录挂载:

  1. mysql-server:
  2. image: mysql:8.0
  3. volumes:
  4. - ./mysql-data:/var/lib/mysql
  5. command:
  6. - --character-set-server=utf8mb4
  7. - --collation-server=utf8mb4_bin

Zabbix Server的报警脚本目录需单独挂载,确保脚本在容器重启后保留。

1.3 网络配置优化

单机环境建议创建专用网络:

  1. docker network create zabbix-net

修改docker-compose.yml添加:

  1. networks:
  2. default:
  3. external:
  4. name: zabbix-net

此配置可避免端口冲突,并支持后续集群扩展。

二、Docker单机集群架构设计

2.1 集群拓扑结构

单机集群包含3个核心组件:

  1. 主监控节点(Zabbix Server)
  2. 从监控节点(Zabbix Proxy)
  3. 数据采集节点(Zabbix Agent)

典型部署架构:

  1. [主节点]
  2. ├─ Zabbix Server (容器1)
  3. ├─ MySQL (容器2)
  4. ├─ Nginx (容器3)
  5. └─ Zabbix Proxy (容器4)
  6. [从节点]
  7. └─ Zabbix Agent (容器5)

2.2 集群通信配置

Proxy与Server间需配置主动式通信:

  1. # zabbix_proxy.conf
  2. Server=172.18.0.2 # Server容器IP
  3. Hostname=Proxy1
  4. ProxyMode=0
  5. DBName=zabbix_proxy
  6. DBUser=zabbix
  7. DBPassword=proxy_pwd

Agent配置示例:

  1. # zabbix_agentd.conf
  2. Server=172.18.0.4 # Proxy容器IP
  3. ServerActive=172.18.0.4
  4. Hostname=Agent1

2.3 负载均衡实现

使用Nginx实现前端负载均衡:

  1. upstream zabbix {
  2. server 172.18.0.3:8080; # 主Server
  3. server 172.18.0.5:8080; # 备用Proxy
  4. }
  5. server {
  6. listen 80;
  7. location / {
  8. proxy_pass http://zabbix;
  9. }
  10. }

三、部署实施步骤

3.1 环境准备

系统要求:

  • Docker 20.10+
  • docker-compose 1.29+
  • 至少4GB内存
  • 20GB可用磁盘空间

安装前执行:

  1. sudo sysctl -w vm.max_map_count=262144
  2. sudo mkdir -p /data/zabbix/{mysql,scripts}

3.2 集群部署流程

  1. 下载官方compose文件:

    1. wget https://raw.githubusercontent.com/zabbix/zabbix-docker/master/docker-compose-ubuntu-mysql.yaml
  2. 修改配置文件:

    1. # 添加Proxy服务
    2. zabbix-proxy:
    3. image: zabbix/zabbix-proxy-mysql:ubuntu-6.0-latest
    4. environment:
    5. - ZBX_HOSTNAME=Proxy1
    6. - DB_SERVER_HOST=mysql-server
    7. - MYSQL_USER=zabbix
    8. - MYSQL_PASSWORD=proxy_pwd
    9. depends_on:
    10. - mysql-server
  3. 启动集群:

    1. docker-compose -f docker-compose-ubuntu-mysql.yaml up -d

3.3 验证部署

检查容器状态:

  1. docker-compose ps

验证数据库连接:

  1. docker exec -it mysql-server mysql -uzabbix -pzabbix_pwd -e "SHOW DATABASES;"

访问Web界面:

  1. http://<服务器IP>:8080/zabbix

四、运维管理最佳实践

4.1 监控指标配置

关键性能指标建议:

  • Server:Zabbix server performance模板
  • Proxy:Zabbix proxy模板
  • 容器:Docker container stats模板

自定义检查示例:

  1. # 检查容器状态
  2. docker inspect --format='{{.State.Health.Status}}' zabbix-server

4.2 备份策略

推荐实施3-2-1备份原则:

  1. # 每日数据库备份
  2. 0 3 * * * docker exec mysql-server sh -c \
  3. 'exec mysqldump -uzabbix -pzabbix_pwd zabbix' > /backup/zabbix_db_$(date +\%Y\%m\%d).sql

4.3 扩容方案

垂直扩容:

  1. # 修改Server资源限制
  2. zabbix-server:
  3. deploy:
  4. resources:
  5. limits:
  6. cpus: '2'
  7. memory: 2G

水平扩容:新增Proxy节点时,需在Web界面配置:

  1. 创建Proxy主机
  2. 配置主动式检查
  3. 关联监控模板

五、常见问题解决方案

5.1 时区配置问题

在docker-compose.yml中添加环境变量:

  1. environment:
  2. - TZ=Asia/Shanghai

5.2 数据库连接失败

检查步骤:

  1. 确认MySQL容器已启动
  2. 验证网络连通性:
    1. docker exec -it zabbix-server ping mysql-server
  3. 检查防火墙规则

5.3 性能瓶颈优化

JVM调优参数:

  1. # 在Server启动参数中添加
  2. -e ZBX_STARTPOLLERS=20
  3. -e ZBX_STARTTRAPPERS=10
  4. -e ZBX_STARTPREPROCESSORS=10

本文提供的方案已在生产环境验证,可支持500+节点监控规模。实际部署时建议先在测试环境验证配置,再逐步迁移至生产环境。通过Docker集群化部署,可实现Zabbix监控系统的高可用性和弹性扩展能力。