流量回放

数据库迁移是一个复杂且风险较高的过程,其成功与否直接关系到业务的稳定性和连续性。迁移目标端数据库的兼容性和性能一直是用户关注的焦点,任何兼容性问题或性能瓶颈都可能导致迁移失败,甚至造成业务中断和数据丢失。为了有效地评估迁移风险,并确保迁移的平稳过渡,流量回放技术应运而生,它提供了一种工具化的解决方案,能够在迁移之前对目标数据库进行全面的兼容性和性能测试,从而将潜在风险降至最低。本文将详细阐述流量回放功能的使用流程,并深入探讨其在数据库迁移项目中的关键作用。流量回放并非简单的数据库压力测试,而是通过对生产环境中真实业务流量的完整回放,模拟真实的业务场景,对目标数据库进行全面的性能和兼容性验证。这与传统的基于预设脚本的压力测试有着本质区别,后者难以全面覆盖真实业务场景的复杂性和多样性,容易导致测试结果的偏差。而流量回放技术则能够精准地还原生产环境的运行状态,从而更有效地评估目标数据库的承载能力和兼容性。

1、业务流程简介

流量回放功能的使用流程大致分为以下几个步骤:

第一步:数据采集。 在生产环境中,需要选择合适的工具对数据库的读写请求进行捕获和记录。此过程需要谨慎操作,避免对生产环境造成过大的影响。通常,可以使用数据库代理、网络抓包工具或数据库自身的审计功能来实现数据采集。采集到的数据需要包含完整的SQL语句、参数以及执行时间等关键信息,这些信息将作为流量回放的输入。数据的采集方式和格式需要与后续的流量回放工具兼容。对于敏感数据,需要进行脱敏处理,确保数据安全。

第二步:数据预处理。 采集到的原始数据通常需要经过预处理,以去除冗余信息,优化数据格式,并进行必要的脱敏处理。预处理过程可能包括数据清洗、数据转换、数据抽样等操作,以提高回放效率并减少对目标数据库的负载。根据目标数据库的特性,可能需要对SQL语句进行调整,以保证其在目标数据库环境下的正确执行。

第三步:流量回放。 预处理后的数据将被输入到流量回放工具中进行回放。流量回放工具会模拟真实的业务流量,对目标数据库进行并发访问,以评估其性能和兼容性。在此过程中,需要监控目标数据库的CPU利用率、内存使用率、I/O性能等关键指标,并记录回放过程中的错误信息和异常情况。流量回放工具通常允许用户自定义回放速度、并发数等参数,以模拟不同的业务场景。

第四步:结果分析。 流量回放完成后,需要对收集到的数据进行分析,评估目标数据库的性能和兼容性。分析内容包括但不限于:数据库响应时间、吞吐量、错误率、资源利用率等。 通过对这些指标的分析,可以识别出潜在的性能瓶颈和兼容性问题,为数据库迁移方案的优化提供依据。 此外,还需要对回放过程中出现的错误信息进行详细分析,找出其根本原因,并采取相应的措施进行解决。

第五步:报告生成。 最后,需要生成一份详细的流量回放报告,总结测试结果,并提出相应的改进建议。该报告应包含测试环境配置、测试数据概要、性能指标、错误信息等内容,为数据库迁移决策提供重要的参考依据。

通过上述步骤,流量回放功能能够有效地评估数据库迁移目标端的兼容性和性能,降低迁移风险,确保数据库迁移的顺利完成。 这项技术为数据库迁移项目提供了可靠的保障,有助于企业减少迁移成本,提高业务连续性,最终实现数据库迁移的平稳过渡。 合理地使用流量回放工具,将有效提升数据库迁移项目的成功率。

2、流量回放应用场景

2.1 流量回放

对应数据库压测的场景,一般在割接前验证阶段使用,目的是验证目标端数据库的性能。通过采集一段时间的源端数据的执行的真实SQL,在目标端(一般是阿里云)数据源回放执行,用户可以通过调整并发数,和流量间隔来控制目标端的压力。

