JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

博文|如何通过Docker实现自动扩容Zabbix监控平台?

wys521 2024-10-03 03:36:51 精选教程 21 ℃ 0 评论

本文介绍新的Zabbix高可用性的方法,并讨论在使用Docker Swarm、Docker、Gitlab和CI/CD等技术实现Zabbix时所面临的挑战。

本文是2020Zabbix全球峰会演讲主题,感谢译者Geekwolf。


目录?

一 Zabbix项目需求

二 高可用思路

01 HAProxy

02 NFS共享

03 Docker和Docker Swarm

04 反向代理Traefik

三 编排Compose文件并部署

01 反向代理

02 Zabbix Server

03 前端

04 部署

五 Gitlab CI/CD

六 总结


一 Zabbix项目需求

第一次使用Docker部署Zabbix是一个挑战,Zabbix环境需要满足一下要求:

  • NVPS(每秒写入新值数量)超过3000+
  • 具备容错能力
  • 具备弹性
  • 可以水平扩容环境


安装Zabbix有五种方法: 使用包安装、编译、Docker部署、云或设备。我们使用虚拟机或者物理服务器直接安装Zabbix。在这种情况下,有必要安装并更新操作系统以提高性能。然后在安装Zabbix,备份配置文件和数据库。

但是,在这种方案中,当Zabbix服务器或者Zabbix前端关闭时,服务将不可用,通常解决方案是人工干预重启或从备份中恢复重建新实例。

为了创建一个更加智能的环境,我们可以使用一些标准的解决方案如Corosync和Pacemaker。但是,对于Zabbix高可用性建设有更好的解决方案。


二 高可用新思路

Zabbix可以使用一下技术进行部署,例如:

  • Docker
  • Docker Swarm
  • 反向代理Traefik
  • Git
  • CI/CD

最初,Zabbix监控平台部署,被划分成多个组件:


01 HAProxy

HAProxy负责接收请求并转发定向到Docker Swarm集群节点。因此,每次请求Zabbix前端,都会先将请求发到HAProxy,HAProxy检测后端服务,并将请求转发定向到后端可用的节点。如果某个节点不可用,HAProxy将不再向这些节点发送请求。


HAProxy配置(haproxy.cfg)

使用HAProxy配置负载均衡器时,需要定义两个类型的节点:前端节点和后端节点。这里以Traefik服务为例进行说明:HAProxy监听前端节点的连接。

—在前端,配置端口以接收请求,并将后端与之关联

frontend traefik

mode http

bind 0.0.0.0:80

option forwardfor

monitor-uri /health

default_backend backend_traefik


—在后端,配置定义安全服务正在使用traefic服务、检查模式、运行服务的IP和端口

backend backend_traefik

mode http

cookie Zabbix prefix

server DOCKERHOST1 10.250.6.52:8080 cookie DOCKERHOST1 check

server DOCKERHOST2 10.250.6.53:8080 cookie DOCKERHOST2 check

server DOCKERHOST3 10.250.6.54:8080 cookie DOCKERHOST3 check

stats admin if TRUE

option tcp-check


—我们还可以定义Zabbix服务器可以运行的位置。在这里,我们只有一个Zabbix服务器容器在运行

frontend zabbix_server

mode tcp

bind 0.0.0.0:10051

default_backend backend_zabbix_server

backend backend_zabbix_server

mode tcp

server DOCKERHOST1 10.250.6.52:10051 check

server DOCKERHOST2 10.250.6.53:10051 check

server DOCKERHOST3 10.250.6.54:10051 check

stats admin if TRUE

option tcp-check


02 NFS共享

NFS服务器负责将存储的文件映射到容器中。


配置安装NFS

NFS服务的配置

mkdir /data/data-docker

vim /etc/exports

/data/data-docker/ *(rw,sync,no_root_squash,no_subtree_check)

NFS客户端配置

vim /etc/fstab :/data/data-docker /mnt/data-docker nfs defaults 0 0


03 Docker和Docker Swarm

Docker和Docker Swarm负责运行和编排容器。Swarm由一个或多个节点组成,集群可用分为两类:

  • 管理节点:负责维护集群状态、调度及为Swarm模式提供HTTP API服务
  • 工作节点:是Docker引擎的实例,为了执行容器


04 反向代理Traefik

反向代理是该方案当中另一个重要组件,负责接收HTTP和HTTPS请求,并转发重定向到后端可用的容器。本方案中,有三个Traefik容器。反向代理可以使用Nginx,也可以使用Traefik。


三 编排Compose文件并部署

编写文件docker-compose.yml——定义服务、网络和卷的YAML文件。在这个文件中,我们决定使用哪个Zabbix镜像、容器将连接到哪个网络、服务名称以及其他必要配置。


01 反向代理

下面是使用Traefik配置的反向代理示例:

traefik:

