微店MySQL自动化运维体系的构建之路

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生网关 MSE Higress,422元/月
简介:
前言
 

 

互联网时代,数据库如何满足敏捷开发、敏捷交付的要求?传统靠DBA人肉执行的方式,但在面对大量业务需求时,DBA手速再快,记忆力再好估计也不能提供好的数据库服务。在介绍自动化运维之前,我们先来了解下如何使用数据库。

 

数据库的使用方式主要有两种:

 

应用混合部署(实例):有新数据库需求时,很多人都会选择找个实例,建个数据库和帐号提供给业务。

 

好处是能快速提供数据库服务,这种方式在数据库运维的过程中会出现一些问题:

  • 第一,相互影响,个别应用有问题会影响所有数据库;

  • 第二, 应用DB的性能指标(QPS,TPS,RT...)不能获取;

  • 第三,定位问题源困难;

  • 第四,资源使用不合理。

 

为了解决以上问题,最终会有拆库的过程,拆过库的同学都知道,一个拆库动作需要确认很多东西,所花费的时间是非常多的,过程中容易产生故障。

 

应用独享(实例):在虚拟化,微服务深入人心的今天,应用独享实例是数据库给出的解决办法。我们做到的是所有应用独享实例(分库分表的应用如:分成32个库的应用,业务初期阶段会分布在几个实例中,业务确实需要更多资源时再进行自动化拆库扩容)。这种方式需要大量的实例,传统单机单实例的运维体系就需要演变成单机多实例的方式。

 

由此引出会有一系列问题需要解决:

  • 如何快速提供数据库服务?

  • 如何避免数据库资源合理分配?

  • 数据库监控怎么做?

  • 多实例数据库HA怎么做?

 

MySQL的标准化与自动化
 

 

我们实现的MySQL自动化运维体系能够解决规模化的痛点,主要包括实例创建、部署、监控、备份、HA切换、迁移、扩容等方面的自动化,所有模块的主发点是要能“自动化”的方式运作,尽量少的人为参与。

 

一、标准化

 

数据库上了一定规模后,数据库的各方面都需要标准规范起来,才能接下去做自动化。实例上的标准化我们主要做了以下几点:

 

1、应用独享实例

 

2、数据库M<==>S结构,备库不提供业务流量(异地容灾除外)

 

很多人会选择一主多备,备库提供读流量。这种架构引起的故障挺多的,因为备库一定会存在延时,备库机器也会挂掉。事实上大部分时候流量都在主库是没问题,如果确实主库压力真的太大怎么办,我们应该及时发现问题并作出应对(方法可以是缓存+拆库)。

 

3、MySQL标准化(带thread_pool 功能MySQL)

 

  • 数据库版本一致

  • “相同”的my.cnf(除个别个性参数如server_id,buffer_pool_size等)

  • 文件目录一致

 

二、构建MySQL自动化运维体系

 

一套好的大规模运维体系DBManage,整体思路是让一切自动化起来,不需要打通机器间的信任关系,避免或减少人为参与。

 

 

1、多实例创建

 

一台机器上面开启多个不同的端口,运行多个MySQL服务进程,共用MySQL程序,使用不同配置文件,提供服务。

 

关键点:

  • “相同”的my.cnf(除个别个性参数如server_id,buffer_pool_size等)

  • 数据文件目录标准化

  • 创建实例(1.初始化一个标准的数据库,2.新建实例通过rsync控制速率,通过修改 " my.cnf " 文件新建不同实例,因为mysql_install_db安装新实例会占用过多IO)    

 

2、元数据与监控

 

数据库监控没有采用类似“lepus”的方式,中心控制的方式对于规模化精细化数据库管理冲突。

 

中心化存在问题:

  1. 增加实例需要手动录入;

  2. 不能获取响应时间RT(tcprstat);

  3. 不能获取主机性能数据等等。

 

我们采用自研 db_agent 实现实例的自动发现,各项元数据及性能数据采集,告别人工处理。

 

