写在上面
近年来,很多公司尤其是大公司(如BATJ、TMD)的数据库团队都在推广DevOps甚至AIops。 自助数据库运维提高效率、降低成本和风险,是大势所趋。
作者最初参与了360绿巨人平台的建设。 结合现有公司特点,经过不断探索和演进,我们的DBA团队逐步建立了适合中小型公司的数据库混合云平台,同时支持私有云和公有云数据库管理。
进化之路
图0
我们的数据库管理整体分为四个阶段:
(1) 手册+脚本阶段
2016年之前,数据库处于“原始状态”,全部由人工操作; 笔者自2016年加入公司以来,逐渐有脚本化。 数据库(mysql、redis 和 mongodb)开始使用脚本进行管理。 这个时候还有很多任务需要自动执行,包括自动执行脚本来管理数据库,效率比较低。
(2)标准化阶段
事实上,从2016年底到2017年,我们重点在标准化工作,包括数据库服务器的各种标准化设置,包括操作系统版本、常用软件包、文件系统和参数设置,以及部署规范和管理。 mysql、redis 和 mongodb。 规格和开发规格。 此时,除了标准化之外,还对之前的脚本进行了修改和建立,提高了效率,为后续的平台化奠定了基础。
此外,还进行了平台探索。 此时主要是PHP工程师根据DBA的需求开发了第一版数据库管理平台。 功能尚未建立,不支持自动化、自助服务。
(3)自动化阶段
进入2018年,考虑到PHP工程师忙于业务开发,无法及时满足DBA的需求,DBA决定自行开发。 考虑到PHP上手快,学习成本低,我们决定在第一个版本的基础上继续开发。 该平台基于Thinkphp框架,更适合数据库平台建设。
经过近一年的发展,基本实现了mysql、redis日常工作的一键处理,显着简化了DBA操作流程,提高了效率。
(四)自助阶段
2019年,我们开始考虑并实施自助服务。 开发者提交工单后,平台自行处理,基本实现7*24不间断提供数据库工单服务。 这样就大大节省了DBA的人力,提高了效率。 此时就实现了mysql和redis集群部署的一键处理,DBA效率变得更加高效。
根据实际情况,mongodb自助服务还在建设规划中。
总体设计
该平台采用典型的lnmp组合,基于Thinkphp框架开发。 DBA可以边学习边发展,可以快速上手。 非常适合基础薄弱的DBA开发自己的数据库平台。
(一)架构设计
平台架构如下:
最上层是PHP服务,包括nginx服务。 PHP服务通过服务中心与数据库进行交互(所有数据库服务都注册到服务中心)。 有些功能需要中间件处理,如mysql初审工具、pt工具、salt-api和fastdfs等; 服务中心采用QConf中间件,使用方便、稳定。
图1
平台除了支持公司内部数据库管理外,还将公有云mysql注册到服务中心,和内部数据库一样使用,非常方便。
(2)技术栈
开发语言:php python
开发框架:Thinkphp
自动化工具:salt-api
服务中心中间件:QConf
分布式存储:fastDFS
数据库:mysql、redis、mongodb 和 RDS
mysql工具:pt工具
Sql初审工具:inception
阐明:
1)QConf作为数据库服务中心,平台通过调用QConf API获取数据库服务节点。 开发时只需要知道数据库端口信息即可进行数据库操作,简单可靠。
2)平台通过调用salt-api实现数据库集群部署,非常简单。
3)fastDFS作为分布式存储,用于存储数据库相关的日志文件,方便开发和查看。
特征
该平台主要包括以下几个部分:
图2
工单系统
工单系统主要包括:mysql、redis工单、mongodb、mssql还在建立中。
(1)Mysql工作指令:
MySQL工单类型主要包括以下三类:
1)自助点餐
包括建库、建表、数据变更、字段变更、删除表、添加索引、删除索引、删除表。 开发提交工单后,默认可以自行处理该工单; 为了兼容历史造成的不规范,同时提供了“手动处理”的选项,以降级为“自动”或“手动处理”。 该类型工单支持7*24小时服务,极大满足了开发的需求。
2) 自动化工单
包括数据库授权、truncate table、mysql实例的申请。 开发提交工单后,DBA需要点击一个按钮,即“一键处理”。 这主要是出于风险控制的考虑,后续可以考虑自助处理。 此外,为了支持需求的多样性,这些功能还支持“手动处理”。
3)非手工工单
导入数据等非常规需求目前需要DBA手动操作,暂时无法“一键处理”。
如下图所示,为用户提供了多种类型的操作:
图3
下图为MySQL工单入口。 “新建”用于提交新的工单。 同时,您可以通过选择“全部”、“未处理”、“退回”、“已放弃”来查看对应的工单。 为了方便查找工单。 Single,这里提供了sql模糊匹配功能,可以方便地查看谁执行了单个sql操作。
图4
下图显示了处于“全部”状态的工单列表。 “查看详情”可以查看工单失败的原因,方便快速定位失败原因并进行处理。 其他状态工单类似,不再赘述。
图5
下图显示了“新”工单。 为了方便开发和使用,需要先选择所属的“业务线”,然后选择“端口信息”,再选择“DB信息”。 您无需关心MySQL部署在哪里。 注:SQL需要符合《SQL标准》,您也可以点击此处的“自助初审”; 如果SQL文件比较大,建议选择“上传附件”,需要DBA自动处理。
图6
以下是“数据库授权”工单。 它与“数据更改”类型的工单不同。 选择该工单后,页面跳转至该页面。 根据您自己的需求,选择相应的权限和授权。 DBA完成处理后,平台将手动向“提交者”发送电子邮件。
图7
选择“申请mysql实例”,您将手动重定向到此页面。 根据您的需要选择以下信息。 建议“提交者”在提交工单之前与DBA讨论需求。
图8
DBA打开“申请mysql实例”工单后,不仅可以看到上图的信息,还可以看到以下信息:
图9
注:dbproxy和mha为可选,支持多从库、一主库。 DBA选择“自动处理”后,平台调用salt-api手动部署mysql实例,然后“提交者”即可提交“数据库创建”和“DB授权”等工单。
(2)Redis工单:
如下图所示,redis工单目前主要包括三类:
1)自助点餐
包括“精确键删除”和“模糊键删除”。 开发提交工单后,工单将自行处理,无需DBA处理。
2) 自动化工单
包括“申请redis哨兵实例”和“申请redis集群实例”。 开发提交工单后php工单系统,DBA需要“一键处理”,自动部署redis实例,然后发送邮件给“提交者”。
3)非手工工单
除上述需求外,对于其他需求,您可以选择“其他”类型,以兼容多种工单,例如更新密钥等。
图10
下面是一张“模糊键删除”工单,支持一次性删除多个“键前缀”。 您需要选择“业务线路”,然后选择对应的“港口信息”。 您无需关注Redis部署在哪里。
图11
以下是申请带哨兵的redis主从集群:
图12
以下是“申请redis哨兵实例”功能的页面(仅DBA角色可见)。
当DBA打开开发工单时,除了如上所示打开笔记本电脑外,还可以看到以下信息。 为了方便,redis主从端口一致,哨兵端口可以估计。 填写以下信息后,提交并手动部署redis和sentinel服务,以及添加cmdb元信息、监控和发送短信等。
图13
以下是“申请redis集群实例”的功能页面(仅DBA角色可见)。 与上图不同的是,主分片和辅分片一一对应,端口相同,部署路径可以不同。 提交工单后,可以手动部署redis集群、添加cmdb元信息、监控和发送短信,大大简化了DBA操作流程。
图14
(3) Mongodb和mssql工单
这两个暂时还在建立中,就不详细说了。
统计系统
统计系统包括:性能统计、备份统计、容量统计和流量统计。
(一)绩效统计
性能统计如下。 主要是结合zabbix监控和saltstack工具,定期收集各个数据库实例的CPU占用情况并在平台上展示。
图15
以下是具体数据库实例的趋势图:
图16
(2)备份统计
备份统计如下。 结合数据库备份系统,调用故障检测API,并将备份信息展示在平台上。
图17
以下是具体数据库实例最新备份数据量统计:
图18
(3)容量统计
结合saltstack工具,每天统计每个数据库实例的数据量,如下所示:
图19
下面是单个数据库实例近几天的趋势图,可以让您轻松看到数据量的变化。
图20
(4) 流量统计
每天定期统计各个数据库实例的流量,然后进行对比分析,方便了解数据库运行情况。
图21
以下是单个数据库实例的流量趋势图,让您一目了然地查看流量变化。
图22
检验系统
检查系统主要是定期对数据库进行测试,保证数据库的顺利运行。
如下:
图23
图24
如图所示,检查主要包括以上几个部分。 点击“新建”,平台将手动采集以上检查项目的内容。 DBA可以自己查看,最后给出测试结果。
注:为了方便更改核心数据库实例,这里提供了配置管理,您可以方便地添加或删除核心数据库实例信息。 另外,您还可以根据自己的需要添加或删除检查项目。
查询系统
查询功能主要是为了方便mysql、redis、mongodb以及数据库的开发和查看。
(1)mysql查询
选择业务线路,然后选择对应的端口信息和数据库名称。 表名是可选的,主要是为了让开发人员知道数据库包含哪些表。
该平台支持选择查询,以及查看执行计划和索引信息。 默认可查看200条记录。 无需关注mysql部署在哪里。
图25
(2)mysql自助初审
使用方法与上面类似,只是不会实际执行,而是返回初步审核结果。 如果初审成功php工单系统,会显示“审核成功”。 否则会返回不符合规范的描述,这可以帮助更改SQL。
图26
(3)redis查询
Redis查询支持查看特定key的值,以及匹配某个前缀的数量和特定key(不显示所有key),并且支持一次对多个前缀进行模糊匹配。
使用该功能只需选择业务线路以及对应的端口信息,不用关心redis部署在哪里。
图27
下面是检查某个前缀键的编号:
图28
下面显示了一些模糊匹配的键:
图29
权限系统
权限系统主要包括:
(1)群组权限控制
主要包括Web开发组、DBA、超级管理员和普通组。 Web开发群主要供开发朋友提交工单使用; DBA组用于DBA处理工单。 超级管理员不仅拥有DBA权限,还可以管理用户; 普通组 目前很少使用组。
(2)产品线权限管理
用于隔离不同产品线的开发访问数据库权限。 它以产品线为单位定义。 每个产品线包含多个数据库实例,每个数据库实例仅属于一个产品线。
(3)用户权限管理
对于用户来说,主要包括产品线访问权限和群组权限。 一般来说,开发需要Web开发组权限和相应的产品线访问权限。 DBA拥有DBA组和所有产品线的访问权限。 管理员拥有超级管理员和所有产品线的访问权限。
如下所示:
图30
审核制度
该系统用于安全控制数据库访问风险,可以轻松了解用户行为如下:
包括mysql审计和redis审计,记录用户在平台上的行为。
图31
图32
日志系统
基于salt和fastdfs存储,一组pt工具每天分析每个MySQL实例的慢日志,并将其存储在fastdfs存储服务器上。 用户可以在这里下载相应的慢日志文件,自行分析和优化MySQL性能。
图33
以下是mongodb慢日志文件:
图34
值班制度
系统自行安排dba值班,方便开发人员联系相应值班人员处理问题,方便用户处理问题:
图35
锻炼平台
这个平台最初的设计是为了练习数据库备份和恢复,提供定期备份和恢复演练的机制,也可以扩展到其他方面的演练,比如高可用演练等。
图36
其他系统
除了以上常用的系统外,我们还开发了云笔记和规范手册平台。
云笔记:为了方便记录和查询数据库相关问题和故障,我们开发了云笔记来记录和提高数据库服务质量。
规格手册平台:主要记录数据库常用规格,方便开发、查找和使用。
Cmdb系统:包含数据库实例元信息、数据库部署信息、VIP元信息、数据库表分布信息等,方便掌握和查看数据库各个维度的信息。
经验总结
在推广DevOps的过程中,我们不断探索和尝试,总结如下:
(一)结合实际制定
尤其是中小型企业,人员和技术都受到限制,很难完全自研。 建议结合开源框架和自身条件。 例如,常用的框架和技术选择是Python和PHP。 该平台最初是由PHP开发的。 ,后来我们的DBA继续开发它。 现在看来,也是一个不错的选择。
(二)注重体验
在开发内部平台时,经常会出现“无法使用”的情况。 因此,DBA必须参与数据库平台的开发或设计,并进行测试和初步验证。 建议由DBA主导开发,以保证数据库平台的发展。 进步和经验。
同时需要有“极致”的精神,以做产品的心态对待内部平台,这样才有可能搭建一个好的平台。
(三)重视标准化
无论是平台化还是自助服务,重要的前提和保障就是标准化。 只有做好标准化,才能轻松快速地推进平台化、自助化。 否则,我们每一步都会感到震惊。
(4)注重DBA的参与
在搭建数据库平台时,DBA必须参与设计和前期测试。 如果条件允许,DBA将主导平台的开发。 只有这样的平台,DBA才能“高兴”地使用。
(5)快速迭代
平台的发展不是一朝一夕就能完成的,而是根据实际需求不断建立和完善的。 另外,遵循“先易后难”的原则,不断成熟,逐步完善平台,也是一个不错的选择。
写在最后
目前该平台基本满足日常需求,但仍存在不少不足。 接下来我们将继续打造,进一步增加DBA的负担,提高用户体验,期待尽快开源。
数据库和存储管理的艺术
发表评论