熙海啵啵

标题: 京东到家MySQL容器化实践 [打印本页]

作者: admin    时间: 2021-6-5 10:52
标题: 京东到家MySQL容器化实践
本文介绍了京东到家MySQL容器化的实践,包括基于容器的底层资源平台、监控系统及数据库自动化运维平台。同时也详细介绍了具体的技术实现,包括软硬件选型、容器调度算法、数据库高可用实现、监控系统及数据库自动化运维平台开发。

1.背景随着京东到家业务的快速发展,MySQL数据库的访问量越来越大,在云主机上搭建MySQL越来越无法满足我们的要求。
基于上述原因,我们最终选择采购物理机,在物理机上将MySQL容器化部署来解决
以上问题。
2.技术方案我们认为一套完善的数据库运维方案包括以下几个部分:数据库底层资源平台、监控系统及数据库自动化运维平台。
图1 整体架构
[attach]159[/attach]
数据库底层资源平台
监控系统
监控系统采用Zabbix,其中每个容器的监控数据(CPU、内存等)通过Docker Api来获取。数据库自动化运维平台基于Python和Flask框架,开发MySQL自动化运维平台,实现MySQL完整生命周期自动化运维,提高运维人员的工作效率。3.技术实现
3.1 数据库底层资源平台的搭建
软硬件选型
MySQL运行的场景需求为高并发高IO,我们在软硬件上做了如下选择: 对基于容器的MySQL实例和基于云主机的MySQL实例,同规格下进行了压测对比,云主机中MySQL QPS最大值23K。[attach]160[/attach]
图2 云主机压测结果
容器中的MySQL充分利用了本地SSD硬盘的高IO, QPS最大值达90K。
[attach]161[/attach]
图3 容器压测结果
容器化后MySQL性能远超云主机上的MySQL,完全可以满足京东到家当前的MySQL性能需求。
容器调度算法
MySQL作为一种有状态的服务,DBA不需要对之进行频繁的操作,要保持相对稳定和健壮,我们自行定义了规则算法来进行容器的调度。
基于以上原则,我们开发了容器调度系统,对容器的分配进行整体调度。
[attach]162[/attach]
图4 容器调度系统
MySQL的高可用实现
到家应用服务器访问MySQL是通过域名方式来进行连接的,我们对MHA和Zabbix监控系统进行二次开发,故障时通过快速更改域名解析来进行故障切换。整个切换过程在10秒内可以完成。
[attach]163[/attach]
图5 数据库高可用架构

Zabbix监控系统发现MySQL发生宕机后,首先判断是主库还是从库,如果主库宕机由MHA Manager来进行处理,从库宕机由Zabbix监控调用脚本来进行处理。
主库宕机:MHA Manager将Master_Log_File和Read_Master_Log_Pos最高的从库提升为新主库,同时MHA Manager也会调用DNS解析接口将主库域名解析到新主库IP。由于域名DNS解析可能存在缓存,域名更新生效时间可能比较长。故障切换系统同时会根据宕机的MySQL数据库域名查找连接的所有应用服务器IP,通过Saltstack批量修改/etc/hosts文件绑定域名到新IP,下发到各应用主机上,缩短域名解析生效时间,能达到秒级解析生效。
从库宕机:由Zabbix调用DNS解析接口,将宕机从库绑定的域名解析到主库上,后续操作与主库宕机操作流程类似。
[attach]164[/attach]
图6 数据库宕机处理流程
3.2 监控系统到家的监控系统采用的是Zabbix,使用自定义模板对MySQL运行状态进行监控。需要注意的是Docker内部CPU和内存的监控数据从OS层的获取值并不准确,我们通过调用Docker Api的方式进行采集,再汇总到Zabbix。
[attach]165[/attach]
图7 监控数据zabbix展示
Zabbix通过设置触发器,当出现告警时自动执行自定义脚本,利用这个功能,可以实现MySQL故障后自愈的功能。3.3 开发自动化运维平台 我们基于Python和Flask开发了MySQL自动化运维系统,从MySQL资源申请、实例创建、销毁、主从架构部署、集群不同角色备份策略的选择、监控添加、销毁等,将MySQL整个生命周期实现流程化和自动化。MySQL申请及交付
[attach]166[/attach]
图8 申请信息
研发通过数据库运维平台申请MySQL资源,经DBA审批后,程序根据容器调度算法,后端会自动创建一套主从架构的MySQL数据库集群。并为MySQL自动添加相应的账号及授权,账号类型包含:监控、备份、主从、工具类等。同时容器创建之后就包含:MySQL服务端、Zabbix客户端、Saltstack客户端、Percona Toolkit、备份脚本、慢日志切割脚本等。整个过程已实现自动化,并且基于镜像快速创建容器,5分钟内可交付一套完整可用的MySQL集群。配置变更
得益于容器的特性,调用Docker的update命令可实时改变对应容器的CPU和内存配额。从而可以不停机进行MySQL实例规格变更,实现快速扩容或缩容。
[attach]167[/attach]
图9 实例扩容
MySQL工具
MySQL交付之后,我们提供了大量的MySQL工具:语法分析工具、当前慢日志分析工具、MySQL连接数查询工具、从库延迟查询工具、主从关系查询工具、正在运行SQL查询工具、MySQL快速健康检查、物理机监控、错误日志等。这些工具方便了研发的平时使用,可以借助这些工具进行排查解决。
[attach]168[/attach]
4.总结
目前到家的MySQL实例有95%以上都运行在了容器中,容器化后的MySQL平台经受住了415周年庆、618、1020等所有大促考验,对于我们来说,目前的容器化MySQL平台给我们带来了三大好处:







欢迎光临 熙海啵啵 (http://cece56.cn/) Powered by Discuz! X3.4