Zabbix Docker 单机部署与 Docker 单机集群环境搭建指南

一、背景与需求分析

在云计算和容器化技术快速发展的背景下,Zabbix 作为开源监控解决方案,其 Docker 化部署成为提升运维效率的重要手段。单机部署适用于小型环境快速验证,而单机集群模式则通过容器编排实现高可用与弹性扩展。本文重点解决以下痛点:

  1. 传统部署方式依赖复杂的环境配置,Docker 化可简化流程
  2. 单机环境需要兼顾监控系统自监控与被监控对象的集成
  3. 集群模式需解决容器间通信、数据持久化等关键问题

二、基础环境准备

1. Docker 引擎安装

推荐使用最新稳定版 Docker CE:

  1. # Ubuntu/Debian 系统
  2. curl -fsSL https://get.docker.com | sh
  3. sudo usermod -aG docker $USER # 添加当前用户到docker组
  4. # CentOS/RHEL 系统
  5. sudo yum install -y yum-utils
  6. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  7. sudo yum install docker-ce docker-ce-cli containerd.io

验证安装:

  1. docker version
  2. sudo systemctl enable --now docker

2. Docker Compose 安装(推荐)

  1. sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. sudo chmod +x /usr/local/bin/docker-compose

三、Zabbix Docker 单机部署方案

1. 镜像选择策略

  • 官方镜像zabbix/zabbix-server-mysql(核心服务)
  • 数据库组件mysql:8.0zabbix/zabbix-sql-scripts
  • 前端组件zabbix/zabbix-web-nginx-mysql
  • 代理组件zabbix/zabbix-agent

2. 单机部署架构

  1. ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
  2. Zabbix │←──▶│ MySQL │←──▶│ Zabbix Web
  3. Server Database Nginx
  4. └─────────────┘ └─────────────┘ └─────────────┘
  5. ┌─────────────┐
  6. Zabbix
  7. Agent
  8. └─────────────┘

3. 部署实施步骤

3.1 创建 docker-compose.yml

  1. version: '3.8'
  2. services:
  3. mysql:
  4. image: mysql:8.0
  5. command: --default-authentication-plugin=mysql_native_password
  6. environment:
  7. MYSQL_ROOT_PASSWORD: zabbix_db_password
  8. MYSQL_DATABASE: zabbix
  9. MYSQL_USER: zabbix
  10. MYSQL_PASSWORD: zabbix_password
  11. volumes:
  12. - mysql_data:/var/lib/mysql
  13. networks:
  14. - zabbix_net
  15. zabbix-server:
  16. image: zabbix/zabbix-server-mysql:latest
  17. environment:
  18. DB_SERVER_HOST: mysql
  19. MYSQL_DATABASE: zabbix
  20. MYSQL_USER: zabbix
  21. MYSQL_PASSWORD: zabbix_password
  22. depends_on:
  23. - mysql
  24. networks:
  25. - zabbix_net
  26. zabbix-web:
  27. image: zabbix/zabbix-web-nginx-mysql:latest
  28. environment:
  29. DB_SERVER_HOST: mysql
  30. MYSQL_DATABASE: zabbix
  31. MYSQL_USER: zabbix
  32. MYSQL_PASSWORD: zabbix_password
  33. ZBX_SERVER_HOST: zabbix-server
  34. ports:
  35. - "8080:8080"
  36. - "8443:8443"
  37. depends_on:
  38. - mysql
  39. - zabbix-server
  40. networks:
  41. - zabbix_net
  42. zabbix-agent:
  43. image: zabbix/zabbix-agent:latest
  44. environment:
  45. ZBX_HOSTNAME: Zabbix server
  46. ZBX_SERVER_HOST: zabbix-server
  47. depends_on:
  48. - zabbix-server
  49. networks:
  50. - zabbix_net
  51. volumes:
  52. mysql_data:
  53. networks:
  54. zabbix_net:
  55. driver: bridge

3.2 启动服务

  1. docker-compose up -d

验证服务状态:

  1. docker-compose ps
  2. docker logs -f zabbix-server

3.3 初始配置

  1. 访问 http://localhost:8080
  2. 默认登录凭证:Admin/zabbix
  3. 配置自监控项:
    • 添加主机:Zabbix server
    • 链接模板:Template OS Linux

四、Docker 单机集群扩展方案

1. 集群架构设计

  1. ┌───────────────────────┐ ┌───────────────────────┐
  2. Zabbix Server #1 │ │ Zabbix Server #2 │
  3. (Primary) (Secondary)
  4. └───────────────┬───────┘ └───────────────┬───────┘
  5. ┌───────────────▼───────┐ ┌───────────────▼───────┐
  6. MySQL Cluster (Galera)│ Shared Storage
  7. └───────────────────────┘ └───────────────────────┘

