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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 近期,OceanBase 社区发布了一篇关于我们公司选型分布式数据库的文章(戳:翼鸥教育携手OceanBase,突破MySQL读写与容量瓶颈),详细介绍了我们的选型考虑因素和对 TiDB、OceanBase 的测试对比,当然,我们最终选择了 OceanBase。

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

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

image.png

痛点二:数据读写瓶颈。随着业务量的增长,系统中被监控的设备也越来越多,监控数据的量也随之增长,MySQL 出现单点写入瓶颈。
痛点三:分区表不易维护。Zabbix 有几张存放监控数据的大表使用了按时间维度分区的分区表,便于数据清理,查询,但不利于维护。

image.png

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

image.png

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

image.png

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

image.png

▋ 方案制定
我们计划先使用 4 台虚拟机进行兼容性测试和基础功能验证,机器规划如下:
* 由于是本人申请的,所以机器名以申请人本人名字命名 -_-!

image.png我们的上线思路分为五步:
第一步,做兼容性测试。主要测试存储与服务的兼容性,以及功能是否正常;

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

第三步,迁移历史数据。用 OMS 将表结构和全量数据迁移到 OceanBase 中,同时选择增量数据同步;
第四步,打开维护窗口。将服务数据库链接地址更换到 OceanBase 集群上;
第五步,清理同步链路释放服务器资源。
▋ 环境准备
我们根据官方文档部署了 OceanBase、OCP、OMS,在测试环境中也并没有做太多规范化的配置,在导入表结构后,使用即可。但根据我们的部署经验,要注意 default collation 为 utf8mb4_bin。

image.png

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

image.png

第二,系统提示数据库版本的问题。因为 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.png

那么,手动写“外挂”实现触发器的功能是否可行呢?我们也做了一些测试。通过对触发器创建语句的分析,我们发现,在源表数据有变化的时候,包含 insert、delete、update,触发器会把对应的数据插入 changelog 表。也就是说,只要订阅表变更信息即可。
怎样实现源表的变更订阅呢?这里就可以使用 OceanBase 开源生态的重要工具——OMS。我们是通过 OMS 订阅表的变化,把数据写入 Kafka,然后消费 Kafka 的数据写到 changelog 里。通过这种方式,我们再进行功能测试,发现上述 Zabbix 的四个问题全部解决了,各种功能测试可以正常使用。
需要说明的是,在我们测试时,OceanBase 还是 3.1.4 版本,现在 OceanBase 的 4.0 版本已经发布,触发器功能也开放了,后续我们会进行 OceanBase 4.0 版本与 Zabbix 的兼容性测试,敬请期待后续分享。

image.png

选择 OceanBase 做 Zabbix 监控系统的底层存储后,我们也在 Zabbix 代码上做了一些兼容性修改,从目前的使用情况看,运行状态良好。由于 OceanBase 使用 Paxos 协议确保主副本和从副本数据强一致,DML 操作插入、更新、删除等首先写入 MemTable,业务高峰期也不会出现磁盘  I/O 告警和主从延迟的情况。
目前我们已经在测试环境、线上环境上线了两套 OceanBase 集群,也已经在业务中使用了 OceanBase,后续会有更多业务陆续迁移到 OceanBase 中。
记得 OceanBase 在 2021 年开源的时候,我就尝试部署过 3.x 版本,过程复杂,成功率低。在不断地快速迭代下,其部署变得方便,屡试不爽,再随着生态工具(OCP、OMS、ODC 等)的发布,OceanBase 社区版产品体系越来越完善,越来越好用。

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



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
6月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
269 4
|
11月前
|
监控 关系型数据库 机器人
小白带你学习linux的监控平台zabbix
小白带你学习linux的监控平台zabbix
268 0
|
3月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
19天前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
58 7
|
1月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
【10月更文挑战第5天】随着OceanBase社区版的广泛应用,企业纷纷采用这一高性能、高可用的分布式数据库系统。为了确保系统的稳定运行,使用成熟的Zabbix监控工具进行全面监控至关重要。本文通过具体示例介绍了如何配置Zabbix监控OceanBase,包括安装配置、创建监控模板和监控项、编写脚本、设置触发器及图形展示等步骤,帮助读者快速上手,及时发现并解决问题,确保业务始终处于最佳状态。
59 2
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
59 2
zabbix agent集成percona监控MySQL的插件实战案例
|
3月前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
103 0
|
5月前
|
监控 数据库 Docker
Zabbix监控神通数据库教程
**摘要:** 本文介绍了如何使用Docker安装和配置神舟通用数据库,并利用Zabbix进行监控。首先,通过Docker安装数据库镜像,启动容器并映射端口。接着,使用默认凭证连接数据库并验证安装。然后,将数据库的Python模块和库文件复制到主机,并安装Python3.5及相应模块,创建外部检查脚本以实现Zabbix的监控功能。示例展示了查询数据库版本的监控指标配置。最后,提到了监控结果的界面展示,并邀请读者探索更多Zabbix监控技巧。
88 0
Zabbix监控神通数据库教程
|
4月前
|
监控 关系型数据库 应用服务中间件
Linux zabbix监控 软件的安装
Linux zabbix监控 软件的安装