写点什么

美团 MySQL 数据库巡检系统的设计与应用

  • 2020-06-08
  • 本文字数:3101 字

    阅读完需:约 10 分钟

美团MySQL数据库巡检系统的设计与应用

我们生活中随处可见各种巡检系统,比如电力巡检、消防检查等,正是这些巡检工作,我们才能在稳定的环境下进行工作、生活。巡检对于数据库或者其他 IT 系统来说也同样至关重要,特别是在降低风险、提高服务稳定性方面起到了非常关键作用。

一、背景

为了保障数据库的稳定运行,以下核心功能组件必不可少:



图 1 数据库运维保障核心功能组件


其中,数据库巡检作为运维保障体系最重要的环节之一,能够帮助我们发现数据库存在的隐患,提前治理,做到防患于未然。对于大规模集群而言,灵活健壮的自动化巡检能力,至关重要。


任何系统都会经历一个原始的阶段,最早的巡检是由中控机+定时巡检脚本+前端展示构成的。但是,随着时间的推移,老巡检方案逐渐暴露出了一些问题:


  • 巡检定时任务执行依赖中控机,存在单点问题;

  • 巡检结果分散在不同的库表,无法进行统计;

  • 巡检脚本没有统一开发标准,不能保证执行的成功率;

  • 每个巡检项都需要单独写接口取数据,并修改前端用于巡检结果展示,比较繁琐;

  • 巡检发现的隐患需要 DBA 主动打开前端查看,再进行处理,影响整体隐患的治理速度;

  • ……


所以我们需要一个灵活、稳定的巡检系统来帮助我们解决这些痛点,保障数据库的稳定。

二、设计原则

巡检系统的设计原则,我们从以下三个方面进行考虑:


  • 稳定 :巡检作为保证数据库稳定的工具,它自身的稳定性也必须有所保证;

  • 高效 :以用户为中心,尽量化繁为简,降低用户的使用成本,让新同学也能迅速上手治理和管理隐患;提高新巡检部署效率,随着架构、版本、基础模块等运维环境不断变化,新的巡检需求层出不穷,更快的部署等于更早的保障;

  • 可运营 :用数据做基础,对巡检隐患进行运营,包括推进隐患治理,查看治理效率、趋势、薄弱点等。

三、系统架构

美团 MySQL 数据库巡检系统架构图设计如下所示。接下来,我们按照架构图从下到上的顺序来对巡检系统主要模块进行简单的介绍。



图 2 美团 MySQL 数据库巡检系统架构图


1. 执行层


巡检执行环境 :由多台巡检执行机组成,巡检任务脚本会同时部署在所有执行机上。执行机会定时从巡检 Git 仓库拉取最新的脚本,脚本使用 Python Virtualenv + Git 进行管理,方便扩充新的执行机。


任务调度 :巡检任务使用了美团基础架构部研发的分布式定时任务系统 Crane 进行调度,解决传统定时任务单点问题。Crane 会随机指派某一台执行机执行任务,假如这台执行机出现故障,会指派其他执行机重新执行任务。一般一个巡检任务对应着一个巡检项,巡检任务会针对特定的巡检目标根据一定的规则来判断是否存在隐患。


巡检目标 :除了对生产数据库进行巡检以外,还会对高可用组件、中间件等数据库周边产品进行巡检,尽可能覆盖所有会引发数据库故障的风险点。


2. 存储层


巡检数据库 :主要用来保存巡检相关数据。为了规范和简化流程,我们将巡检发现的隐患保存到数据库中,提供了通用的入库函数,能够实现以下功能:


  • 自动补齐隐患负责人、隐患发现时间等信息;

  • 入库操作幂等;

  • 支持半结构化的巡检结果入库,不同巡检的隐患结果包括不同的属性,比如巡检 A 的隐患有“中间件类型”,巡检 B 有“主库 CPU 核数”,以上不同结构的数据均可解析入库;

  • 针对表粒度的隐患项,如果分库分表的表出现隐患,会自动合并成一个逻辑表隐患入库。


巡检脚本 Git 仓库 :用来管理巡检脚本。为了方便 DBA 添加巡检,在系统建设过程中,我们增加了多个公共函数,用来降低开发新巡检的成本,也方便将老的巡检脚本迁移到新的体系中。


