图片
蔡斯 | Zabbix开源社区签约专家

Zabbix资深玩家,SRE高级运维,架构师。精通服务组件监控、模板制作及告警治理。

擅长领域:Zabbix API定制化开发,对接企业蓝鲸,JMS保垒机等运维资产管理。

万众瞩目的Zabbix6.0 LTS发布在即,官网同步开放了Beta版支持多种部署方式供大家尝鲜。

本文分享在单机Docker环境中快速构建Zabbix容器化集群,带你走进全新的原生HA集群,你将获得如下知识:

图片

  1. 写在前面
    1.1. Zabbix6.0新功能
    Zabbix6.0LTS是Zabbix5.2,5.4以及Zabbix6.0 LTS中直接引入的特性的组合,主要功能:

更先进的机器学习、统计分析功能、更强大的异常检测

物联网监控、多数据中心监控、定时报表

双因素身份验证、单点登录、用户权限精细化到UI颗粒度

提供HA选项和负载均衡Zabbix UI和API,K8s和OpenShift开箱即监控、监控任何对象

1.2 部署环境约定
系统版本

环境 版本
宿主架构(Arch) x86_64
宿主系统(System) Ubuntu 20.04
容器系统(System) Alpine 3.15.0
容器引擎(Docker) 20.10.12
软件版本

角色名称 版本 端口
Zabbix-Web v6.0rc1 80
Zabbix-MySQL v8.0.27 3006
Zabbix-Agent v6.0rc1 10050
Zabbix-Web-Service v6.0rc1 10053
Zabbix-Server-Master01 v6.0rc1 10051
Zabbix-Server-Master02 v6.0rc1 20051
Zabbix-Server-Master03 v6.0rc1 30051
2. Docker引擎
本章节通过Ubuntu环境(普通用户),快速安装配置Docker引擎。如你已具备此环境且端口不被占用,可直接跳至Zabbix组件部署章节。

2.1. 系统初始化
优化资源配额、替换Ubuntu源、更新系统

sudo sed -i ‘/^# End of file/,$d’ /etc/security/limits.conf
sudo sh -c "cat >> /etc/security/limits.conf <<EOF

End of file

root - nproc 512000

    • nproc 512000
      root - nofile 512000
    • nofile 512000
      EOF"
      ulimit -SHn 51200
      ulimit -SHu 51200
      ulimit -u -n
      sudo sed -i.bak ‘s/http://.*.ubuntu.com/http://mirrors.aliyun.com/g’ /etc/apt/sources.list
      sudo apt-get update && sudo apt-get upgrade -y
      2.2. 添加GPG密钥
      卸载旧版本、安装依赖包、添加GPG密钥

sudo apt-get remove docker docker-engine docker.io containerd runc && sudo rm -rf /var/lib/docker && sudo rm -rf /var/lib/containerd
sudo apt-get -y install apt-transport-https ca-certificates curl gnupg software-properties-common lsb-release
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
2.3. 开启路由和内核参数
尽管有些系统默认开启包转发功能和内核参数,稳妥起见,这里再次配置加载

sudo modprobe br_netfilter
sudo sh -c ‘echo “modprobe br_netfilter” >> /etc/profile’
sudo sh -c ‘cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF’
sudo sysctl -p /etc/sysctl.d/docker.conf
2.4. 安装配置
添加Docker软件源、安装docker、配置镜像加速、配置免sudo

sudo echo “deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
sudo sh -c ‘cat > /etc/docker/daemon.json<< EOF
{
“registry-mirrors”: [
“https://hub-mirror.c.163.com”,
“https://mirror.baidubce.com”
]
}
EOF’
sudo usermod -aG docker [你的用户名]
sudo systemctl daemon-reload
sudo systemctl restart docker
2.5. 验证
验证Docker镜像加速源、基本使用功能

docker info |grep “Registry Mirrors:” -A 2
docker run hello-world
3. Zabbix组件
以下介绍如何通过Docker快速创建Zabbix6.0 容器化集群的组件。

3.1. 创建子网
创建Zabbix组件虚拟子网:Zabbix-Subnet

docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 Zabbix-Subnet
3.2. MySQL容器
选择MySQL8.0作为Zabbix后端数据库。

docker run --name Zabbix-MySQL -t
–restart unless-stopped
–network=Zabbix-Subnet
-e MYSQL_DATABASE=“zabbix”
-e MYSQL_USER=“zabbix”
-e MYSQL_PASSWORD=“zabbix_pw”
-e MYSQL_ROOT_PASSWORD=“root_pw”
-v /etc/localtime:/etc/localtime:ro
-d mysql:8.0
–character-set-server=utf8
–collation-server=utf8_bin
–default-authentication-plugin=mysql_native_password
通过检索MySQL容器日志docker logs Zabbix-MySQL | grep ready 过滤到reday相关日志,表示MySQL状态已准备就绪:

