构建MySQL自动化平台思路

导读

作者:田帅萌(邮箱:tplinux@163.com,欢迎交流)

知数堂MySQL DBA班第9期优秀学员,Python运维开发班第5期学员,现任职知数堂助教


本人在日常工作中,用Python写了一个DB平台。

下面简单地嗦一嗦目前的主要思路和未来展望吧~640


目前主要功能支持:

640?wx_fmt=png


下一个迭代版本

640?wx_fmt=png

高可用模块:打算使用(??和MGR),作者不想用MHA,无理由....smiley_29.pngsmiley_29.pngsmiley_29.png

这里做个小预告,可能下周或者下下周。我的好基友顺子要给大家讲讲MHA的故事。请期待~~

备份上传:打算传ceph中,提供上传和下载服务。

慢查询收集:慢查询日志输出到elk中,或者使用pt-query-digest工具进行统一收集。

权限控制:整体系统的权限控制。

等等等等.................

主要技术栈:

640?wx_fmt=png


如何实现自动化

自动化的前提是要实现标准化,如果不能实现标准化,那么我还是请你先实现标准化吧。(虽然也可以实现,成本也是巨大的)

为了实现自动化,首先要统一的操作版本和MySQL分支版本,

操作系统版本:基于redhat或centos系列 

6系列不能低于6.8 ,7系列不能低于7.4 。

MySQL主流分支有MySQL官方、Percona、MariaDB版本

作者个人认为 MySQL官方版本才是王道,

所以在安装的时,为了统一版本,所以选择为MySQL5.7.最新。

那么MySQL官方其他版本呢?

MySQL5.5 5.6太老,不考虑接入,尤其在新平台的开发。(低于5.7的请尽快升级)

MySQL8.0太新,作者头不铁,等等再说吧...

那么简单说一下安装部署的思路吧,目前只有单机版本。

因高可用到现在没想好到底该怎么玩,所以目前只有单机版。

利用svn/git 做版本控制,svn/git中主要包含: MySQL配置文件集合、MySQL DATA目录、MySQL安装包 MySQL tooL工具等等

整体流程如下:

640?wx_fmt=png


文字简述

安装前需要进行如下判断。

1、判断端口是否存在。

2、判断data目录是否存在。

3、是否有剩余空间(至少要剩余10G+)。

4、MD5值校队。

640?wx_fmt=png

640?wx_fmt=png

如果条件全部满足的话。

开始计算软件包、data包的MD5值,是否跟svn/git 目录中的是否一致。如果不一致则,执行svn up命令,一直到MD5值,为止。

创建data目录,创建软连接.....这里和普通手动安装的方式一样。
替换MySQL配置文件:主要替换端口和server_id (server_id)生成规则 ip最后一位加MySQL Port。

640?wx_fmt=png

目前只提供3个规格。

1、低配 4C8G。

2、中配8C32G。

3、高配16C64G。

还支持创建DB、授权,授权只支持:只读和开发增删改查权限。

640?wx_fmt=png

在这个平台中提供对MySQL巡检支持的

640?wx_fmt=png

可以获得当前状态 每秒的QPS、TPS、DML的操作,每秒线程创建、运行、销毁,锁的时间、临时表、binlog、 network、 InnoDB buffer 等相关信息。

关于MySQL使用情况 例如是否有冗余索引、当前DB的大小、存储引擎使用情况、主键信息、Innodb锁信息(具体SQL)、是否有大事物、内存消耗、临时表信息、是否存在全部扫、那个表的IO消耗最高等等等等。(之前写巡检,大大小小都写了至少4个版本了,辛酸脸)

当前系统最具有核心竞争力的功能这就是-----故障收集了。

主要思想,当MySQL服务故障,执行诊断命令,例如top、free、vmstat、iostat、SHOW  PROCESSLIST 等常用排障命令。

并发执行同时执行如下命令。如果没执行完机器就挂掉了也是没关系的,因为在特殊的环境下,你的系统马上要发生宕机、或者马上要发生OOM。主要保障在操作系统宕机、OOM之前,收集有用的证据。

什么时候用:例如你通过监控、报警发现你的MySQL响应速度慢,主从延迟、产生了大量锁等等的时候来手动触发。就好比一个病危的人,刚刚进入了医院,这个功能就等于医院的病危检查,方便于的日后发现蛛丝马迹。

可能是作者,乙方做多了吧,在巡检和故障收集这里用了很多的时间和精力。

未来展望,可以自动执行:当CPU超过?%、大量DML语句产生了阻塞、主从延迟多少秒、服务假死,可以自动执行一次,并且判断是否需要下线该主机。这需要很多的基础功能的完善。

除此以外,在备份模块中提供逻辑备份、物理备份。逻辑备份可以支持备份数据/表结构。在后续版本中可以完善支持备份某个表的数据/表结构,并且提供下载表结构的功能。

640?wx_fmt=png

备份任务是基于salt实现的,做到分钟和小时级别可以指定,某小时、某分钟,最大的维度是小时级别。例如(2:20,备份每天都要做的哦~)

640?wx_fmt=png

640?wx_fmt=png

对于DBA来说,更看重周边的小工具,最好能够点点点把日常的工作给搞定,例如部署、上线等一些重复的工作。把更多的时间用于做更有意义的事,例如如何优化业务、如何让SQL跑的更快、如何更好地配合业务方。

对于开发来说,他们更看重的是SQL的执行效率,也就是慢查询。还有自助上线,这样会大幅减少上线流程。

遇到的坑 

其实在第一个版本的时候我采用SSH来传输包或者执行命令,最大的问题。

安全,如果能获得你存储密码或者key,那么是不是可以为所欲为了。

执行,SSH在执行命令的时候可能会造成执行一半,因为的发送端出现问题例导致无法继续执行。还容易造成数据包的不完整,MD5校对不一致哦。

在命令传输和执行上 我使用调用salt api的方式 salt api 本身就可以做到权限的控制,并且salt 支持异步模式,提示了执行效率,也尽量避免了命令执行一半出错。在文件传输上, 我使用svn+MD5校对的方式 如果MD5失败 则执行svn up方式 重新传md5失败包,避免重新传输所有包。

效率,需要代码层实现异步,浪费时间和代码,并且不好控制。

还要一定 一定 一定做好日志的输出,2_05.png2_05.png会帮助自己快速排障。否是排障真的会怀疑人生。

除了遇到坑,还被吐槽页面low啊 ,不好看,没关系。

我司前端妹子2_04.png2_04.png,下周开始一起做项目,请大家一起期待下一次的分享。

时间、篇幅有限,如想跟作者深入,欢迎加入知数堂技术交流群。


640.gif?

扫码加入知数堂4群-王者峡谷

(QQ群号:650149401)

群内@各位助教获取更多课程信息

640?wx_fmt=png



加入知数堂

年薪轻松40万+



640?640?640?640?


知数堂

叶金荣与吴炳锡联合打造

领跑IT精英培训

行业资深专家强强联合,倾心定制

MySQL实战/MySQL优化/MongoDB实战

/大数据实战/ Python/ SQL优化

数门精品课程

紧随技术发展趋势,定期优化培训教案

融入大量生产案例,贴合企业一线需求

社群陪伴学习,一次报名,可学1年

技术主管、DBA、运维、开发、架构师必修课

上千位学员已华丽转身,薪资翻番,职位提升

改变已悄然发生,你还在等什么?

640.png?


扫码下载知数堂精品课程试听视频

(MySQL 实战/优化、MongoDB实战、大数据实战、Python开发,及SQL优化等课程)

密码:hg3h


640?wx_fmt=png

640.png?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值