每台数据库服务器上运行db_agent;自动发现实例,自动采集实例数据,主机数据,磁盘数据,自动添加监控。db_agent主要实现以下功能。

 

  • 采集实例信息(数据库列表,复制信息,表元数据等等)

  • 心跳更新(每秒更新,因为show slave status的延时是不可靠的)

  • 数据库性能数据( QPS, TPS......)

  • 数据库响应时间RT(tcprstat)

  • 实时慢SQL

  • 主机性能数据(告别Zabbix)

 

3、备份

 

数据库机器部署备份脚本(不区分是否主备机器),告别手动配置。

 

  • 只备份备库(备份前判断脚色)

  • 多实例并发控制(控制速率及时间)

  • 直接写入HDFS 或Server(推荐HDFS存储)

 

4、本地执行agent

 

远程操作DB机器(创建实例,恢复数据库,etc),通过自定义一些消息调起DB机器对应脚本进行操作。

 

5、监控告警

 

基于db_agent采集数据,性能画图及告警。性能数据写入graphite。

 

6、MySQL高可用

 

传统的使用MHA做MySQL HA架构是比较通用的方案,主要特点:通过Health Check 监控MySQL集群,应用通过VIP访问MySQL,VIP通过keepalive选主。这里不展开这种方式和一些改进型(Zookeeper +MHA)的痛点,主要讲下多实例下基于Zookeeper是怎么实现MySQL自动化高可用。

 

改造后的HA架构,跟通常架构的区别在于我们去掉了MySQL集群里的VIP,使用VDDS替代;完全去掉MHA。通过Zookeeper分布式,实现ha_console的高可用。

 

 

整个流程是:

 

  • VDDS(微店分布式数据库) 新建应用配置

  • ha_agent向Zookeeper注册临时节点,并实时更新实例信息。

 

{

    "source_db_role": "slave",

    "master_instance": "192.168.1.12_3306",

    "repl_status": "ok",

    "h_time_delay": 0,

    "repl_delay": 0,

    "last_change_time": "2016-10-15-01:00:45"

}

 

  • ha_console根据Zookeeper节点信息构造切换元数据(包括延时,切换对象,复制状态)

 

"192.168.1.11_3306": "{

    "source_db_role": "master",

    "master_instance": "192.168.1.12_3306",

    "repl_status": "ok",

    "h_time_delay": 0,

    "repl_delay": 0,

    "last_change_time": "2016-10-15-01:00:45"

}"

 

  • ha_console监听alive目录临时节点

  • alive目录临时节点消失进行切换(判断延时及复制状态,不符合条件不切换),切换VDDS和数据库

  • 切换前记录切换信息(slave:master_log_file: mysql-bin.000007,exec_master_log_pos: 57830。主库恢复后,用来生成日志解析)

 

场景一:实例Crash,实例所在的服务器正常运行,ha_agent运行正常。

 

实例Crash,ha_agent 正常运行,主动删除Zookeeper 临时节点,ha_console 判断数据库角色,是主库走切换流程。原实例起来之后,作为备库运行。 

 

场景二:实例所在的主机Crash。(实例和ha_agent同时Crash)

 

此时,由于ha_agent和实例同时Crash,Zookeeper到ha_agent间的通讯失败。Zookeeper 等待超过租约的时间,ha_console 判断数据库角色,是主库走切换流程。原实例起来之后,作为备库运行。 

 

场景三:实例正常,网络异常。

 

网络异常会发生大量实例掉线或部份异常。大量节点异常:ha_console判断时间范围内异常实例数量,超过阀值不进行切换,同时切换过程:切换脚本会去判断数据库状态,避免误切。(Zookeeper client 连接掉线后,尽管实例及ha_agent正常运行,节点不能重用必须等待超时)

 

特点:完全不需要人工建入,切换元数据自动构建,所有实例自动注册,构造完整的切换元数据,避免了繁锁的配置或配置出错导致不能切换。

 

