ClassIn:如何打造更稳定的Zabbix监控系统

news2025/1/11 23:42:56

作者简介:罗呈祥。现就职于北京翼鸥教育科技有限公司,负责数据库相关的运维管理和技术支持工作,擅长故障处理和性能优化,对分布式数据库也有深入研究。

 

近期,OceanBase 社区发布了一篇关于我们公司选型分布式数据库的文章(戳:翼鸥教育携手OceanBase,突破MySQL读写与容量瓶颈),详细介绍了我们的选型考虑因素和对 TiDB、OceanBase 的测试对比,当然,我们最终选择了 OceanBase。

其实,最初我们决定探索 OceanBase 时,因为对其了解不深,所以决定从监控系统入手,一边研究,一边积累经验,监控系统的数据量也比较可观。可以说,监控系统是一块很好的试验田。

我们的监控系统采用 Zabbix 方案,因为 Zabbix 业务语言与我们公司的开发语言高度一致,Zabbix server 端使用 C++ 编写,前端采用 PHP 语言, 今天我主要分享下我们在监控系统使用 OceanBase 替换 MySQL 的经验,包括业务痛点介绍、部署 OceanBase 时遇到的问题,以及 OceanBase 与 Zabbix 的版本兼容测试、功能验证等。

 

针对业务痛点选择OceanBase

 

Zabbix 是一个基于 Web 界面的提供分布式系统监视及网络监视功能的企业级开源解决方案,能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制供系统管理员快速定位、解决存在的各种问题。 我们公司在最初使用 Zabbix 时,选用 MySQL 存储数据,随着业务量的增加,要监控的设备和指标也越来越多,就出现了如下三个主要痛点。

痛点一:数据量大。 使用过 Zabbix 的人都知道,Zabbix 有两张大表,即history_uint 和 history,用来存放监控数据。目前,我们监控系统的 history_uint 表数据增量约每天 33GB,history 表每天的数据增量约 50GB。因此,仅保留半年的数据,就非常庞大。

 

Image
Image

history和history_uint两表每天的数据增量

 

痛点二:数据读写瓶颈。 随着业务量的增长,系统中被监控的设备也越来越多,监控数据的量也随之增长,MySQL 出现单点写入瓶颈。

痛点三:分区表不易维护。 Zabbix 有几张存放监控数据的大表使用了按时间维度分区的分区表,便于数据清理,查询,但不利于维护。

 

Image

Zabbix分区表分区规则

 

基于上述三个痛点,相较于 MySQL,OceanBase 的优势更加显著。

首先,针对数据量大的痛点,通过之前我们在生产环境做的一些数据迁移测试,OceanBase 可以把业务数据压缩至 MySQL 的 1/5 甚至 1/4,在相同规格的机器上,这样的数据压缩率可以支持我们存放期限更长的监控数据,一些线上数据迁移到 OceanBase 后的大小和压缩率如下表所示。

 

Image

 

可以看到对于不同的表,OceanBase 的数据压缩率也不同, 综合来看,平均压缩率是 4.71。

其次,针对数据读写瓶颈这个痛点,由于 OceanBase 是基于 LSM-Tree 的分布式数据库,因此,在数据写入方面有天然优势。根据生产环境规格的机器 sysbench 写入性能测试的结果,OceanBase 的综合写入性能是 MySQL 的 3 倍以上。

 

Image
OceanBase的LSM-Tree架构

 

最后,针对痛点三的分区表不易维护,我们也对 OceanBase 进行了测试。OceanBase 的 Online DDL 特性使它对分区表的维护非常平滑,不需要特定维护窗口停监控系统去做分区表的维护。truncate 表分区都是秒删,数据清理非常方便。相比之下,MySQL 在清除分区的时候,不仅会锁表,还会造成大量的磁盘I/O。

此外,我们在监控系统中选择使用 OceanBase,也是为核心业务上线 OceanBase 积累经验。

 

Image
选型OceanBase的原因

 

环境准备和测试验证

 

▋ 方案制定

 

我们计划先使用 4 台虚拟机进行兼容性测试和基础功能验证,机器规划如下:

由于是本人申请的,所以机器名以申请人本人名字命名 -_-!