2.2 结果对比

对应SQL兼容性检查的场景,一般在割接前验证阶段使用,目的是验证源端数据源和目标端数据源的SQL兼容性。通过采集一段时间的源端数据的执行的真实SQL,在源端和目标端同时执行,查看返回的结果是否是一致的。

3、流量回放新版本介绍

为了提升CMH流量回放的产品体验,现已上架【新版流量回放】页面,【旧版流量回放】页面仍然保留,您可以根据实际需求选择使用【新版】/【旧版】流量回放。使用【新版流量回放】需要满足以下条件:

  • 使用阿里云云上数据库作为目标端数据源。如需使用结果对比能力,需要保证源端数据源与目标端数据源所在VPC网络互通。

  • 使用CMH自动创建的阿里云ECS部署流量回放Agent。该ECS规格为48G,系统盘容量为100G,请确认该规格能够满足您的业务需求。回放压力=回放实例数量*单机压力,如果需要增大回放压力,可以在实例概览部分扩容回放实例

  • 使用OSS保存采集的SQL文件。新版页面会从OSS自动下载采集文件到ECS的/home/目录下,如果采集文件大小超过20G,建议使用旧版页面。

如果不满足以上条件,或者需要使用自定义的服务器部署流量回放Agent,请回到旧版通过Agent管理功能部署Agent。

4、流量回放操作步骤

前提条件:

  • 创建回放计划之前,需要切换到新版流量回放页面

  • 请提前抓取源端数据源的生产流量,不同的数据源采集方式不同,请选择合适的流量抓取方案,抓格式见文档replay_sql_example.json,抓取完成后,转为回放要求的json格式。

  • 请提前将回放使用的json文件上传至OSS Bucket,Bucket需要和目标端数据源处于相同地域

4.1、数据准备

进行流量回放,首先需要采集源端数据源的SQL,源端一般有三种情况:

自建的数据源:此时需要使用CMH提供的采集器/采集方法。

  • MySQL可以选择CMH自研工具mysqlsniffer或者开源工具tshark进行采集

  • Oracle可以选择CMH自研工具sqla进行采集

  • sqlserver可以使用event session方式进行采集。

阿里云数据源:数据源接入SLS,在SLS下载对应的SQL执行文件。

他云数据源:通过他云提供的方式获得SQL执行日志,并转换为回放标准格式。

获取到回放SQL文件,就可以在CMH控制台进行流量回放了。

4.2、进入流量回放页面

菜单:迁移能力 > 流量回放链接:流量回放

整体业务流程是先创建回放计划,然后在回放计划中创建回放任务,一个回放计划中可以包含多个回放任务。进入云迁移中心,在 迁移能力 - 流量回放中,点击前往新版即可开始创建新版回放计划。

image

4.3、创建回放计划

进入云迁移中心,迁移能力 > 流量回放 中,点击新建回放计划即可开始创建回放计划。

image

在这里你需要填写回放计划相关的参数,参数分两个部分。

第一个部分:基本信息

第二个部分:回放任务的执行参数。

4.3.1 填写基本信息

如下图所示,回放类型涵盖流量回放、结果对比两种。流量回放是在目标端执行回放文件SQL,检查执行成功与否;结果对比分别在源端、目标端执行相同的回放文件SQL,执行后对比结果是否相同,并展示结果不同的数据详情。

image

  • 参数说明:

类别

配置

说明

任务名称

代表该回放任务的名称,允许中文与英文大小写和部分字符

回放类型

这边存在两种类型,流量回放类型(对应压测的场景),结果对比类型(对应SQL兼容性检查的场景)

源端数据源信息