3. 应用层


集成到数据库运维平台 :作为隐患明细展示、配置巡检展示、管理白名单等功能的入口。为了提高隐患治理效率。我们做了以下设计。


  • 隐患明细展示页面会标注每个隐患出现的天数,便于追踪隐患出现原因。

  • 配置新的巡检展示时必须要同时制定隐患解决方案,确保隐患治理有章可循,避免错误的治理方式导致“错上加错”。


隐患运营后台 :这个模块主要目的是推进隐患的治理。


  • 运营报表,帮助管理者从全局角度掌握隐患治理进展,报表包括隐患趋势、存量分布、增量分布、平均治理周期等核心内容,进而由上到下推动隐患治理;报表数据同样是通过 Crane 定时任务计算获得。

  • 隐患治理催办功能,用来督促 DBA 处理隐患。催办内容中会带有隐患具体内容、出现时长、处理方案等。催办形式包括大象消息、告警,具体选用哪种形式可根据巡检关键程度做相应配置。


外部数据服务 :主要是将巡检隐患数据提供给美团内部其他平台或项目使用,让巡检数据发挥更大的价值。


  • 对接先知平台,美团 SRE 团队开发的主要面向研发人员(下称 RD)用户的风险发现和运营平台,平台接收各服务方上报的隐患数据,以 RD 视角从组织架构维度展示各服务的风险点,并跟进 RD 处理进度。巡检系统会把需要 RD 参与治理的隐患,比如大表、无唯一键表等,借助先知平台统一推送给 RD 进行治理。

  • 运维周报,主要面向业务线 RD 负责人和业务线 DBA,以静态报告形式展示业务线数据库运行情况以及存在的问题,巡检隐患是报告内容之一。

四、巡检项目

巡检项目根据负责方分为 DBA 和 RD,DBA 主要负责处理数据库基础功能组件以及影响服务稳定性的隐患。RD 主要负责库表设计缺陷、数据库使用不规范等引起的业务故障或性能问题的隐患。也存在需要他们同时参与治理的巡检项,比如“磁盘可用空间预测”等。目前巡检项目共 64 个,类目分布情况如下图所示:



图 3 巡检项类目分布


  • 集群 :主要检查集群拓扑、核心参数等集群层面的隐患;

  • 机器 :主要检查服务器硬件层面的隐患;

  • Schema/SQL :检查表结构设计、数据库使用、SQL 质量等方面的隐患;

  • 高可用/备份/中间件/报警 :主要检查相关核心功能组件是否存在隐患。


下面,我们通过列举几个巡检任务来对巡检项做简单的说明:


五、成果

美团 MySQL 巡检系统已稳定运行近一年时间,基于新巡检体系上线的巡检项 49 个。通过巡检体系持续运行,在团队的共同努力下,我们共治理了 8000+核心隐患,近 3 个月隐患治理周期平均不超过 4 天,将隐患总数持续保持在极小的量级,有效地保障了数据库的稳定。



图 4 隐患运营-团队内各虚拟小组隐患平均治理周期


下面的隐患趋势图,展示了近一年中隐患的个数,数量突然增长是由于新的巡检项上线。从整体趋势上看,隐患存量有非常明显的下降。



图 5 隐患运营-隐患总量趋势情况


除了推动内部隐患治理之外,我们还通过对接先知平台,积极推动 RD 治理隐患数量超过 5000 个。



图 6 对接先知-推动 RD 治理隐患


为了提升用户体验,我们在提升准确率方面也做了重点的投入,让每一个巡检在上线前都会经过严格的测试和校验。


对比其他先知接入方,DBA 上报隐患在总量、转化率、反馈率几个指标上都处于较高水平,可见我们上报的隐患风险也得到了 RD 的认可。



图 7 对接先知-各接入方上报隐患情况


指标说明


  • 反馈率 = 截止到当前时刻反馈过的风险事件数量/截止到当前时刻产生的风险事件总量 * 100%;

  • 反馈准确率 = 截止到当前时刻反馈准确的风险事件数量/截止到当前时刻反馈过的风险事件总量 * 100%;

  • 转化率 = 截止到当前时刻用户反馈准确且需要处理的风险事件数量 / 截止到当前时刻产生的风险事件总量 * 100%。

六、未来规划