2022-01-21T09:36:12.157456Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: ‘8.0.27’

MySQL容器参数说明

参数 作用
character-set-server MySQL默认字符集
collation-server MySQL默认排序
default-authentication-plugin 默认用户加密规则
3.3. Adminer容器
Adminer容器是一款基于PHP编写的MySQL开源UI管理工具。

docker run --name MySQL-Adminer -t
–restart always
–network=Zabbix-Subnet
-v /etc/localtime:/etc/localtime:ro
-p 8080:8080
-d adminer:latest
访问测试

打开Chrome浏览器访问http://<your_hostip>:8080,输入Zabbix-MySQL作为服务器,root用户及密码MYSQL_ROOT_PASSWORD登录,不出意外如下图所示。

图片

3.4. Zabbix-Web-Service容器
Zabbix-Web-Service在Zabbix5.4版中首次出现,基于Go编写。主要作用是定期发送巡检报告到指定邮件账户,对运维服务台、值班人员有一定帮助。

docker run --name Zabbix-Web-Service -t
–restart unless-stopped
–network=Zabbix-Subnet
-e ZBX_ALLOWEDIP=“Zabbix-Server-Master01,Zabbix-Server-Master02,Zabbix-Server-Master03”
-e ZBX_LISTENPORT=10053
-v /etc/localtime:/etc/localtime:ro
–cap-add=SYS_ADMIN
-d zabbix/zabbix-web-service:alpine-trunk
Zabbix-Web-Service容器参数说明

参数 作用
ZBX_ALLOWEDIP Zabbix服务器和Zabbix代理的IP或DNS名称。
ZBX_LISTENPORT Zabbix-Web-Service监听的端口
3.5. ZabbixServer容器
本环境通过配置监听不同端口,创建3个Zabbix Server Node节点,仅作演示HA集群用,即伪集群。

1)创建 Zabbix-Server-Master01

docker run --name Zabbix-Server-Master01 -t --restart unless-stopped --network=Zabbix-Subnet --hostname=“Zabbix-Server-Master01” -e ZBX_LISTENPORT=10051 -e ZBX_NODEADDRESSPORT=10051 -e DB_SERVER_HOST=“Zabbix-MySQL” -e MYSQL_DATABASE=“zabbix” -e MYSQL_USER=“zabbix” -e MYSQL_PASSWORD=“zabbix_pw” -e ZBX_STARTREPORTWRITERS=“2” -e ZBX_WEBSERVICEURL=“http://Zabbix-Web-Service:10053/report” -e ZBX_AUTOHANODENAME=fqdn -e ZBX_AUTONODEADDRESS=fqdn -e ZBX_TIMEOUT=“30” -e ZBX_UNREACHABLEPERIOD=“120” -v /etc/localtime:/etc/localtime:ro --link Zabbix-Agent --link Zabbix-MySQL --link Zabbix-Web-Service -d zabbix/zabbix-server-mysql:alpine-trunk
命令换行注释:红框内的变量(4个),请务必按软件版本约定中的角色及端口对号入座。

图片

通过docker logs -f Zabbix-Server-Master01,我们可以看到此时ZabbixServer进入HA管理模式,且此节点成了Active模式。

图片

2)创建 Zabbix-Server-Master02
考虑到篇幅原因,创建命令修改红框内的变量即可
3)创建 Zabbix-Server-Master03
考虑到篇幅原因,创建命令修改红框内的变量即可

ZabbixServer容器参数说明

参数 作用
hostname 容器主机名
DB_SERVER_HOST MySQL主机名
ZBX_LISTENPORT ZbxSvr监听端口
ZBX_STARTREPORTWRITERS ZbxWebSvr进程数
ZBX_WEBSERVICEURL ZbxWebSvr地址
ZBX_AUTOHANODENAME 当前ZbxHA节点名
ZBX_AUTONODEADDRESS 当前ZbxHA地址
ZBX_NODEADDRESSPORT 当前ZbxHA端口
3.6. Zabbix-Agent容器
为减少篇幅,本环境创建1个Zabbix Agent作演示HA集群用。

docker run --name Zabbix-Agent -t --restart unless-stopped --network=Zabbix-Subnet -e ZBX_HOSTNAME=“Zabbix server” -e ZBX_SERVER_HOST=“Zabbix-Server-Master01” -e ZBX_SERVER_PORT=“10051” -e ZBX_ACTIVESERVERS=“Zabbix-Server-Master02:20051,Zabbix-Server-Master03:30051” -e ZBX_PASSIVESERVERS=“Zabbix-Server-Master02,Zabbix-Server-Master03” --link “Zabbix-Server-Master01” --link “Zabbix-Server-Master02” --link “Zabbix-Server-Master03” -v /etc/localtime:/etc/localtime:ro --privileged -d zabbix/zabbix-agent2:alpine-trunk
Zabbix-Agent容器参数说明

