有赞MySQL自动化运维之路—ZanDB

一、前言

在互联网时代,业务规模常常出现爆发式的增长。快速的实例交付,数据库优化以及备份管理等任务都对DBA产生了更高的要求,单纯的凭借记忆力去管理那几十套DB已经不再适用。那么如何去批量管理这些实例的备份、元数据、定时脚本和快速实例交付就成了急需解决的的问题。

二、数据库的标准化

在实现MySQL的自动化运维的过程中,最痛苦的无非是目录的不统一,配置文件的混乱以及DB主机的不标准,而这些不标准的环境会让自动化运维的路途荆棘重重。所以首先我们将相应的DB主机以及目录做了标准化,将以前不符合的标准的主机和实例进行改造。

  1. 一台机子上所有实例,都是在统一的目录下,通过端口进行区分,例如my3306,my3307。然后在my3306下面创建对应的数据目录、日志目录、运行文件目录等
  2. 每个实例独享一个配置文件,除serverid , bufferpool_size等参数外其他参数保持一致
  3. 线上环境的MySQL软件目录和版本保持一致

三、自动化运维之路一期

在一开始的时候,我们需要着手解决目前的最要紧的事情:备份。对于DBA来说,备份重于一切。如果DBA对自己维护的数据库的备份情况都一无所知,那么总有一天,你会遭遇数据丢失的灾难。因此,我们开始第一期的工作,ZanDB 备份监控系统。 它实现的主要功能是:

  1. 实时查看备份的情况,当前应备份实例个数,已完成实例数
  2. 显示每个备份的耗费时长
  3. 查看过去5天的备份统计信息,如总个数,大小等

四、自动化运维之路二期

在实现了ZanDB备份监控系统之后,我们着手开始设计ZanDB 的二期设计研发工作。

在设计ZanDB的过程中,我们将主要功能分成了七部分:备份管理,实例管理,主机管理,任务管理,元数据管理,日志管理,日常维护。

1、任务系统

为了实现实例的备份、元数据、定时脚本等工作,必须要有一个健壮的任务调度系统。该任务系统支持多种类型的任务:每天的定时任务,每个星期的定时任务,每个月的定时任务,还支持一定间隔的重复性任务。

该任务系统由一个执行任务的agent和下发任务的调度系统完成,任务调度系统中记录了所有的任务和任务下主机的时间策略。

通过任务系统,我们彻底的去掉了db主机上的crontab 脚本,修改任务执行时间、策略以及是否需要执行变得轻而易举。

2、备份管理

在一期的基础上,我们完善了备份系统。通过和任务系统相结合,可以轻松的设置备份的时间以及备份的实例,是否需要备份等,保证了在业务低峰期执行备份操作。

备份操作由agent执行,备份成功失败通过相应的回调地址设置状态。如果一台主机上存在备份失败的实例,可以直接在备份系统中查看其备份报错日志,执行重试,省去了频繁登录DB主机的痛苦。

同时,备份系统每天针对核心数据库的备份执行校验操作。如果发现备份校验失败,通过告警平台触发微信或者短信的告警,方便维护人员第一时间知道是否存在备份失效的情况。

3、主机管理

主机的元数据是数据库实例的基础。在进行主机新增的时候,ZanDB 能够自动的连接Zabbix 获取主机信息,例如磁盘大小,磁盘可用空间,内存可用空间等。

4、实例管理

为了尽可能的发挥主机的性能,我们在一台主机上部署了多个实例,因此主机和实例是一对多的关系。

通过实例管理系统,我们可以实现如下功能:

  1. 查看当前的实例列表,获取实例当前的数据大小,日志大小,主从状态,是否存在慢查,被kill的SQL,实例历史信息性能信息等等。
  2. 新增单个实例,一对实例,针对一个实例/一对主从添加从库。新增实例的过程是通过rsync 标准的数据库模板,然后用my.cnf模板渲染生成标准my.cnf配置文件,执行的具体步骤可以通过流程系统查看 ,支持失败重试。
  3. 实例的主从校验。在MySQL主从复制中,有可能因为主从复制错误、主从切换或者软件的BUG等导致主从数据不一致。为了提早发现数据的不一致,就需要每天都针对核心数据库,进行主从的一致性校验,避免产生线上影响。
  4. 实例拆分,用来将之前在同一个实例里面的多个schema 拆分到不同的实例里面
  5. 每天将实例的元数据进行快照,如慢查数据,数据目录大小等,方便实例的历史数据分析。

