干货 | MySQL云原生方案在携程开发测试场景中的实践

从传统部署到云原生:MySQL迁移的最佳路径揭秘!10大步骤详解 🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀想象一下,你有一个传统的本地MySQL数据库,每天都在稳定地运行着。但是随着业务的发展,你需要更高的可用性、扩展性和灵活性。这时候,云原生迁移就成为了一个重要的选择。今天,我们就来详细解析如何将传统的MySQL部署迁移到云原生环境。准备好了吗?我们开始吧! 阅读详情

作者简介

 

Alex,专注于云计算领域数年,目前主要从事容器云平台的建设,推进各类基础设施服务的云原生化。

小石川,目前主要从事容器云平台监控系统建设,对分布式、性能以及优化感兴趣。

一、背景与使用场景

 

随着Kubernetes平台在容器云计算领域的一统天下,云原生 (Cloud Native) 一词也被提的越来越频繁。各类应用纷纷走上了容器化、云原生化的道路,无状态服务应用在Kubernetes平台上的运行,已经得到了大规模生产级别的实践认可。

相比之下,有状态应用就没有那么顺利了,特别是那些十分重要却又"历史悠久"、不是按照分布式架构理念设计的有状态服务,尤其困难。MySQL就是其中的代表,为此我们做了诸多尝试,从一开始的MySQL单实例容器化使用本地存储,到计算存储分离的方案,走了一些弯路。最终在开发测试场景下找了一个合适的切入点,实现了一套计算和存储分离,以Kubernetes Operator为核心,以CEPH RBD为后端存储,以数据库版本化管理为特性的可行方案。

我们典型的使用场景是这样的:测试人员需要构造一个生产环境批量订单数据异常的测试场景, 他使用安全工具从生产环境拉取大量脱敏后的数据写入测试数据库,但只运行一次测试用例, 数据库就"脏了"。特别是每次上新功能还要回归测试一次这种场景,又要重复耗时在构造新数据库,真的是“构造2小时,运行5分钟”。

而有了这一套完整的MySQL实例服务后,可以快速启动任意版本的数据库实例,前面所述的痛点就彻底消失了。同时有了MySQL实例服务,对CPU 内存资源的使用也可以节省一大笔,毕竟大量的测试数据库都只要以快照的形式存储在集群中即可,实际使用时可以在一两分钟内快速启动。

 

二、可行性方案分析和性能评估

首先要解决的是计算和存储分离的问题,如果使用容器宿主机本地磁盘存储的话,MySQL实例必须和宿主机绑定,这就丧失了资源的灵活性,而且使用本地存储, 对于磁盘容量的规划会是个不小的问题。

我们团队早在2015就开始使用CEPH存储服务,主要是对象存储和块存储,运维经验和集群稳定性方面相对有保证。结合这一实际情况,我们选择使用了CEPH块存储服务作为MySQL容器实例的存储。

