php工单系统-适合中小企业的数据库混合云平台实践

写在上面

近年来,很多公司尤其是大公司(如BATJ、TMD)的数据库团队都在推广DevOps甚至AIops。 自助数据库运维提高效率、降低成本和风险,是大势所趋。

作者最初参与了360绿巨人平台的建设。 结合现有公司特点,经过不断探索和演进,我们的DBA团队逐步建立了适合中小型公司的数据库混合云平台,同时支持私有云和公有云数据库管理。

进化之路

图0

我们的数据库管理整体分为四个阶段:

(1) 手册+脚本阶段

2016年之前,数据库处于“原始状态”,全部由人工操作; 笔者自2016年加入公司以来,逐渐有脚本化。 数据库(mysqlredis 和 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实例”工单后,不仅可以看到上图的信息,还可以看到以下信息:

工单系统的流程及操作_工单系统php源码_php工单系统

图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

以下是具体数据库实例的趋势图:

工单系统的流程及操作_php工单系统_工单系统php源码

图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的负担,提高用户体验,期待尽快开源。

数据库和存储管理的艺术