单页背景(单页背景怎么弄)
716
2022-05-30
本文介绍新的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会自动启动一个新的服务或容器
不需要连接到终端来启动环境
部署简单
管理维护简单
Docker Zabbix
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。