另一个考量则是受益于Kubernetes这个强大的平台基座,社区已经定义好了容器存储接口 (CSI),且实现了CSI driver for CEPH (https://github.com/ceph/ceph-csi),其中RBD 部分早已GA,还有提供了snapshot,resize等功能,完全满足我们的使用场景。

 

为了验证MySQL实例后端挂载CEPH块存储服务能否满足开发测试环境的数据库基本使用需求,我们基于已有的硬件情况, 做了两个场景的性能压测。主要是对比使用本地SAS磁盘存储的MySQL实例和使用CEPHRBD的MySQL实例,在性能方面是否有明显差异。其次则是测试MySQL实例后端挂载CEPH RDB存储的性能上限。

 

基本硬件信息如下 :


 使用本地磁盘的容器宿主机

   CEPH 集群所用物理机

CPU

2Socket  / 32Core / 64Thread 
 Intel(R) Xeon(R) CPU E5-2650 v3 @ 2。30GHz

2Socket  / 32Core / 64Thread 

Intel(R)  Xeon(R) Gold 6130 CPU @ 2。10GHz

Memory

188GB

256GB

Disk

2*300G,10K(1)

8*900G,10K(10)

2*240G,SSD(10)

12*8T,7。2K(JBOD)

 

构造了两个测试场景,使用sysbench执行压测:

sysbench参数如下:

参数名

参数值

备注

oltp-tables-count

64

测试表的个数64张

oltp-table-size

1000000

单表数据量100W

num-threads

[8,16,32,64,128,256]

测试线程数

times of test

3

每个线程下的测试次数

warmup time

120

预热时间,避免冷数据对测试结果的影响

max-time

120

每次压测耗时120s,重复3次

测试场景A:分别压测MySQL docker with CEPH RBD 和MySQL docker with local disk,并发数threads从低到高,8→256,对比QPS。

测试场景B:同时压测五个MySQL docker with CEPH RBD,保持并发数恒定在256,观察CEPH集群IOPS和最终MySQL QPS。

 

 

测试场景A结果:

OLTP模式压测MySQL,对于磁盘主要是随机读写操作,CEPH RBD使用了SSD作为缓存盘,随机写速度约110MB/s,而本地机械磁盘随机写速度只有48.6MB/s,所以最终性能指标QPS,使用了CEPH RBD的容器实例反而更好。

测试场景B结果:

压测CEPH RBD集群的磁盘IO上限,约算测试环境的集群能提供的QPS上限为80K。

 

结论是在开发测试环境使用CEPH RBD为后端存储的MySQL实例服务,不会比使用本地磁盘更差,可以满足应用功能测试的性能需求。 

 

三、MySQL容器化实例方案及实现细节

 

介绍一下这套方案的简单架构设计和基本工作原理,如下图:

 

所有相关服务都部署在Kubernetes集群上,这里只重点描述我们开发的MySQL-Operator和自定义资源CRD。关于CSI driver 以及provisioner,attacher, snapshotter等组件都是使用原生官方镜像,在这里不做详细表述,可以参考文档(https://kubernetes-csi.github.io/docs/)。

 

MySQL-Operator作为自定义的控制器,管理两种自定义资源(CRD),通过Kube-api为上层的PAAS平台和CI等系统提供MySQL实例服务。两个CRD分别是MySQLInstance和DatabaseSnapshot。其中MySQLInstance是基于StatefulSet的一层封装,添加了一些metadata,MySQL-Operator只需要根据MySQLInstance的声明来创建对应的StatefulSet和PVC即可, 所以MySQLInstance暴露出来的spec并不多,大致如下:

 

根据spec.init的类型,MySQLInstance既可以是基于生产数据库Schema生成的空数据库实例,也可以是基于已有的DatabaseSnapshot生成的带有基准数据的实例。

在创建的过程中,MySQL-Operator会为这个MySQLInstance申请域名,同步账户密码以及Schema等。一个MySQLInstance的整个生命周期在有限的七个状态之间跳转。需要特别提一下Paused状态,当基于该实例的DatabaseSnapshot创建时,MySQLInstance会进入Paused状态。状态机如下:

 

另一个CRD,DatabaseSnapshot则是基于VolumeSnapshot的封装,其中VolumeSnapshot是Kubernetes官方定义的持久卷快照声明(https://kubernetes.io/zh/docs/concepts/storage/volume-snapshots/)。MySQL-Operator根据它的声明来关联MySQLInstance和PVC即可。

        

由于CEPH RBD 的读写独占模式 RWO(read write once), 我们为DatabaseSnapshot定义了两个常态InUse和Ready。简单来讲就是一个数据库快照同一时间只允许一个数据库实例使用,并且DatabaseSnapshot在创建过程中需要暂停对应的MySQLInstance,状态机如下:

    

 

四、小结与展望

 

在有了MySQLIntance服务之后,数据库的版本管理变得和代码版本管理一样灵活。特别是重复构造测试数据的场景,节省了大量的时间和管理成本。另外用户也不再需要长期占用计算资源,仅在有使用需求时即可快速创建 MySQLInstance,有效提高了整体容器宿主机资源的使用率。除此之外,上层CI/CD平台服务也可以通过Kube API调用的方式来管理这两种CRD,进一步提升测试自动化程度。

 

一般来说,应用云原生化完成后最重要的是获得两个能力:弹性和分布式,目前我们的这套方案落地于Kubernetes平台,释放出了一部分平台计算和存储的弹性,让用户对于数据库实例有了更多的选择和灵活管理的能力。

何谓云原生(Cloud Native), 字面上早已经有了明确的定义(https://github.com/cncf/toc/blob/master/DEFINITION.md),但是在工程实践中,基于Kubernetes这个巨大的平台,仍然有大量的宝藏等着我们去持续探索挖掘。

【推荐阅读】

携程技术新上市图书

《携程架构实践》《携程人工智能实践》

本周满100-50元优惠活动进行中,

扫下方二维码进

↓↓↓

     

 “携程技术”公众号

  分享,交流,成长

Go-RadonDB是一个开源的云原生MySQL数据库具有无限的可扩展性和性能 RadonDB是一个开源的云原生MySQL数据库,具有无限的可扩展性和性能 立即下载

相关推荐

IMDb影评数据集:从下载到情感分析实战指南

本文提供了IMDb影评数据集从下载、探索到情感分析建模的完整实战指南。详细介绍了数据预处理、TF-IDF向量化方法,并对比了逻辑回归、随机森林、SVM及LSTM深度学习模型在情感分析任务上的应用与效果评估,帮助读者系统掌握自然语言处理的核心流程。

weixin_29052717的博客 448

云原生下,如何实现高可用的MySQL?

云时代的到来,无论传统行业还是互联网行业,业务越来越多样,迭代速度越来越快,使得整体数据量大幅提升。 近两年,随着 Docker + Kubernetes 等技术的兴起,大家都将业务往容器化迁移,团队的技术也在往云原生方向演进。早期的 Kubernetes 着重解决 Stateless 和 Share Nothing 的应用部署场景,然而在如今愈发复杂的应用场景中经常会遇到有状态保存的需求。 从 Kubernetes 1.9 开始,针对有状态服务的资源类型 Statefulset 进入 GA,而且 Ku

码农架构 688

Fiddler everywhere的一些基础操作

网上能搜到的Fiddler everywhere使用教程太少,于是我整理了一些自己实操成功的内容,包括Fiddler everywhere的Mock测试、弱网测试等基础操作,后续还会持续更新。操作系统:macOS使用工具:Fiddler everywhere 5.10.0本文简单介绍了使用Fiddler everywhere进行的Mock测试和弱网测试,而Fiddler everywhere提供了更多的其他实用的功能,我会在后期进行一个持续的学习和更新。

weixin_44346646的博客 2479

云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署Mysql应用

jks212454的博客 3232

ZYNQ学习:PL端DDR3 读写测试

DDR SDRAM 的最大特点是双沿触发,即在时钟的上升沿和下降沿都能进行数据采集和发送,同样的工作时钟, DDR SDRAM 的读写速度可以比传统的 SDRAM 快一倍。本次实验使用的 DDR3 芯片是南亚的 NT5CC256M16ER-EKI, NT5CC256M16ER-EKI 的 bank 位宽为 3,行位宽为 15,列位宽为 10,所以它的地址大小等于 2^3*2^15*2^10(即 2^28=256M),数据位宽为 16bit,所以容量大小为 256M*16bit,也就是 512MByte。

shuidiQAQ的博客 3031

5个实战必备的多模态情感分析数据集(附下载链接与避坑指南)

本文精选了5个实战必备的多模态情感分析数据集,包括CMU-MOSEI、CH-SIMS、UR-FUNNY、MUStARD和IEMOCAP,并提供了详细的下载链接与避坑指南。文章重点介绍了如何高效获取、预处理这些数据集,并自然整合了多模态情感分析的核心热词,旨在帮助研究者和开发者快速启动项目,规避常见陷阱,聚焦模型创新。

yolo5detector的博客 280

云原生 MySQL 架构:从容器化到 Serverless

华为云 GaussDB (for MySQL) 将 Redo Log 存储在分布式块存储中,通过 RDMA 技术实现:Log 写入延迟降低至 100μs计算节点故障时,新节点可直接从存储层加载日志恢复云原生 MySQL 架构的本质是「用分布式系统的思维重构数据库能力」。从 StatefulSet 的有状态调度到 Serverless 的弹性计算,从跨云容灾的复杂复制到边缘计算的轻量化部署,每个技术决策都需要在**「弹性与稳定」「成本与性能」「开放与兼容」** 之间找到最佳平衡点。

無言的博客 1658

图像加密与解密(附matlab代码)

详细介绍了三种图像加密解密原理,并基于matlab开发了一套相应系统。

2440

云原生KubeSphere部署Mysql

一、简介 使用KubeShere部署应用架构图: 注意三点: 应用的部署方式 应用的数据挂载(数据、配置文件) 应用的可访问行性 二、部署MyS

花&败 2693

Python爬虫实战:基于最新技术栈的晋江文学城小说爬取

本文将详细介绍如何使用Python最新技术栈构建一个高效的晋江文学城小说爬虫。我们将从爬虫基础知识讲起,逐步深入到反爬机制应对、分布式爬虫设计以及数据存储优化等高级话题。文章包含完整的代码实现,使用aiohttp+asyncio实现异步爬取,Playwright处理动态渲染,并结合Redis实现分布式任务队列。本文旨在为读者提供一个全面的现代Python爬虫开发指南。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。

2201_76125261的博客 870

用 deepseek 写小说(通用版提示词模板)

#Initialization:作为[Role],在[Goals]下,回顾你的[Skill],严格遵守[Constraints],5.第五步:人物大纲,给小说里的每个人物撰写背景故事,深挖人物过去的经历,原生家庭,住所:一栋位于市郊的房子,有三个卧室,房龄 10 年,厨房很大,当中有一个鸟式大理石。示例 2.戈德里洛克先去了熊老爹的工作坊,尝试用大纲法写作,却发现这种方法无聊透顶,1.第一步:一句话概括,一句话概述小说内容,主要包含小说癸型,主角,以及故事中需要。大灰狼的暴行彻底激怒了戈德里洛克,

陈奕昆的博客 2969

《携程技术2020年度合辑》,送给爱学习的你

01序言 2020年跌宕起伏,突如其来的疫情对旅游行业造成了前所未有的冲击,也让更多人进一步感受到技术互联互通的重要性。对于旅游业技术人而言,外部的不可控因素让我们更加聚焦于系...

携程技术 728

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

我在OceanBase开发者大会充电的一天——干货满满、CPU已烧

2024年4月20日,OceanBase开发者大会在上海举办,有幸参加了这场面向开发者的盛会,与来自各行各业的数据库大咖和开发者朋友一起,探讨了关于分布式数据库的前沿技术和最佳实践。

小明的Java问道之路 7万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

100篇你值得收藏的K8s干货文章

K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方...

Docker的专栏 4533

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AnalyticDB for MySQL:PB级云数仓核心技术和场景解析

2019阿里云峰会·上海开发者大会于7月24日盛大开幕,本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货,共同探讨前沿科技趋势。本文整理自数据库专场中阿里云智能高级技术专家南仙的精彩演讲,本文为分享了阿里云PB级云数据仓库AnalyticDB for MySQL的核心技术以及其应用场景。 数据库专场PPT下载 本文内容整理自演讲视频以及PPT...

阿里云云栖号 2249

深度干货|云原生分布式数据库 PolarDB-X 的技术演进

一、PolarDB-X是什么 PolarDB-X最早起源于阿里集团2009年提出用分布式架构替代传统商业数据库,阿里研发了TDDL分库分表中间件。2014年阿里集团开始全面上云,将TDDL升级成DRDS分布式数据库服务,实现了在线扩缩容以及数据拆分等能力。2018年后,国内分布式数据库技术进入一个百家争鸣的局面,阿里在这方面也做了很多探索,经过对X-DB、PolarDB等技术整合,诞生了PolarDB-X。 PolarDB-X结合了Sharding On MySQL、NewSQL、Cloud Nat

数据库技术 1211

干货 | MySQL数据库安全之审

干货 | MySQL数据库安全之审计 原创:李勇京东云开发者社区今天 每家公司都希望业务高速增长,最好能出几个爆款产品或者爆款业务,从而带动公司营收高速攀升。但站在数据库管理员的角度,这却是实实在在的压力,业务高速增长必然带来数据量的暴增。数据库系统的选型和设计是支撑整个业务系统的重要因素。 MySQL数据库是基于云原生的数据库产品之一,云原生为云数据库提供了重要动力,相比于传统自建数...

weixin_33933118的博客 508

【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!

摘要:【免费下载】华为云社区年度技术精选集,700页+PDF送你啦!愿牛年少踩坑。 技术人的年货来了!点击链接带回家!也欢迎大家转发赠阅,相互交流学习。 年度技术精选合集【上】:https://bbs.huaweicloud.com/blogs/attachment?id=bb86ad22ef44448a8ad03bd7c813b939 年度技术精选合集【下】:https://bbs.huaweicloud.com/blogs/attachment?id=f122d78b0196473c9a18e1.

华为云官方博客 3337

干货 | MySQL数据库安全之审计

干货 | MySQL数据库安全之审计 原创: 李勇 京东云开发者社区 今天 每家公司都希望...

662

【K8s Operator 开发实战】3 个真实场景 + 可直接复用的 Demo

本文从运维实战角度,直击K8s Operator开发的核心:什么场景值得写、如何用Kubebuilder 4.x快速搭建可运行的Operator。通过一个“Web应用自动部署”完整Demo,手把手带你定义CRD、实现Reconcile循环、管理子资源(Deployment/Service/Ingress),并给出本地运行到生产部署的全流程。同时总结了Reconcile死循环、证书过期、内存暴涨、Finalizer卡死等4个生产级踩坑实录,以及可观测性指标埋点建议。内容基于真实版本(Go 1.23+,K8s

kguogao的博客 388

职业经验|姜菌说,测试一定要会测试

测试的工作内容也是测试,大部分人遇不到什么高大上的场景和技术,每个人的境遇都不同,但绝大多数测试工作的内容会一致,那就是做测试工作。

software_test010的博客 887

2025年软件测试行业趋势分析

首先,软件测试现在已经是开发过程中不可或缺的一部分,但随着技术的进步,肯定会有所变化。比如,自动化测试已经越来越普及,但可能到2025年会更深入,特别是AI和机器学习的应用。

伤心的辣条 1901

MySQL 9.7.0 LTS 实测干货

MySQL 9.7.0 LTS正式发布,带来多项企业级功能下放和性能提升。相比8.4.9 LTS,9.7.0支持周期更长,新增原生OpenTelemetry全链路可观测、完善的MGR高可用能力和JSON二元视图等特性,特别优化了向量检索性能,OLTP场景QPS提升32%,向量检索提升45%。升级需注意路径规划(需先升级至8.4.9)、客户端兼容性和执行计划变化等问题。建议核心业务先升级8.4.9,AI相关业务可直接验证9.7.0的新特性优势。

我的博客 824
上一篇: 程里人 | 写书背后那些不为人知的故事
下一篇: 干货 | 在搜索引擎广告关键词生成上,算法可以做什么?
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值