多表格合并一起
864
2025-04-03
本文介紹新的Zabbix高可用性的方法,并討論在使用Docker Swarm、Docker、Gitlab和CI/CD等技術(shù)實(shí)現(xiàn)Zabbix時所面臨的挑戰(zhàn)。
本文是2020Zabbix全球峰會演講主題,感謝譯者Geekwolf。
目錄
一 Zabbix項(xiàng)目需求
二 高可用思路
01 HAProxy
02 NFS共享
03 Docker和Docker Swarm
04 反向代理Traefik
三 編排Compose文件并部署
01 反向代理
02 Zabbix Server
03 前端
04 部署
五 Gitlab CI/CD
六 總結(jié)
一 Zabbix項(xiàng)目需求
第一次使用Docker部署Zabbix是一個挑戰(zhàn),Zabbix環(huán)境需要滿足一下要求:
NVPS(每秒寫入新值數(shù)量)超過3000+
具備容錯能力
具備彈性
可以水平擴(kuò)容環(huán)境
安裝Zabbix有五種方法: 使用包安裝、編譯、Docker部署、云或設(shè)備。我們使用虛擬機(jī)或者物理服務(wù)器直接安裝Zabbix。在這種情況下,有必要安裝并更新操作系統(tǒng)以提高性能。然后在安裝Zabbix,備份配置文件和數(shù)據(jù)庫。
但是,在這種方案中,當(dāng)Zabbix服務(wù)器或者Zabbix前端關(guān)閉時,服務(wù)將不可用,通常解決方案是人工干預(yù)重啟或從備份中恢復(fù)重建新實(shí)例。
為了創(chuàng)建一個更加智能的環(huán)境,我們可以使用一些標(biāo)準(zhǔn)的解決方案如Corosync和Pacemaker。但是,對于Zabbix高可用性建設(shè)有更好的解決方案。
二 高可用新思路
Zabbix可以使用一下技術(shù)進(jìn)行部署,例如:
Docker
Docker Swarm
反向代理Traefik
Git
CI/CD
最初,Zabbix監(jiān)控平臺部署,被劃分成多個組件:
01 HAProxy
HAProxy負(fù)責(zé)接收請求并轉(zhuǎn)發(fā)定向到Docker Swarm集群節(jié)點(diǎn)。因此,每次請求Zabbix前端,都會先將請求發(fā)到HAProxy,HAProxy檢測后端服務(wù),并將請求轉(zhuǎn)發(fā)定向到后端可用的節(jié)點(diǎn)。如果某個節(jié)點(diǎn)不可用,HAProxy將不再向這些節(jié)點(diǎn)發(fā)送請求。
HAProxy配置(haproxy.cfg)
使用HAProxy配置負(fù)載均衡器時,需要定義兩個類型的節(jié)點(diǎn):前端節(jié)點(diǎn)和后端節(jié)點(diǎn)。這里以Traefik服務(wù)為例進(jìn)行說明:HAProxy監(jiān)聽前端節(jié)點(diǎn)的連接。
—在前端,配置端口以接收請求,并將后端與之關(guān)聯(lián)
frontend traefik mode http bind 0.0.0.0:80 option forwardfor monitor-uri /health default_backend backend_traefik
—在后端,配置定義安歇服務(wù)正在使用traefic服務(wù)、檢查模式、運(yùn)行服務(wù)的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服務(wù)器可以運(yùn)行的位置。在這里,我們只有一個Zabbix服務(wù)器容器在運(yùn)行
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服務(wù)器負(fù)責(zé)將存儲的文件映射到容器中。
配置安裝NFS
NFS服務(wù)的配置
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負(fù)責(zé)運(yùn)行和編排容器。Swarm由一個或多個節(jié)點(diǎn)組成,集群可用分為兩類:
管理節(jié)點(diǎn):負(fù)責(zé)維護(hù)集群狀態(tài)、調(diào)度及為Swarm模式提供HTTP API服務(wù)
工作節(jié)點(diǎn):是Docker引擎的實(shí)例,為了執(zhí)行容器
04 反向代理Traefik
反向代理是該方案當(dāng)中另一個重要組件,負(fù)責(zé)接收HTTP和HTTPS請求,并轉(zhuǎn)發(fā)重定向到后端可用的容器。本方案中,有三個Traefik容器。反向代理可以使用Nginx,也可以使用Traefik。
三 編排Compose文件并部署
編寫文件docker-compose.yml——定義服務(wù)、網(wǎng)絡(luò)和卷的YAML文件。在這個文件中,我們決定使用哪個Zabbix鏡像、容器將連接到哪個網(wǎng)絡(luò)、服務(wù)名稱以及其他必要配置。
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"
參數(shù)說明:
traefik: — 服務(wù)名字(第一行)
image: — 定義使用什么鏡像
deploy: — 部署的創(chuàng)建規(guī)則
constraints: — 約束條件
replicas: — 給服務(wù)創(chuàng)建多少副本
restart_policy: — 如果服務(wù)有問題,使用什么策略
labels: — 為traefik定義標(biāo)簽,包括調(diào)用服務(wù)的規(guī)則
配置認(rèn)證和HTTP跳轉(zhuǎn)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"
最后,我們定義在容器啟動后要執(zhí)行的命令:
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服務(wù)器配置可以在這個環(huán)境中定義——Zabbix服務(wù)器的名稱、鏡像、操作系統(tǒng)等。
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。例如,在這里,我們可以定義數(shù)據(jù)庫地址、數(shù)據(jù)庫用戶名、將要啟動的輪詢程序數(shù)量、外部腳本和警報腳本的路徑以及其他選項(xiàng)。
在本例中,我們使用兩個卷——用于外部腳本和必須存儲在NFS服務(wù)器中的警報腳本。
對于這個Zabbix,服務(wù)器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前端。這可以用于更廣泛的環(huán)境,這也意味著我們有5個容器和5個連接。
在這里,為了訪問前端,我們可以使用’ front '。域的名字。如果我們使用不同的名稱,將無法訪問前端。
5個副本,意味著我們有5個Zabbix 前段節(jié)點(diǎn)或容器;我們可以使用frontend.domain來訪問前端。負(fù)載均衡器定義了容器監(jiān)聽的端口。
04 部署
到目前為止,部署都是手動完成的。你需要連接到一個具有Docker群管理功能的服務(wù),進(jìn)入NFS目錄,并部署服務(wù):
# docker stack deploy -c docker-compose.yaml zabbix
其中-c定義compose文件名和Stack名字:zabbix。
五 Gitlab CI/CD
使用CI/CD,不再需要手動運(yùn)行來創(chuàng)建映像和部署服務(wù)。
1.為每個組件分別創(chuàng)建一個倉庫:
Zabbix Server
Frontend Web
Zabbix Proxy
2.啟用Piplines
3.創(chuàng)建.gitlab-ci.yml文件
六 總結(jié)
如果Zabbix組件停止,Docker Swarm會自動啟動一個新的服務(wù)或容器
不需要連接到終端來啟動環(huán)境
部署簡單
管理維護(hù)簡單
Docker Zabbix
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。