image: traefik:v2.2.8

deploy:

placement:

constraints:

- node.role == manager

replicas: 1

restart_policy:

condition: on-failure

labels:

# Dashboard traefik

- "traefik.enable=true"

-"traefik.http.services.justAdummyService.loadbalancer.server.port=1337"

- "traefik.http.routers.traefik.tls=true"

- "traefik.http.routers.traefik.rule=Host(`zabbix-traefik.mydomain`)"

- "traefik.http.routers.traefik.service=api@internal"



参数说明:

traefik: — 服务名字(第一行)

image: — 定义使用什么镜像

deploy: — 部署的创建规则

constraints: — 约束条件

replicas: — 给服务创建多少副本

restart_policy: — 如果服务有问题,使用什么策略

labels: — 为traefik定义标签,包括调用服务的规则


配置认证和HTTP跳转HTTPS

# Auth Dashboard - "traefik.http.routers.traefik.middlewares=traefik-auth" - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:"

# Redirect all HTTP to HTTPS permanently - "traefik.http.routers.http_catchall.rule=HostRegexp(`{any:.+}`)" - "traefik.http.routers.http_catchall.entrypoints=web" - "traefik.http.routers.http_catchall.middlewares=https_redirect" - "traefik.http.middlewares.https_redirect.redirectscheme.scheme=https" - "traefik.http.middlewares.https_redirect.redirectscheme.permanent=true"


最后,我们定义在容器启动后要执行的命令:

command:

- "--api=true"

- "--log.level=INFO"

- "--providers.docker.endpoint=unix:///var/run/docker.sock"

- "--providers.docker.swarmMode=true"

- "--providers.docker.exposedbydefault=false"

- "--providers.file.directory=/etc/traefik/dynamic"

- "--entrypoints.web.address=:80"

- "--entrypoints.websecure.address=:443"、


02 Zabbix Server

Zabbix服务器配置可以在这个环境中定义——Zabbix服务器的名称、镜像、操作系统等。

zabbix-server:

image: zabbix/zabbix-server-mysql:centos-5.0-latest

env_file:

- ./envs/zabbix-server/common.env

networks:

- "monitoring-network"

volumes:

- /mnt/data-docker/zabbix-server/externalscripts:/usr/lib/zabbix/externalscripts:ro

- /mnt/data-docker/zabbix-server/alertscripts:/usr/lib/zabbix/alertscripts:ro

ports:

- "10051:10051"

deploy:

<<: *template-deploy

labels:

- "traefik.enable=false"


在本例中,我们可以使用Zabbix 5.0。例如,在这里,我们可以定义数据库地址、数据库用户名、将要启动的轮询程序数量、外部脚本和警报脚本的路径以及其他选项。

在本例中,我们使用两个卷——用于外部脚本和必须存储在NFS服务器中的警报脚本。

对于这个Zabbix,服务器traefik没有启用。


03 Zabbix 前端

对于前端,我们有另外一个选择,使用Zabbix镜像:

zabbix-frontend:

image: zabbix/zabbix-web-nginx-mysql:alpine-5.0.1

env_file:

- ./envs/zabbix-frontend/common.env

networks:

- "monitoring-network"

deploy:

<<: *template-deploy

replicas: 5

labels:

- "traefik.enable=true"

- "traefik.http.routers.zabbix-frontend.tls=true"

- "traefik.http.routers.zabbix-frontend.rule=Host(`frontend.domain`)"

- "traefik.http.routers.zabbix-frontend.entrypoints=web"

- "traefik.http.routers.zabbix-frontend.entrypoints=websecure"

- "traefik.http.services.zabbix-frontend.loadbalancer.server.port=8080"


这里,5个副本意味着我们可以开始5个Zabbix前端。这可以用于更广泛的环境,这也意味着我们有5个容器和5个连接。

在这里,为了访问前端,我们可以使用' front '。域的名字。如果我们使用不同的名称,将无法访问前端。

5个副本,意味着我们有5个Zabbix 前段节点或容器;我们可以使用frontend.domain来访问前端。负载均衡器定义了容器监听的端口。


04 部署

到目前为止,部署都是手动完成的。你需要连接到一个具有Docker群管理功能的服务,进入NFS目录,并部署服务:

# docker stack deploy -c docker-compose.yaml zabbix

其中-c定义compose文件名和Stack名字:zabbix。


五 Gitlab CI/CD

使用CI/CD,不再需要手动运行来创建映像和部署服务。

1.为每个组件分别创建一个仓库:

  • Zabbix Server
  • Frontend Web
  • Zabbix Proxy

2.启用Piplines

3.创建.gitlab-ci.yml文件

六 总结

  • 如果Zabbix组件停止,Docker Swarm会自动启动一个新的服务或容器
  • 不需要连接到终端来启动环境
  • 部署简单
  • 管理维护简单

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表