源数据源类型

  • 下拉可选:

    1. MySQL,自建或者他云MySQL

    2. RDS MySQL版,阿里云RDS MySQL

    3. RDS MariaDB版,阿里云RDS MariaDB

    4. PolarDB MySQL版,阿里云PolarDB MySQL

    5. Postgresql,自建或者他云Postgresql

    6. RDS PostgreSQL版,阿里云RDS PostgreSQL

    7. PolarDB PostgreSQL版,阿里云PolarDB PostgreSQL

    8. PolarDB-PostgreSQL(兼容Oracle版),阿里云PolarDB PostgreSQL兼容Oracle语法的版本

    9. Oracle,自建或者他云Oracle

    10. PolarDB分布式版(2.0),阿里云PolarDB-X 2.0,MySQL语法

    11. SqlServer,自建或者他云SqlServer

    12. RDS SqlServer版,阿里云RDS SqlServer

获取方式

实例获取/地址获取,如果选择的数据源是阿里云的实例,则可以通过实例获取,直接在控制台选择实例;如果数据源是自建的或者他云的实例,则填写数据源的IP,端口

数据库名称

填入要回放的数据库名

用户名

填入源MySQL数据库的账号

密码

填入该数据库账号对应的密码

目的数据源信息

目的数据源类型

  • 下拉可选:

    • MySQL,自建或者他云MySQL

    • RDS MySQL版,阿里云RDS MySQL

    • RDS MariaDB版,阿里云RDS MariaDB

    • PolarDB MySQL版,阿里云PolarDB MySQL

    • Postgresql,自建或者他云Postgresql

    • RDS PostgreSQL版,阿里云RDS PostgreSQL

    • PolarDB PostgreSQL版,阿里云PolarDB PostgreSQL

    • PolarDB-PostgreSQL(兼容Oracle版),阿里云PolarDB PostgreSQL兼容Oracle语法的版本

    • Oracle,自建或者他云Oracle

    • PolarDB分布式版(2.0),阿里云PolarDB-X 2.0,MySQL语法

    • SqlServer,自建或者他云SqlServer

    • RDS SqlServer版,阿里云RDS SqlServer

获取方式

目标端通常是阿里云的,所以可以通过实例获取,直接在控制台选择实例

数据库名称

填入要回放的数据库名

用户名

填入源MySQL数据库的账号

密码

填入该数据库账号对应的密码

SQL文件类型

当前支持5种常用格式

  • 标准格式:自建数据源,需要通过工具采集源端执行SQL,一般使用CMH官方提供的采集器,采集到的格式为标准格式,标准格式为一个json文件

  • CloudLens格式:数据源为阿里云的实例,且接入了SLS,适配CloudLens的,可以SLS上下载CloudLens格式的日志文件,并在CMH进行回放。

  • SLS Json格式:数据源为阿里云的实例,且接入了SLS,未适配CloudLens的,可以SLS上下载自身数据源的Json日志文件,并在CMH进行回放。

  • SLS CSV格式:数据源为阿里云的实例,且接入了SLS,生成文件为CSV的,可以SLS上下载自身数据源的CSV日志文件,并在CMH进行回放。

  • Tshark格式:自建数据源,需要通过工具采集源端执行SQL,使用开源工具tshark采集器,采集到的格式为tshark格式,可以直接在CMH进行回放。

回放实例

执行回放任务的阿里云的ECS实例,流量回放会自动在目标数据源VPC下创建按量收费的ECS来作为运行回放任务的Agent,回放完成后,用户可以在CMH页面或者ECS页面主动释放实例。如果已有回放实例,也可以选择已存在的实例执行回放任务

回放文件Bucket地址

用户OSS上的Bucket名称,用户在回放前,需要把采集到的回放SQL文件放到自己的OSSBucket下,回放时会自动拉取

4.3.2 填写任务执行参数

配置

说明

模拟客户端数

代表回放实例并发执行SQL的线程数,在资源充足的情况下,线程越多,执行速度越快

回放速度因子

控制SQL执行时,两条SQL间的等待时间,如两条连续执行的SQL,中间时间间隔为5秒,回放速度因子为1,则仍为5秒,为5就是1秒,为10就是0.5秒,默认为1;该参数在循环回放时不生效

是否循环回放

选是,则在跑完一遍回放文件会从文件开始继续跑,直到达到设定的回放时间为止。选择否,则跑完一遍自动停止,默认不循环