参数 作用
ZBX_HOSTNAME ZabbixAgent主机名
ZBX_SERVER_HOST 第一个ZabbixServerIP或FQDN
ZBX_SERVER_PORT 第一个ZabbixServer的端口
ZBX_ACTIVESERVERS 主动模式下ZabbixServerIP或FQDN列表
ZBX_PASSIVESERVERS 被动模式下ZabbixServerIP或FQDN列表
3.7. Zabbix-Web容器
docker run --name Zabbix-Web -t --restart unless-stopped --network=Zabbix-Subnet -e PHP_TZ=“Asia/Shanghai” -e DB_SERVER_HOST=“Zabbix-MySQL” -e MYSQL_DATABASE=“zabbix” -e MYSQL_USER=“zabbix” -e MYSQL_PASSWORD=“zabbix_pw” -e MYSQL_ROOT_PASSWORD=“root_pw” --link Zabbix-MySQL --link Zabbix-Agent --link Zabbix-Server-Master01 --link Zabbix-Server-Master02 --link Zabbix-Server-Master03 -e ZBX_TIMEOUT=“30” -e ZBX_UNREACHABLEPERIOD=“120” -v /etc/localtime:/etc/localtime:ro -p 80:8080 -d zabbix/zabbix-web-nginx-mysql:alpine-trunk
通过docker logs -f Zabbix-Web | grep ready查看容器日志,出现字样如下,表示Web端正常工作。

[21-Jan-2022 16:08:22] NOTICE: ready to handle connections

3.8. 小结
通过以上操作,我们共创建了8个容器。

图片

  1. 集群体验
    4.1. 集群介绍
    登录Web端
    打开Chrome浏览器访问http://<your_hostip>:80,默认账密:Admin/zabbix。So,现在开始我们的HA集群之旅吧~

图片

更改Interfaces接口类型

Zabbix server主机默认使用IP模式监控且地址指向127.0.0.1。这里使用DNS名称方式,注意和红框两处信息保持一致即可。

图片

集群列表

通过左侧导航栏,点击Reports->System information查看页面下方集群状态,其中Zabbix-Server-Master01状态为Active活跃状态,同时Runnig的Server也指向Zabbix-Server-Master01,其他节点为Standby备用状态。

图片

4.2. 模拟故障
首先确认Zabibx server数据正常收集,证明主节点正常工作,时间点为:2021-01-20 15:27:18

图片

手动停止docker stop Zabbix-Server-Master01,等待1min左右,仪表盘出现告警信息。

图片

新开一个标签页,再次访问集群状态的控件,看到Zabbix-Server-Master02替代Zabbix-Server-Master01成为Active节点并上升到第1位,说明集群已完成切换。

图片

再次点击获取Zabibx server的最新数据,时间点为:2021-01-20 15:31:08,说明新的主节点Zabbix-Server-Master02正常工作。

图片

至此,Zabbix6.0原生HA集群”故障自动转移“功能,亲测通过!!!

4.3. 原理剖析
在Zabbix6.0 高可用集群中,一共定义了4种节点状态,定义及区别如下:

状态 说明
Active 当前活动的节点。一次只能激活一个节点
Standby 节点当前在待机模式下运行。多个节点可以具有此状态。
Stopped 之前检测到该节点,但已正常关闭。
Unreachable 之前检测到节点,但在没有关闭的情况下意外丢失。
Zabbix Agent端在HA模式下的工作方式

跟大多数HA集群一样,Agent客户端通过配置多个Server节点。当主节点不可用时,主动模式下会重试配置列表中的其他节点并询问是不是它重新接管,如不是,则会重试下一个节点直至找到。如是,则将数据推送给它。

Zabbix Web端在HA模式下的工作方式

通过模拟将HA集群中的Active节点正常关闭,前端节点会从Standby节点中选1个节点作为Active节点接管集群。

图片

引用官方一张图,它的原理通过前端节点连接到Zabbix后端数据库,定时读取当前活动节点的地址,继续保持和该节点关系.

Zabbix6.0 HA集群设计所有节点每5秒将它们的心跳发送到Zabbix数据库后端。如果一个Active节点被正常维护而停止,其他Standby节点将在5秒后开始接管。

Zabbix Server端在HA模式下的工作方式

通过bash进入Zabbix Active容器节点,将HA Manager进程强行Kill掉。等待Fail-Over Delay指定的1min后,Zabbix Active节点进入Unreachable状态。

通过UI工具查询数据库

图片