Image

选择部署的 OceanBase 软件版本如下表所示。

Image

我们的上线思路分为五步:

第一步,做兼容性测试。主要测试存储与服务的兼容性,以及功能是否正常;

第二步,准备OceanBase集群和相关组件。部署 OCP、OMS,使用 OCP 快速部署集群;

第三步,迁移历史数据。用 OMS 将表结构和全量数据迁移到 OceanBase 中,同时选择增量数据同步;

第四步,打开维护窗口。将服务数据库链接地址更换到 OceanBase 集群上;

第五步,清理同步链路释放服务器资源。

 

▋ 环境准备

 

我们根据官方文档部署了 OceanBase、OCP、OMS,在测试环境中也并没有做太多规范化的配置,在导入表结构后,使用即可。但根据我们的部署经验,要注意 default collation 为 utf8mb4_bin。

 

Image
测试集群的拓扑图

Image
租户管理界面

 

但我们在环境准备的过程遇到了一些问题:

第一,由于我们公司使用的 MySQL 版本是 8.0,在编译好 Zabbix-server 后,发现连接 OceanBase 时总是失败,而更换为 MySQL 5.7 版本的环境后编译可以连接上数据库,可能原因是 8.0 版本的密码加密方式与 5.7 版本不同,这倒也不是什么大问题。

 

Image
Zabbix系统界面

 

第二,系统提示数据库版本的问题。因为 OceanBase Proxy 对外显示默认版本是 MySQL 5.6.25 ,Zabbix 会提示版本不支持,所以,需要修改 OceanBase Proxy 的 MySQL_version 参数到支持的版本,我们改成了 8.0.20 版本(ps:这个小功能不错,可以根据需求调整到任意版本)。

 

▋ 功能测试

 

准备好环境后,我们开始功能测试与验证,主要查看服务运行状态,检查 Zabbix-server、UI 服务是否能正常启动,以及在长时间运行后的状态检查,还要检查基础功能,包括增加监控项、数据采集,数据读取,接口健康检查,报警事件触发等。此外,验证数据迁移的一致性(OMS 自带数据一致性校验功能,所以只进行了抽样检查),以及进行 Zabbix 版本升级,agent 升级等。

在 Zabbix 6.0 版本测试过程中,各种功能正常,但在测试升级过程中(Zabbix版本从 6.0 升级到 6.2)遇到了一些问题。

  • 触发器问题:OceanBase 不支持触发器,所有触发器都建在 changelog 表。
  • OceanBase 不支持把 text 修改为 varchar,在 4.0 版本之后支持,问题暂时搁置。
  • changelog 表的问题,从代码上看是升级时要写数据,使用触发器,需要再验证。
  • Zabbix 添加机器后,重启 Zabbix server 才能连通,这可能与程序有关,因为同一个程序,在使用 MySQL 时正常。该问题是 Zabbix 6.2 版本使用过程中的问题,比较致命,需要重点处理。

经过查看 Zabbix 源码和测试验证,我们发现以上问题的根本原因是 OceanBase 3.1.x 版本不支持触发器。因为 Zabbix 在 6.0(LTSC)版本的表结构中,没有使用到触发器,而在 6.2 版本中,在一些表上建立了向 changelog 表插入数据的触发器。

 

Image
Zabbix中的部分触发器

 

那么,手动写“外挂”实现触发器的功能是否可行呢?我们也做了一些测试。通过对触发器创建语句的分析,我们发现,在源表数据有变化的时候,包含 insert、delete、update,触发器会把对应的数据插入 changelog 表。也就是说,只要订阅表变更信息即可。

怎样实现源表的变更订阅呢?这里就可以使用 OceanBase 开源生态的重要工具——OMS。我们是通过 OMS 订阅表的变化,把数据写入 Kafka,然后消费 Kafka 的数据写到 changelog 里。通过这种方式,我们再进行功能测试,发现上述 Zabbix 的四个问题全部解决了,各种功能测试可以正常使用。

需要说明的是,在我们测试时,OceanBase 还是 3.1.4 版本,现在 OceanBase 的 4.0 版本已经发布,触发器功能也开放了,后续我们会进行 OceanBase 4.0 版本与 Zabbix 的兼容性测试,敬请期待后续分享。

 