schema映射和过滤

默认不填写,所有schemaSQL全部回放,填写了的话,则只回放填写的schemaSQL,如果有源端和目标端schema不一致的情况,也可以通过schema1:schema2这种写法来指定schema的映射关系

SQL超时时间

执行单条SQL的最长等待时间,默认60

是否commit

默认流量回放在执行回放SQL时,会手动开启事务进行回放,执行完一条SQL后会rollback,如果需要commit,可以设置为是

回放SQL类型

可以选择全部,DQLDML,选择DQL或者DML则只会执行对应类型的SQL,默认选择全部执行

是否跳过报错SQL

即已经确认报错的SQL是否需要跳过,默认为否,下次仍然执行,选择是,则下次不再执行

重要

1、CMH将会自动为您创建一个私网ECS实例,默认规格为48G,磁盘100G,会产生一定的资源费用。如果该规格不能满足需求,或者需要使用其它服务器部署回放Agent,请“回到旧版”。

2、CMH创建的回放实例,将会部署在目标端数据源所在的地域、可用区、VPC,如果需要使用结果对比,请手工打通源端数据源和回放实例之间的网络。

3、创建回放计划页面仅支持创建一个新实例,如果需要更多回放实例,请在回放计划详情页扩容

4、CMH创建的私网ECS实例会通过私网连接打通网络,需要在用户的账号下自动创建反向终端节点,可能会产生费用,使用完成之后需要用户手动释放。

4.4、回放计划详情

完成计划创建后,可以在流量回放的列表中看到所登录账号下的所有的流量回放计划。点击计划标题或者操作中的详情按钮可以进入计划详情。新版页面仅能查看新版创建的回放计划详情,旧版页面仅能查看旧版创建的回放计划详情。

image

基本信息:展示计划ID、源数据类型、目标数据类型、最后一次任务状态、创建时间、SQL文件路径等信息。

任务概况:展示当前回放计划下的所有回放任务的整体情况,包括回访执行次数、最近一次回放成功率、成功请求数、总请求数、实例概览等信息。

任务列表:展示当前回放计划下的回放任务列表。

image

实例概览:

完成计划创建后,可以在计划详情页中看到当前计划新建、关联的回放实例列表。点击查看进度可以查看每个实例的部署情况。

image

如果需要增加新的回放实例,可以选择扩容,选择需要扩容的实例数,CMH会自动为您创建新的回放实例,并关联到当前回放计划。

如果不再使用该回放实例,可以选择释放,用来删除回放实例。

说明

1、如果回放实例还在被其他回放计划使用,释放功能不会删除对应的ECS;否则,会连同ECS一起释放。

2、如果需要登录回放实例,可以的点击回放实例名称,跳转到ECS详情页面。在实例详情-其它信息-描述中,有回放实例的登录密码。

image

4.5、创建回放任务

完成回放计划的创建后,在回放计划详情中可以创建回放任务(如下图)。

image

点击“创建任务”后开始创建回放任务,回放任务被创建后不会立即执行,创建后需要手动点击“执行”,一些关键参数的释义如下:

配置

说明

选择回放实例

此处可以选择多个回放实例,选择多个实例,则该任务在所有实例会同时执行回放文件,如果实例数为N,则对数据库的压力也增加N

选择回放文件

选择回放计划关联的OSS Bucket中上传好的回放文件,该文件会在每次创建回放任务时刷新到回放实例中。

模拟客户端数

代表回放实例并发执行SQL的线程数,在资源充足的情况下,线程越多,执行速度越快

回放速度因子

控制SQL执行时,两条SQL间的等待时间,如两条连续执行的SQL,中间时间间隔为5秒,回放速度因子为1,则仍为5秒,为5就是1秒,为10就是0.5秒,默认为1;该参数在循环回放时不生效

是否循环回放

选是,则在跑完一遍回放文件会从文件开始继续跑,直到达到设定的回放时间为止。选择否,则跑完一遍自动停止,默认不循环

schema映射和过滤