除了继续完善补充巡检项以外,未来巡检系统还会在以下几个方向继续探索迭代:


  • 提高自动化能力,完善 CI 和审计;

  • 加强运营能力,进一步细化每个隐患的重要程度,辅助决策治理优先级;

  • 隐患自动修复。


作者介绍


王琦,基础架构部 DBA 组成员,2018 年加入美团。


本文转载自公众号美团技术团队(ID:meituantech)。


原文链接


https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651751923&idx=1&sn=3908b323818b299c13cb19da24d2eb91&chksm=bd125cbe8a65d5a89a72e9b39e04da8ad78a609ed886c7f70dfcaebfb78aebd63f5701cc7787&scene=27#wechat_redirect


2020-06-08 14:044092

评论

发布
暂无评论
发现更多内容

云转售是什么意思?哪家好?理由是什么?

行云管家

云计算 企业上云 云资源 云转售

网络爬虫技术及应用

郑州埃文科技

网络安全 IP地址资源 爬虫技术

前端 30 问:愿你能三十而立

GFE

面试 前端

详解linux多线程——互斥锁、条件变量、读写锁、自旋锁、信号量

C++后台开发

多线程 后端开发 linux开发 C++开发

《数字经济全景白皮书》中国商业银行普惠金融可持续发展能力评价

易观分析

银行 普惠金融

实时渲染如何改变视频制作和动画制作

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

分布式锁实战:基于Zookeeper的实现

小小怪下士

Java zookeeper 分布式

IM消息ID技术专题(七):网易严选分布式ID的技术选型、优化、落地实践

JackJiang

网络编程 即时通讯 IM 开源im

扒官方文档学Ts类型编程

GFE

typescript 前端

什么是实时渲染及其重要性

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

软件测试面试真题 | 说一下常用的控件定位方法

测试人

软件测试 面试题 web测试 元素定位

【愚公系列】2022年11月 Go教学课程 040-字符串处理

愚公搬代码

11月月更

扒官方文档学Ts类型编程(二)

GFE

typescript 前端

CAD和实时渲染之间的差距

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

Discount-industrial mini pcie card/Dual Band 2.4GHz 5GHz 2x2 MIMO 802.11ac Mini PCIE WiFi Module//QCA9880 3x3 FCC/CE/IC

Cindy-wallys

QCA9880 802.11ac 3*3 2*2 2.4G&5G

为什么应该切换到实时渲染

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

图数据 3D 可视化在 Explorer 中的应用

NebulaGraph

可视化 图数据库 3D

7k字,12张图,从零到一带你详解Redis

Java永远的神

数据库 nosql redis 程序员 面试

Spring Boot「22」使用 Hibernate & JPA 持久化 Java 对象

Samson

Java hibernate Spring Boot 学习笔记 11月月更

Go语言入门12—异常

良猿

Go golang 后端 11月月更

WEB项目如何通知用户在线更新?

GFE

前端 版本管理

平均110万个漏洞被积压,企业漏洞管理状况堪忧

SEAL安全

DevSecOps 漏洞修复 软件供应链安全 漏洞管理 漏洞优先级匹配

三位技术大咖的「研发效能」实践干货

万事ONES

研发效能 课程笔记

NGINX Sprint 年度线上会议:报名通道已开启,立即预定您的 NGINX 深潜之旅

NGINX开源社区

nginx

堡垒机按什么收费?大概多少钱?有一个标准吗?

行云管家

网络安全 堡垒机 IT安全

python小知识-classmethod类方法

AIWeker

Python 人工智能 python小知识 11月月更

图解vue3.0编译器核心原理

GFE

前端 Vue3

字节跳动开源数据集成引擎BitSail的演进历程与能力解析

字节跳动数据平台

数据库 开源 数据开发 数据集成 企业号十月 PK 榜

量化合约对冲挖矿app软件开发案例(支持测试)

开发微hkkf5566

NFTScan 与 Bitizen 钱包达成战略合作,双方将在 NFT 数据层面进行深度合作

NFT Research

NFT 数据基础设施

通过云效 CI/CD 实现微服务全链路灰度

阿里巴巴云原生

阿里云 微服务 云原生

美团MySQL数据库巡检系统的设计与应用_数据库_王琦_InfoQ精选文章