选型总结与感谢

 

选择 OceanBase 做 Zabbix 监控系统的底层存储后,我们也在 Zabbix 代码上做了一些兼容性修改,从目前的使用情况看,运行状态良好。由于 OceanBase 使用 Paxos 协议确保主副本和从副本数据强一致,DML 操作插入、更新、删除等首先写入 MemTable,业务高峰期也不会出现磁盘 I/O 告警和主从延迟的情况。

目前我们已经在测试环境、线上环境上线了两套 OceanBase 集群,也已经在业务中使用了 OceanBase,后续会有更多业务陆续迁移到 OceanBase 中。

记得 OceanBase 在 2021 年开源的时候,我就尝试部署过 3.x 版本,过程复杂,成功率低。 在不断地快速迭代下,其部署变得方便,屡试不爽,再随着生态工具(OCP、OMS、ODC 等)的发布,OceanBase 社区版产品体系越来越完善,越来越好用。

与此同时,伴随着 OceanBase 社区的逐渐壮大,很多社区用户越来越活跃,他们的经验对我们很有启发,希望 OceanBase 未来能够在社区持续发力,做好知识体系、文档建设,与用户共创建强大的社区。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bilateral_filter 双边滤波器详细用法

一、双边滤波(Bilateral filter)是一种可以保边去噪的滤波器。其输出像素的值依赖于邻域像素的值的加权组合。 从效果来说,双边滤波可产生类似美肤的效果。皮肤上的皱纹和斑,与正常皮肤的差异,远小于黑白眼珠之间的差异…

13种Shell逻辑与算术,能写出5种算你赢!

