之前写的一个数据库平台,使用的Django。本来数据库平台是包含了很多的部分,但是自己没有太多时间投入到上面,所以当时的数据库平台的各个部分使用了很多的开源系统,修改了部分代码适配后使用了,所以我的数据库平台中只是自己写了数据库cmdb 部分,还想讲一些统计信息放到上面进行展现,只是实现了慢查询统计的定时收集展现。定时任务通过celery执行。认证使用cas进行认证。代码实现了多环境,可以指定不同的环境,dev,test,prd。方便连接不同环境的配置。使用gunicorn部署。
cmdb这个不太好标准化,都有自己的特殊需求,会跟运维的cmdb进行交互,主要是获取部门业务线信息,将db归属到具体业务线下面。cmdb相当于中枢系统,需要与各个组件交互,所以如果每个组件没有统一在数据库平台上实现,需要制订好接口,各个部分通过接口或者消息队列与数据库平台交互。更多常见的是脚本中暴力的直接sql写到库里,这种的也行,能用就行呗,就是low了点。
数据库数据同步系统
这个主要是当时开发会提很多的MySQL数据同步的请求。将数据从线上同步到测试,预上线等,次数也不少,每次手工去同步真的是忙不过来,所以提前就做了一个单独的在线同步系统,使用的ldap认证,开发登陆后,自己提个单子,然后可以自己执行同步,同步任务使用的celery异步执行,执行完成后,可以发送webhook 提示成功信息。也可以将数据导出成sql文件或Excel文件,并且可以在界面上获取文件,这个功能肯定不合规的,后面就禁用了。使用的查询平台进行下载。当时没有工单系统,所以开发对数据库的一些申请操作,有的放到这个系统上了,后面有了工单系统后,权限的开通都转移到工单系统上了。
数据库的创建
这个部分需要需要跟很多系统进行交互,cmdb,查询平台,sql审核平台,授权,域名,调用的接口很多,或者直接放到队列,让各个部分去消费。这个有点复杂了,直接用接口就可以,毕竟qps不会很高。
数据库实例安装部署
在数据库同步系统中使用了salt api进行部署,当时是测试通过了,但是没有真正用,主要是当时没时间,也没心情搞了。
总体来说,数据库平台的各个组件我基本上都实现了,虽然不是一个完整的统一平台,但是通过接口可以将数据串联起来形成数据的闭环。
我实现的数据库平台的组件包含:
cmdb python
数据同步 python
基于master slave的定时任务平台 golang
dbagent,收集数据库的信息,进行报表展示,告警,容量规划等。 golang
mysql数据对比 golang
备份agent,这个备份的调度是linux crontab执行的,应该使用上面的定时任务平台管理,更方便。 python
使用的开源组件包含:
查询平台 python,查询平台在添加新数据库的时候,需要重启,应该部署多个节点,上面挂nginx,轮询重启。
sql审核平台 python
监控告警
高可用, 高可用这做的不多,主要是工作上没有条件去做,都是手工处理,切换。
自己写的脚本:
大事务分析脚本 python
processlist故障分析脚本 python
variables 对比 python
表结构对比 python
输出cluster架构信息脚本 python
脱敏脚本,python 脱敏脚本跟业务强相关无法通用,需要考虑幂等性。
mysql数据系统表空间解析 这个是实验性质的开发, golang
关于中间件,个人感觉vitess更好,因为是golang开发的,相对比其他中间件,dba能容易hold住,有大厂线上使用,缺点是使用条件高,运维成本高,掌握源码成本高。
vitess源码研究中
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25719946/viewspace-2853708/ ,如需转载,请注明出处,否则将追究法律责任。