5、日志管理

数据库运行最多的就是SQL,优化SQL是DBA的职责。面对那么多的实例,如果没有一个日志系统,只能通过登录每台DB主机去发现慢查将是一件非常痛苦的事情。为了解放DBA的双手,同时更好的发现和优化慢日志,保证DB的稳定性,ZanDB 日志系统由此诞生。

首先实例元数据收集的过程中,会统计慢查和被kill的SQL的数据,然后更新到实例的元数据中。通过实例元数据的慢查信息,获取昨日的TOP 慢查。

那么如何去获取慢查呢?当然要通过伟大的agent去获取慢查日志。慢查在每天都会进行rotate,产生一个新的慢日志文件。系统要获取慢查详情的时候,通过调用pt-query-digest,分析慢日志文件,将结果缓存起来,进行返回。系统下次再获取慢查的时候,如果发现该日期的慢查已经存在分析后的结果,直接返回。

同时,日志管理里面还包含了被kill的SQL的top情况,和慢查是类似的。

6、元数据管理

元数据管理包含了binlog 元数据、主键的溢出校验,分片信息等。

通过binlog 元数据管理,实现了所有实例的binlog信息管理。binlog元数据记录了实例的每个binlog起始时间和结束时间,binlog 保留时长,在进行数据恢复的时候可以快速的定位到某个日志。

通过主键溢出校验,我们可以及时的发现哪些表的主键自增已经达到了临界值,避免因主键自增溢出无法插入导致故障。

由于交易等核心库数据量非常大,分析慢查等相关信息的时候,需要根据分片键找到对应的实例。我们开发了一个分片元数据查询功能,只要提供数据库名、分片id和分片数量,就可以快速的定位到一个实例,大大的方便了DBA,实现了问题的快速定位。

7、日常维护

日常维护主要是通过agent执行,包括了批量执行SQL,批量修改配置等。

批量执行SQL是选择一批实例,执行维护的SQL。例如,需要修改内存中某个参数的值,或者获取参数的值。这个SQL只允许维护相关的,DML 是不允许执行的。

批量修改配置和执行SQL类型的修改配置类似,不同的是,修改配置是会同步变更配置文件,永久生效,同时也修改内存,例如调整慢查时间等。

五、展望

整套ZanDB 系统是采用了Python Django + Percona-Toolkit + Agent + 前端相关技术,同时利用了缓存Redis 和 MySQL 后端DB,整套系统采用的技术栈较简单,实现的功能对于目前来说比较实用。后续会加入数据库性能诊断,自动分析数据库慢查,获取关键信息,自动化拆库等功能。相信随着自动化的深入,DBA的手动重复操作将越来越少,将有限的时间投入到更有价值的事情上去。

原文来自 有赞的技术博客 

时间: 2024-11-23 03:21:50

有赞MySQL自动化运维之路—ZanDB的相关文章

MySQL自动化运维工具 Inception