以上可得知,在ZabbixHA集群数据表中,其Status列对应值关系如下

状态名(Status) 状态码(Code)
Standby 0
Stopped 1
Unreachable 2
Active 3
原生HA集群设计故障转移延迟为1分钟,即备用节点将等待1分钟,让故障的活动节点更新其状态,如果在1分钟内活动节点仍然不可见,则备用节点将接管。

5.0. 文章小结
如今,许多大型公司都在积极参与数字化转型。当他们想迁移现有基础设施以使其更好、更灵活和更具成本效益时,Zabbix显然可以成为他们数字化转型的重要组成部分。

这完全得益于,Zabbix配置灵活、高度集成、监控万象的人性化特点。

五分钟带你玩转Zabbix6.0容器化HA集群相关推荐

  1. 五分钟带你玩转elasticsearch(二十二)logback获取bootstrap.yml配置,统一管理es配置

    注意 application.yml名需要更改成bootstrap.yml logback配置文件名称为logback-spring.xml 否则在启动时会报错 查找不到bootstrap.yml中的 ...

  2. 五分钟带你玩转docker(三)全网最新最简单docker安装方式,楼主亲测

    1.安装docker (1)卸载以前安装的Docker容器 sudo yum remove docker \ docker-client \ docker-client-latest \docker- ...

  3. 五分钟带你玩转SpringSecurity(四)配置全解析,带你掌握security核心要点

    1认证 认证:辨别用户是否本系统用户. 优势:1 提供多样式的加密方法 2 提供多样式的用户存储方式 3 使用者无需关注验证封装业务 只需要提供查询方法即可 4 多样式的认证方式 5 提供用户信息获取 ...

  4. c++ map用法_Python专题——五分钟带你了解map、reduce和filter

    点击上方蓝字,和我一起学技术.今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter.不知道大家看到map和reduce的时候有没有什么 ...

  5. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  6. 来吧,1分钟带你玩转Kafka

    [摘要] Kafka让人又爱又恨?来吧,一分钟带你玩转它 说起Kafka,许多使用者对它是又爱又恨.Kafka是一种分布式的.基于发布/订阅的消息系统,其极致体验让人欲罢不能,但操心的运维.复杂的安全 ...

  7. 深入浅出学大数据(五)Hadoop再探讨High Availability(HA)集群搭建及YARN原理介绍

      大家好,我是不温卜火,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样 ...

  8. redis5.0.5版本搭建集群

                                         redis5.0.5版本搭建集群 安装redis5.0.5版本 将redis5.0.5解压 sudo tar -zxcf re ...

  9. aix7.1.4上安装12.1.0.2版本RAC集群时遇到的bug无法创建mgmt库

    1.具体故障表现: 在AIX 7100-04-03-1642版本操作系统上安装ORACLE 12.1.0.2版本GRID集群软件时,运行root.sh脚本正常构建集群: 之后图形界面脚本之后的操作,在 ...

最新文章

  1. android录像增加时间记录(源码里修改)
  2. Spring Boot 与DBunit 配合使用
  3. Python字符串常用方法(二)
  4. linux小红帽实验心得,格林童话小红帽读书心得体会5篇
  5. wordpress里mySql服务器的配置
  6. 【渝粤教育】国家开放大学2019年春季 1171科学与技术 参考试题
  7. strcasecmp()--忽略大小写比较字符串
  8. cloudflare 批量域名ID
  9. JMeter 做接口性能测试,YYDS!
  10. DB2 SQLSTATE 消息
  11. 深度学习基础 | 超详细逐步图解 Transformer
  12. 文件类型识别工具:TrID(trid)下载安装及使用
  13. 右下角弹窗代码_vueamap使用步骤和代码示例
  14. python抢票_Python自动抢票神器,GitHub热榜第一!
  15. Struts2(一)
  16. 上海航芯|物联网安全芯片ACL16简介
  17. 豆瓣API 不能访问的解决方法
  18. 未来居民健康档案编码以身份证号识别
  19. Apache启动报错:Apache is running a threaded MPM
  20. Java日期时间的设置问题

热门文章

  1. miRanda安装、编译和环境变量配置
  2. VIJOS-P1404-遭遇战
  3. JVM调优三板斧,快速掌握调优的核心与思路
  4. 干货应用迁移|搜狗输入法在龙芯平台上的适配与应用
  5. SqlServer中 不区分大小写 和 全半角的写法
  6. 逻辑地址空间和物理地址空间
  7. JDK开发环境变量配置及运行JAVA第一个程序
  8. 浙大python教材_浙大学霸用这套Python教程自学,8天开发12款游戏,堪称经典课程...
  9. nginx(二十八)nginx下载文件失败
  10. 长虹计算机技术,计算机实用技术 (严长虹)