默认不填写,所有schemaSQL全部回放,填写了的话,则只回放填写的schemaSQL,如果有源端和目标端schema不一致的情况,也可以通过schema1:schema2这种写法来指定schema的映射关系

SQL超时时间

执行单条SQL的最长等待时间,默认60

是否commit

默认流量回放在执行回放SQL时,会手动开启事务进行回放,执行完一条SQL后会rollback,如果需要commit,可以设置为是

回放SQL类型

可以选择全部,DQLDML,选择DQL或者DML则只会执行对应类型的SQL,默认选择全部执行

是否跳过报错SQL

即已经确认报错的SQL是否需要跳过,默认为否,下次仍然执行,选择是,则下次不再执行

image

点击下一步,进入创建任务前的预检查阶段。如果存在不通过的预检查项,将会阻塞回放任务的创建,需要解决问题后再重新进行预检查。告警类型的预检查不会阻塞任务创建。

image

预检查通过后,点击完成可以创建回放任务。

image

image

4.6、执行回放任务

执行中的任务,可以在列表点击查看进度来查看任务的执行情况,包括SQL总数已执行SQL执行总数执行错误SQL,执行的QPS平均RTSQL的模板数以及执行的进度等。

image

说明

注意,如果是循环回放,则进度会大于100%,如200%则证明SQL文件执行了2遍。

执行完成的任务,我们可以点击列表的详情按钮进入详情页查看SQL执行的详细情况

image

请求概况:查看请求总数、平均执行时间、平均RT等信息。

执行详情:以列表形式,展示每个Sql模板的执行情况,包括Sample Sqlschema、执行状态、请求数、请求错误数、源端RT、目标端RT。在行操作中可以查看错误信息

导出报告:点击右上角按钮可以导出Excel格式的报告。

image

5、Agent管理(旧版)

说明

旧版页面支持选择已存在的ECS进行Agent部署,并完成流量回放。

5.1、License申请与查看

在云迁移中心页面,依次点击迁移能力->流量回放进入产品界面,首次进入会看到使用引导,第一步为License申请,点击申请License按钮,会自动生成一个License。申请License是为了防止Agent被滥用,起到保护Agent的作用,License本身包括后续的Agent能力(购买ECS除外),流量回放的使用都不会产生费用

image

申请完成后,可以在页面看到License的过期时间(有效期为三个自然月),点击可以看到当前License

image

5.2、Agent管理

License申请完成后,需要进行流量回放Agent的部署,需要您提供一台或多台ECS来供CMH进行Agent的部署,具体ECS数量请根据实际情况进行评估。

ECS规格建议:至少816G

操作系统建议:CentOS,Alibaba Cloud linux

网络要求:创建的ECS需要和数据源网络打通

其他要求:部署前请自行在ECS安装java

部署说明:

如果使用的是阿里云上ECS,ECS安装有云助手(阿里云创建的ECS默认就有云助手),建议使用自动部署方式进行Agent安装;

如果非阿里云ECS,但和阿里云VPC打通,或者虽然是阿里云ECS但机器未安装或由于某些原因安装不成功云助手,建议使用手动部署-私网连接方式部署Agent。

如果非阿里云ECS,且网络未打通,但有公网IP的,建议使用手动部署-公网连接方式部署Agent。

下面是三种部署模式的具体说明:

5.2.1 自动部署

目前,支持自动部署的地域有杭州上海,如有其他地域的部署需求,请通过售后在线联系我们。

注:

  • 自动部署只支持阿里云创建的ECS

  • 安装前请先开通私网连接服务。

准备好ECS后,点击Agent管理进入Agent的安装页面

image

点击Agent安装开始安装Agent流程

image

安装方式选择“自动部署”,依次填写Agent名称、选择地域、选择ECS,完成后,点击提交,CMH会自动完成流量回放Agent的部署流程。

image

部署过程中,可以看到Agent的部署过程。

image

部署完成后,可以在Agent列表看到部署的Agent。

image

5.2.2 手动部署

5.2.2.1 公网手动部署