Inception 详细介绍 Inception -- 集审核.执行.备份及生成回滚语句于一身的MySQL自动化运维工具 MySQL语句的审核,在业界都已经基本被认同了,实际上也是对MySQL语句写法的统一化,标准化,而之前的人工审核,针对标准这个问题其实是很 吃力的,标准越多,DBA越累,开发也越累. 那么在这个都追求自动化运维的时代,审核也必须要跟上步伐,因此Inception诞生了.而Inception可以做的工作远不止是一个自动化审核工 具,同时还具备执行,生成对影响数据的回滚语句(类似

微店MySQL自动化运维体系的构建之路

前言   互联网时代,数据库如何满足敏捷开发.敏捷交付的要求?传统靠DBA人肉执行的方式,但在面对大量业务需求时,DBA手速再快,记忆力再好估计也不能提供好的数据库服务.在介绍自动化运维之前,我们先来了解下如何使用数据库.   数据库的使用方式主要有两种:   应用混合部署(实例):有新数据库需求时,很多人都会选择找个实例,建个数据库和帐号提供给业务.   好处是能快速提供数据库服务,这种方式在数据库运维的过程中会出现一些问题: 第一,相互影响,个别应用有问题会影响所有数据库: 第二, 应用DB

利用python实现批量自动化运维脚本案例

本文为通过密码或密钥实现python批量自动化运维脚本案例分享 #!/usr/bin/env python # this script comes from beijing oldboy trainning. # e_mail:70271111@qq.com # function: remote multi exec cmd by ssh. # version:1.1 ################################################ # oldboy trainn

新浪微博平台自动化运维演进之路

内容来源:2016年12月16日,微博产品资深运维架构师王关胜在"GIAC全球互联网架构大会"进行<新浪微博平台自动化运维演进之路>演讲分享.IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布. 阅读字数: 2557 用时: 4分钟 点击嘉宾演讲视频观看 Sina Weibo业务介绍 微博业务简介 微博平台是属于偏后端的一个产品,它所提供的服务就是固定量的接口,比如信息流里的接口.用户接口.关系接口等等. 微博核心业务 微博最核心的产品就是信息流,以信息流为中心出发,

阿里云大数据计算平台的自动化、精细化运维之路

免费开通大数据服务:https://www.aliyun.com/product/odps 作者简介:   范伦挺 阿里巴巴 基础架构事业群-技术专家 花名萧一,2010年加入阿里巴巴,现任阿里巴巴集团大数据计算平台运维负责人.团队主要负责阿里巴巴各类离在线大数据计算平台(如MaxCompute.AnalyticDB.StreamCompute等)的运维.架构优化及容量管理等 1.前言 本文主要会从以下四个方面来写,分别是: 阿里大规模计算平台运维面临的一些挑战: 阿里自动化平台建设: 数据精细

阿里大规模计算平台的自动化、精细化运维之路

本文转载于:高效运维公众号 作者:范伦挺 作者简介: 范伦挺,阿里巴巴 基础架构事业群-技术专家.花名萧一,2010年加入阿里巴巴,现任阿里巴巴集团大数据计算平台运维负责人.团队主要负责阿里巴巴各类离在线大数据计算平台(如MaxCompute.AnalyticDB.StreamCompute等)的运维.架构优化及容量管理等 1.前言 本文主要会从以下四个方面来写,分别是: 阿里大规模计算平台运维面临的一些挑战: 阿里自动化平台建设: 数据精细化运维: 我对运维转型的思考和理解: 2.在阿里我们面

Linux集群和自动化运维

Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技术丛书) ISBN 978-7-111-54438-8 I. L- II.余- III. Linux操作系统 IV. TP316.89 中国版本图书馆CIP数据核字(2016)第176055号 Linux集群和自动化运维 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037

MySQL智能运维与实践,看关系型数据库如何优雅应对云时代

随着互联网场景的导入,非结构化的海量数据给传统数据库的处理能力带来了极大的挑战,作为最受欢迎的开源关系型数据库,MySQL一步步地占领了原有商业数据库市场.如今Google.Facebook.网易.淘宝等大公司都在使用MySQL数据库.而MySQL的发展也从1.0到如今的8.0版本,其功能的完善和稳定性也得到了很好的保证. 本文包含以下三部分: MySQL8.0 的新特性 云时代MySQL的运维实践 金融行业最佳应用场景 今年8.0版本将会带来哪些惊喜呢? MySQL 8.0 新特性一览 1.I

优云蒋君伟:自动化运维成本仍然很高

9月10日-11日,上海光大国际会展中心隆重举办了"2017上海站CNUTCon全球运维技术大会".本次大会的主题是"智能时代的新运维",各个公司为观众带来了他们关于该主题的思考,并分享了他们的实践经历.InfoQ有幸邀请了杭州优云软件有限公司的产品副总裁蒋君伟老师接受我们的采访.谈到对自动化运维未来的展望,蒋老师表示自动化运维必然是大势所趋,但是因为相关技术债务的存在,自动化运维的成本还很高.那优云自己的技术与产品是如何去做高效运维的呢?本次采访带你了解一二. I