2. 集群实现方式

2.1 使用 Docker Swarm(轻量级方案)

  1. # 初始化Swarm
  2. docker swarm init
  3. # 创建overlay网络
  4. docker network create --driver overlay zabbix-cluster-net
  5. # 部署服务
  6. docker service create \
  7. --name zabbix-server \
  8. --network zabbix-cluster-net \
  9. --replicas 2 \
  10. --env DB_SERVER_HOST=mysql-cluster \
  11. zabbix/zabbix-server-mysql

2.2 使用 Kubernetes(企业级方案)

  1. # zabbix-deployment.yaml 示例
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: zabbix-server
  6. spec:
  7. replicas: 2
  8. selector:
  9. matchLabels:
  10. app: zabbix-server
  11. template:
  12. metadata:
  13. labels:
  14. app: zabbix-server
  15. spec:
  16. containers:
  17. - name: zabbix-server
  18. image: zabbix/zabbix-server-mysql
  19. env:
  20. - name: DB_SERVER_HOST
  21. value: "mysql-cluster"
  22. - name: ZBX_SERVER_NAME
  23. valueFrom:
  24. fieldRef:
  25. fieldPath: metadata.name

3. 数据持久化方案

3.1 共享存储配置

  1. volumes:
  2. zabbix-data:
  3. driver: local
  4. driver_opts:
  5. type: nfs
  6. o: addr=192.168.1.100,rw
  7. device: ":/path/to/zabbix_data"

3.2 数据库集群配置

使用 Galera Cluster 实现 MySQL 高可用:

  1. services:
  2. mysql-node1:
  3. image: percona/percona-xtradb-cluster:8.0
  4. environment:
  5. CLUSTER_NAME: zabbix-mysql-cluster
  6. WSREP_NODE_NAME: node1
  7. WSREP_NODE_ADDRESS: mysql-node1
  8. command: --wsrep-new-cluster
  9. mysql-node2:
  10. image: percona/percona-xtradb-cluster:8.0
  11. environment:
  12. CLUSTER_NAME: zabbix-mysql-cluster
  13. WSREP_NODE_NAME: node2
  14. WSREP_NODE_ADDRESS: mysql-node2
  15. depends_on:
  16. - mysql-node1

五、运维管理最佳实践

1. 监控指标收集

  1. # 收集Docker容器指标
  2. docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
  3. # Zabbix API调用示例
  4. curl -X POST -H "Content-Type: application/json" \
  5. -d '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid","name"]},"auth":"<auth_token>","id":1}' \
  6. http://zabbix-server/api_jsonrpc.php

2. 备份策略

  1. # 数据库备份
  2. docker exec -it mysql_container mysqldump -uzabbix -pzabbix_password zabbix > zabbix_backup.sql
  3. # 容器配置备份
  4. docker inspect zabbix-server > zabbix-server-config.json

3. 性能调优参数

组件 关键参数 推荐值
Zabbix Server StartPollers CPU核心数×2
MySQL innodb_buffer_pool_size 可用内存的70%
Nginx worker_processes auto

六、常见问题解决方案

1. 容器启动失败排查

  1. # 检查容器日志
  2. docker logs zabbix-server --tail 100
  3. # 检查资源限制
  4. docker stats zabbix-server
  5. # 常见原因:
  6. # - 数据库连接失败(检查环境变量)
  7. # - 磁盘空间不足(检查/var/lib/docker)
  8. # - 端口冲突(使用netstat -tulnp检查)

2. 集群同步问题

  1. # 检查Galera集群状态
  2. docker exec -it mysql-node1 mysql -e "SHOW STATUS LIKE 'wsrep%'"
  3. # 常见问题:
  4. # - 网络分区(检查防火墙规则)
  5. # - 数据不一致(执行pt-table-checksum)
  6. # - 节点无法加入(检查wsrep_cluster_address)

七、总结与展望

通过 Docker 实现 Zabbix 的单机部署与集群扩展,可显著提升监控系统的灵活性和可维护性。实际部署时应重点关注:

  1. 数据持久化方案的可靠性
  2. 集群节点间的网络延迟
  3. 监控指标的采集频率与存储周期的平衡

未来发展方向包括:

  • 与 Prometheus/Grafana 监控体系的集成
  • 基于 Service Mesh 的服务发现
  • AI 驱动的异常检测与自动修复

建议定期进行容器镜像更新和集群健康检查,确保监控系统本身的稳定性。对于大型环境,可考虑使用 Zabbix Proxy 实现分布式监控架构。