7、DBTask

 

通过DBTask 替代人工操作。实现了数据库创建,配置VDDS, 数据库迁移,拆库扩容,恢复等等。整体思路是分解动作,每个脚本干一件事,再串起所有脚本。以数据库迁移为例我们可以分解为各个子任务,串起任务就是一个完整的自动化数据库迁移任务。

 

数据库迁移:

  • 申请可用资源

  • 实例创建

  • 恢复备库A

  • 恢复备库B

  • 配置数据源(VDDS)

  • 切换前检查

  • 切换

  • 清除VDDS配置

  • 关闭老实例

 

数据库资源申请:

  • 申请可用资源

  • 实例创建

  • 新建库,MySQL帐号

  • 配置数据源(VDDS)

 

成果及展望
 

 

全套自动化运维体系采用:后台由python+shell+go(实时慢SQL解析部分);前端采用laravel+angularjs。 目前单机日常环境运行100+实例,agent的资源占用不多;业务申请数据库资源<1分钟完成;自动化拆库(部份老的合在一起的还是要拆的)等等。

 

另外随着MySQL自动化运维的深入,我们慢慢地发现这将会演变数据库成私有云平台。对于如何更好地服务业务,如何诊断业务数据库等还需要我们去完善。

 原文发布时间为:2016-12-27

本文来自云栖社区合作伙伴DBAplus

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
53
分享
相关文章
运维实战来了!如何构建适用于YashanDB的Prometheus Exporter
今天分享的是构建YashanDB Exporter的核心设计理念和关键方法,希望也能为你的运维实战加分!
微店API开发全攻略:解锁电商数据与业务自动化的核心能力
微店开放平台提供覆盖商品、订单、用户、营销、物流五大核心模块的API接口,支持企业快速构建电商中台系统。其API体系具备模块化设计、双重认证机制、高并发支持和数据隔离等特性。文档详细解析了商品管理、订单处理、营销工具等核心接口功能,并提供实战代码示例。同时,介绍了企业级整合方案设计,如订单全链路自动化和商品数据中台架构,以及性能优化与稳定性保障措施。最后,针对高频问题提供了排查指南,帮助开发者高效利用API实现电商数智化转型。适合中高级开发者阅读。
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
微店商品详情API接口实战指南:从零实现商品数据自动化获取
本文介绍了微店商品详情API接口的应用,涵盖申请与鉴权、签名加密、数据解析等内容。通过Python实战演示了5步获取商品数据的流程,并提供了多平台同步、价格监控等典型应用场景。开发者可利用此接口实现自动化操作,提升电商运营效率,降低人工成本。文中还总结了频率限制、数据缓存等避坑指南,助力开发者高效使用API。
云数据库:从零到一,构建高可用MySQL集群
在互联网时代,数据成为企业核心资产,传统单机数据库难以满足高并发、高可用需求。云数据库通过弹性扩展、分布式架构等优势解决了这些问题,但也面临数据安全和性能优化挑战。本文介绍了如何从零开始构建高可用MySQL集群,涵盖选择云服务提供商、创建实例、配置高可用架构、数据备份恢复及性能优化等内容,并通过电商平台案例展示了具体应用。
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
LangGraph 是一个基于图结构的开源框架,专为构建状态化、多代理系统设计,支持循环、持久性和人工干预,适用于复杂的工作流自动化。
203 12
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
构建深度可观测、可集成的网络智能运维平台
本文介绍了构建深度可观测、可集成的网络智能运维平台(简称NIS),旨在解决云上网络运维面临的复杂挑战。内容涵盖云网络运维的三大难题、打造云原生AIOps工具集的解决思路、可观测性对业务稳定的重要性,以及产品发布的亮点,包括流量分析NPM、网络架构巡检和自动化运维OpenAPI,助力客户实现自助运维与优化。
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
416 3
基于AI的网络流量分析:构建智能化运维体系
基于AI的网络流量分析:构建智能化运维体系
491 13
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等