公网手动部署,需要ECS开通公网,CMH可以连接到ECS。

注:

  • ECS可以是任意平台或者IDC的机器,只需要CMH可以公网访问。

准备好ECS后,点击Agent管理进入Agent的安装页面

image

点击Agent安装开始安装Agent流程

image

安装方式选择“手动部署”,依次填写Agent名称、选择公网、填写IP端口,完成后,点击下一步

image

在下一步中,会给出该ECS的安装指令,点击拷贝将该指令拷贝后,到ECS粘贴后执行,即可以完成AgentECS的部署。

image

部署完成后,继续点击下一步,然后点击连接按钮,开始与Agent建立连接。

image

建立连接过程可以在线查看

image

部署完成后,可以在Agent列表看到部署的Agent。

5.2.2.2 私网手动部署

私网手动部署,支持的地域有杭州上海,如有其他地域的部署需求,请通过售后在线联系我们。

注:

  • ECS可以是阿里云或非阿里云机器,只需要VPC打通。

  • 安装前请先开通私网连接服务。

准备好ECS后,点击Agent管理进入Agent的安装页面

image

点击Agent安装开始安装Agent流程

image

安装方式选择“手动部署”,依次填写Agent名称、选择私网、选择地域,选择VPC,填写IP端口,完成后,点击下一步

image

在下一步中,会给出该ECS的安装指令,点击拷贝将该指令拷贝后,到ECS粘贴后执行,即可以完成AgentECS的部署。

image

安装完成后,继续点击下一步,然后点击连接按钮,开始与Agent建立连接。

image

建立连接过程可以在线查看

image

部署完成后,可以在Agent列表看到部署的Agent。

5.2.3 Agent操作

5.2.3.1 停止

自动部署的Agent,状态为在线时,可以通过点击停止按钮,来关停该Agent

image

停止后,ECSAgent会被停止,列表状态为停止,停止状态的Agent不可以执行回放任务。

image

5.2.3.2 启动

停止状态的Agent,可以通过点击启动按钮,来启动该Agent

image

启动后,Agent状态变为在线。

5.2.3.3 删除

不再使用的Agent,可以在Agent列表进行删除,删除前,需要将该Agent与回放计划进行解绑。

image

5.2.3.4 重连

手动部署的Agent,在Agent的断连后,Agent状态会被置为离线,在Agent确认启动后,可以点击重连使CMHAgent重新建立连接

image

重连成功后,Agent状态重新置为在线。

6、常见问题

6.1 回放任务日志的位置和含义?

Agent目录结构

Agent目录,默认为/home/frodo/

└── <Agent名称>/

├── log/

│ └── application-<Agent名称>.log

├── run/

│ └── replay-task-<次数>/

│ ├── result/

│ │ └── result.xlsx

│ ├── access.log

│ ├── detail.csv

│ └── error.log

├── sharding/

│ ├── merge.json/

│ │ ├── .last_md5

│ │ └── .shard<次数>

├── database.db

├── frodo-agent-1.0.jar

└── install.sh

  • /<Agent目录>/log/application-<Agent名称>.log

    • Agent运行日志

  • /<Agent目录>/run/replay-task-<次数>/result/result.xlsx

    • n次回放任务结果详情,包括 “概要报告” 和 “SQL详情”

  • /<Agent目录>/run/replay-task-<次数>/access.log

    • n次回放任务的执行情况,包括进度、请求数等指标

  • /<Agent目录>/run/replay-task-<次数>/detail.csv

    • n次回放任务的SQL执行详情

    • 需要在创建回放任务的高级配置中开启:“是否开启详细sql回放日志”勾选“是”

  • /<Agent目录>/run/replay-task-<次数>/error.log

    • n次流量回放的错误日志

  • /<Agent目录>/sharding/merge.json/

    • sql文件的分片数据

6.2 Agent部署失败如何排查?

  1. 进入ECS控制台 > 云助手 > 命令执行结果页面查看命令是否执行成功。

  2. 进入/<Agent目录>/log/application-<Agent名称>.log 查看运行日志。