相较于最初的 Bourne shell,现代 bash 版本的最大改进之一体现在算术方面。早期的 shell 版本没有内建的算术功能,哪怕是给变量加1,也得调用单独的程序来完成。 1、算术方法一: $(( )) 只要都是整数运算,就可以在 $(…

DHT11温湿度传感器初识

目录 一、产品概述 1、接线方式 2、特点 3、数据传送逻辑 二、发送时序检测模块是否存在 1、C51单片机(主机)时序分析 2、编写代码检测模块是否存在 3、读取DHT11数据的时序分析 三、温湿度通过串口传到PC显示 四、温湿度检测小系统——使数据…

Discrete Opinion Tree Induction for Aspect-based Sentiment Analysis 论文阅读笔记

一、作者 Chenhua Chen、Zhiyang Teng、Zhongqing Wang、Yue Zhang School of Engineering, Westlake University, China Institute of Advanced Technology, Westlake Institute for Advanced Study Soochow University 二、背景 如何为每一个方面词定位相应的意见上下文…

反补码运算之 “1 - 1 = - 1 ” ?

我们在研究数据的二进制表示时遇到这样一个问题: 由于计算中的CPU只有加法器,没有减法器,所以在计算机采用原码做减法时对于:1 - 1 0 相当于1 (-1),用二进制表示为:000110011001。…

儿童感染新冠病毒后发高烧如何应对?专家来支招

儿童感染新冠病毒后发热较多,但肺炎发展较少儿童感染新冠病毒后发高烧,是重症吗?徐红梅:从目前的接待情况来看,儿童感染新冠病毒后比成人发烧。超过一半的儿童在感染后有发烧症状,伴有咳嗽、鼻塞、流鼻涕、…

JavaWeb的一些学习总结

Web系统就是:前端负责貌美如花,后端负责坚如磐石 企业在做Web系统时,成本与收益的对比是不可忽视的,企业做项目一定是要盈利的! 企业做项目最求的不是技术的新和潮,追求的是低成本和稳还有好用度&#xff…

函数的设计

一、默认参数 C允许在函数定义或声明时,为形参指定默认值,即默认参数(default argument)。 (1)函数定义与函数声明只能设置一次默认参数。 (2)可以设置多个默认参数,设…

【精华】搞定JVM调优学习

JVM 介绍 1. 什么是 JVM JVM 是 Java Virtual Machine(Java 虚拟机)的缩写。一台执行 Java 程序的机器。 2 .JAVA 语言的执行原理 计算机语言: 计算机能够直接执行的指令。这种指令和系统及硬件有关。 计算机高级语言: 在遵循…

「数据」驱动行业拐点,毫末智行冲刺自动驾驶3.0时代

“毫末预计,到2025年中国高阶辅助驾驶搭载率将达到70%。而在汽车新消费领域,中国汽车市场增换购消费比例将达到60%,智能驾驶功能成为必选因素,并迎来商业化的加速发展。”1月5日,第七届HAOMO AI DAY上,毫末…

黑马学ElasticSearch(五)

目录: (1)DSL查询语法-DSL查询分类和基本语法 (2)DSL查询语法-全文检索查询 (3)DSL查询语法-精确查询 (4)DSL查询语法-地理查询 (5)DSL查询语…

计算机网络(一)

计算机网络1 概述1.1 计算机网络的作用1.2 因特网概述1.2.1 网络的网络1.2.2 Internet和internet的区别1.2.3 因特网发展的三个阶段1.2.4 ISP介绍1.2.5 ISP分类1.2.5.1 主干ISP1.2.5.2 地区ISP1.2.5.3 本地ISP1.2.6 因特网交换点 IXP1.3 因特网的组成1.3.1 因特网的边缘部分1.3…

资产管理4大难点,如何破解?

随着企业业务扩大、人员增多,固定资产的数量和种类也会随着增加。此时,如何高效管理企业资产就成为很多企业亟待解决的一大难题。 传统资产管理4大难点 01.资产管理部门需要联系采购部门、使用部门、财务部门等收集数据,汇总难且工作量大&…

vacuum移除不必要的CLOG文件

迫切模式弥补了惰性模式的缺陷。它会扫描所有页面&#xff0c;检查表中的所有元组&#xff0c;更新相关的系统视图&#xff0c;并在可能时删除不必要的CLOG文件与页面。当满足以下条件时&#xff0c;会执行迫切模式。pg_database.datfrozenxid<(OldestXmin-vacuum_freeze_ta…

【多线程】【C++ 知识点】pthread_join学习

目录pthread_join进程id和线程idpthread_join pthread_join() 主线程会进入阻塞装题&#xff0c;pthread_join()之后的代码&#xff0c;只有等待子进程退出之后才能执行。 代码块A pthread_create(&id, NULL, Fn, NULL);pthread_create(&id_1, NULL, Fn, NULL);pthre…

jdk1.8 更替为 oepnJdk8遇到的坑

背景&#xff1a;客户服务器因为说jdk要收费&#xff0c;所以要求将jdk1.8替换为openJdk&#xff0c;本地测试ok&#xff0c;则将服务器的jdk替换为openJdk8&#xff0c;出现一个登录异常&#xff0c;调查发现是一个sso登录的问题&#xff08;单点登录&#xff09;&#xff0c;…

Rhce第一次作业

chrony服务部署&#xff1a;两台机器a: 第一台机器从阿里云同步时间&#xff0c;第二台机器从第一台机器同步时间1.查看防火墙是否关闭&#xff0c;若未关闭&#xff0c;关闭防火墙2.打开chrony配置文件3.向配置文件中写入阿里云时间服务器&#xff0c;并允许两台机器所在的网段…

从0到1完成一个Vue后台管理项目(十八、基础地图绘制)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

spring restTemplate的坑----会对String类型的url中的特殊字符进行转义

&#x1f4e2; &#x1f4e2; &#x1f4e2; &#x1f4e3; &#x1f4e3; &#x1f4e3;哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步 &#x1f91d; &#x1f91d;一位上进心十足的【Java ToB端…

基于OpenCV实现两种方法测量圆弧长度(步骤 + 源码)

导 读 本文主要介绍基于OpenCV实现两种方法测量圆弧长度(步骤 + 源码)。 背景介绍 要求:如上所示,分别用OpenCV计算出图1和图2中圆弧的长度。因为OpenCV中没有提供现成计算圆弧的方法,所以需要自己编写,本文将提供2种不同的方法来实现,仅供参考。 实现步骤 首…