使用CDM服务迁移Doris数据至MRS集群
操作场景
本章节适用于使用CDM服务将线下IDC机房或者公有云Doris集群中的数据迁移到华为云MRS服务。CDM是同构/异构数据源之间批量进行数据迁移的服务,能帮助用户实现数据的自由流动。
本章节以公有云Doris数据迁移到MRS集群为例。
方案架构
Doris数据迁移主要包括元数据迁移和数据迁移两部分,迁移方案如图1所示。
- 业务历史数据和增量数据使用Stream Load方式进行迁移,增量数据非分区表清表重迁,分区表迁移新增分区数据。
- 历史数据迁移:历史数据通过CDM全量迁移至目标端。
- 增量数据迁移:使用CDM迁移增量数据,非分区表清表重迁,分区表迁移新分区。
迁移调研
迁移Doris数据前需要对源端Doris组件进行调研,以便评估迁移过程中可能会产生的风险、对系统的影响等。调研主要包含Doris组件版本、部署模式、数据存储、性能优化等,具体请参考表1。
调研项目 |
调研内容 |
示例 |
---|---|---|
版本兼容性 |
Doris集群版本。 |
Doris集群版本为1.2.0。 |
规格选型 |
Doris集群实例规格。 |
Doris集群实例规格为8Core 8GB*3。 |
迁移数据量 |
Doris处理的总数据量。 |
单节点100TB。 |
库表清单 |
统计需要迁移的Doris表个数,及分区表个数,表的最大数据规模的分布情况(即xxx个表是GB以内,xxx个表是TB以内,最大表是xxxTB),及最大分区数量(单表的分区数量不能太大,需在数万以内)。 |
总表数量为3DB Doris表,每DB包含3000张表,10%的表有分区,最大表为10TB,普通表约20GB,表最大分区数量为1000。 |
目标端集群 |
|
目标端MRS集群启用了Kerberos认证,有10个不同权限的Doris用户,用户交叉授权。 |
UDF作业 |
是否存在自定义UDF,如果存在需统计自定义UDF个数及类型。 |
存在20个用户自定义UDF。 |
磁盘大小 |
用户需要存储数据的总容量,会乘以副本数作为磁盘总容量的规划, |
总容量为300TB。 |
已使用磁盘大小 |
统计目前已经使用的存储容量。 |
已使用160TB容量。 |
数据是否多副本存储 |
统计副本数,系统默认是3,如果用户有特殊需求,可以变更副本数。 |
3副本 |
数据来源 |
统计写入Doris表中的数据来源。 |
Flink、Kafka、Load |
网络方案
迁移方案支持各种网络选型:公网、VPN、专线等。根据实际情况选择网络方案,两端网络互通即可迁移。
迁移网络类型 |
优点 |
缺点 |
---|---|---|
专线 |
|
|
VPN |
|
|
公网IP |
|
|
约束与限制
- 在迁移过程中,如果源集群在实时写入数据,会导致作业运行时间不一致,最终导致迁移数据不一致。使用校验工具识别不一致表,通过业务时间确定数据是否一致。
- 迁移操作可能导致源端集群性能下降,影响源端业务的响应时间。在源端集群上合理配置资源,包括计算、存储和网络,确保能承受迁移负载。
- CDM每次迁移数据量不能太大,建议每次迁移50GB,超过需分批次迁移。
- 无法迁移bitmap类型表,详细介绍请参见CDM迁移约束与限制。
前提条件
- 已准备迁移目的端MRS Doris集群,例如,集群版本为“MRS 3.3.1-LTS.1”,组件选择“Doris集群”,未开启Kerberos认证。
- 已创建CDM集群,该CDM集群的安全组、虚拟私有云、子网需要和迁移目的端MRS Doris集群保持一致,保证CDM集群和MRS集群之间网络互通。
迁移Doris全量元数据
在源端执行show create查询建表语句,在目标端执行相同的建表语句完成Doris元数据迁移。
- 使用MySQL客户端连接源端Doris集群,执行以下命令查看源端数据库:
show databases;
记录需要迁移的数据库名称,系统表无需迁移,例如需要迁移的数据库名称为“test_w”。
图2 查看数据库 - 在源端Doris集群查看创建数据库和表的命令。
- 在目的端创建需要迁移的数据库和表,完成元数据迁移。
迁移全量数据
- 登录CDM管理控制台。
- 在“集群管理”页面单击待操作集群对应“操作”列的“作业管理”。
- 在“连接管理”页签,单击“新建连接”,分别创建源端连接和目的端连接。
- 连接器类型选择“数据仓库”中的“DORIS”,单击“下一步”。
- 在详细配置页面,配置以下参数,更多参数详细介绍请参见Doris连接参数说明。
表3 配置Doris连接 参数
说明
示例
名称
连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。
- doris_source
- doris_target
数据库服务器
一个或多个通过分号分隔的服务器列表(服务器域名或IP地址)。
192.168.0.1;192.168.0.2
端口
配置为要连接的数据库的端口。
9030
数据库名称
配置为要连接的数据库名称。
dbname
用户名
待连接数据库的用户。该数据库用户需要有数据表的读写权限,以及对元数据的读取权限。
cdm
密码
用户名密码。
-
SSL加密
连接Doris是否进行SSL加密。
是
stream load端口
配置stream load端口。
8030
检查 streamLoad
检查streamLoad连接是否正常。
是
引用符号
可选参数,连接引用表名或列名时的分隔符号。
`
驱动版本
上传所需的驱动版本。
-
单次请求行数
可选参数,单击“显示高级属性”后显示。
指定每次请求获取的行数,根据数据源端和作业数据规模的大小配置该参数。如果配置过大或过小,可能影响作业的时长。
1000
单次提交行数
可选参数,单击“显示高级属性”后显示。
指定每次批量提交的行数,根据数据目的端和作业数据规模的大小配置该参数。如果配置过大或过小,可能影响作业的时长。
-
连接属性
可选参数,单击“添加”可增加多个指定数据源的JDBC连接器的属性,参考对应数据库的JDBC连接器说明文档进行配置。
常见配置举例如下:
query_timeout=259200与socketTimeout=300000:迁移数据量较大、或通过查询语句检索全表时,会由于连接超时导致迁移失败。此时可自定义连接超时时间与socket超时时间(单位ms),避免超时导致失败。
query_timeout=259200
连接私密属性
自定义私密连接属性。
-
- 单击“测试”,测试通过后单击“保存”。
- 创建并运行作业。
- 选择“表/文件迁移”页签,单击“新建作业”进入作业配置页面,配置相关参数。
- 作业名称:运行作业的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的作业名,例如“doris-test_w.sales-data”。
- 源端作业配置(更多参数介绍请参见配置Doris源端参数)
表4 Doris源端作业配置 参数
说明
示例
源连接名称
选择步骤 3创建的源端Doris连接。
doris-source
使用SQL语句
是否使用SQL语句,来进行源端数据抽取。
否
模式或表空间
需要迁移的数据库名称。
单击输入框后面的按钮可选择模式或表空间。
test_w
表名
要迁移数据的表名。
sales
Where子句
指定抽取的WHERE子句,不指定则抽取整表。如果要迁移的表中没有WHERE子句的字段,迁移失败。
age > 18 and age <= 60
date类型值是否保留一位精度
Date类型的数据保留精度
否
抽取分区字段
抽取数据时使用该字段进行数据切分, 从而实现并行化抽取,不支持选择字符串类型的字段。
id
分区字段含有空值
多并发抽取时,若确定分区字段不含Null,将该值设为“否”可提升性能,若不确定,请设为“是”,否则可能会丢失数据。
是
- 目的端作业配置(更多参数介绍请参见配置Doris目的端参数)
表5 Doris目的端作业配置 参数
说明
示例
目的连接名称
选择步骤 3创建的目的端Doris连接。
doris_target
模式或表空间
目的端待写入数据的数据库名称,支持自动创建Schema。
单击输入框后面的按钮可选择模式或表空间。
test_w
表名
目的端待写入数据的表名称。
单击输入框后面的按钮可进入表的选择界面。
sales
导入开始前
导入数据前,对目的端表做的预处理。
- 不清除:写入数据前不清除目标表中数据,数据追加写入。
- 清除全部数据:写入数据前会清除目标表中数据。
- 清除部分数据:需要配置“where条件”参数,CDM根据条件选择性删除目标表的数据。
不清除
where条件
“导入开始前”参数选择为“清除部分数据”时配置,配置后导入前根据where条件删除目的表中的数据。
age > 18 and age <= 60
导入前准备语句
执行任务之前率先执行的SQL语句。目前仅允许执行一条SQL语句。
create table xxx
导入后完成语句
执行任务之后执行的SQL语句,目前仅允许执行一条SQL语句。
create table xxx
loader线程数
每个loader内部启动的线程数,可以提升写入并发数。
并发场景下有如下限制:约束冲突处理策略不支持“replace into”或“on duplicate key update”。
4
- 单击“下一步”进入字段映射配置页面,查看字段映射关系。
- 单击“下一步”进入任务配置页面,配置以下参数单击“保存并运行”运行作业。
- 作业任务失败重试:建议仅对文件类作业和启用了阶段表的数据库作业配置自动重试,避免自动重试重复写入数据导致数据不一致。例如,设置为“不重试”。
- 作业分组:选择作业所对应的组,例如,设置为“DEFAULT”。
- 是否定时执行:配置作业是否要定时运行,例如,设置为“否”。
图6 Doris任务配置 - 在作业列表中观察新建作业的运行情况,状态为“Succeeded”表示作业运行成功。
图7 Doris作业运行情况
- 选择“表/文件迁移”页签,单击“新建作业”进入作业配置页面,配置相关参数。
识别和迁移增量元数据
- 在目的端MySQL所在节点上执行mysqldump命令,导出源端和目的端的库表结构,并将结果保存在两个不同的文件中:
mysqldump -hhost -Pport -u用户名 -p密码 --no-tablespaces --all-databases --no-data > 文件路径
例如保存源端库表结构的文件路径为“/opt/doris/doris-source-meta”,保存目的端库表结构的文件路径为“/opt/doris/doris-target-meta”。
- 执行vimdiff命令,比较步骤 1导出的两个文件的差异:
vimdiff /opt/doris/doris-source-meta /opt/doris/doris-target-meta
- 不同版本的系统表不同,请忽略系统表,系统表无需迁移。
- 如果是properties中的不同,需做判断,仅迁移新增字段和新增分区即可。
例如,以下比对结果中:
- 源端新增了表“part2”:
图8 源端新增了表
- 源端“mrs_table”有新增字段“type”:
图9 源端表新增了字段
- 根据步骤 2的比对结果,在目的端新增表或修改表结构新增字段,修改表结构命令为:
ALTER TABLE db.table_name ADD COLUMN column_name TYPE;
迁移增量数据
使用CDM迁移Doris增量数据时,分区表主要是通过在配置数据迁移作业时,增加where筛选条件来迁移增量;非分区表通过导入开始前,清除全部数据,再全量迁移来实现。
- 参考迁移全量数据的步骤 1~步骤 3新增Doris源端连接和目的端连接。
- 创建并运行作业。
- 选择“作业管理”的“表/文件迁移”页签,单击“新建作业”进入作业配置页面,配置相关参数。
- 作业名称:运行作业的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的作业名,例如“doris-increase”。
- 源端作业配置(更多参数介绍请参见配置Doris源端参数)
表6 Doris源端作业配置 参数
说明
示例
源连接名称
选择步骤 3创建的源端Doris连接。
doris-source
使用SQL语句
是否使用SQL语句,来进行源端数据抽取。
否
模式或表空间
需要迁移的数据库名称。
单击输入框后面的按钮可选择模式或表空间。
test_w
表名
要迁移数据的表名。
sales
Where子句
指定抽取的WHERE子句,不指定则抽取整表。如果要迁移的表中没有WHERE子句的字段,迁移失败。
如果需要迁移分区表的增量数据,则该参数必须设置。
sale_data="2024-06-13"
date类型值是否保留一位精度
Date类型的数据保留精度
否
抽取分区字段
抽取数据时使用该字段进行数据切分, 从而实现并行化抽取,不支持选择字符串类型的字段。
id
分区字段含有空值
多并发抽取时,若确定分区字段不含Null,将该值设为“否”可提升性能,若不确定,请设为“是”,否则可能会丢失数据。
是
- 目的端作业配置(更多参数介绍请参见配置Doris目的端参数)
表7 Doris目的端作业配置 参数
说明
示例
目的连接名称
选择步骤 3创建的目的端Doris连接。
doris_target
模式或表空间
目的端待写入数据的数据库名称,支持自动创建Schema。
单击输入框后面的按钮可选择模式或表空间。
test_w
表名
目的端待写入数据的表名称。
单击输入框后面的按钮可进入表的选择界面。
sales
导入开始前
导入数据前,对目的端表做的预处理。
不清除
where条件
“导入开始前”参数选择为“清除部分数据”时配置,配置后导入前根据where条件删除目的表中的数据。
age > 18 and age <= 60
导入前准备语句
执行任务之前率先执行的SQL语句。目前仅允许执行一条SQL语句。
create table xxx
导入后完成语句
执行任务之后执行的SQL语句,目前仅允许执行一条SQL语句。
create table xxx
loader线程数
每个loader内部启动的线程数,可以提升写入并发数。
并发场景下有如下限制:约束冲突处理策略不支持“replace into”或“on duplicate key update”。
4
- 单击“下一步”进入字段映射配置页面,查看字段映射关系。
- 单击“下一步”进入任务配置页面,配置以下参数单击“保存并运行”运行作业。
- 作业任务失败重试:建议仅对文件类作业和启用了阶段表的数据库作业配置自动重试,避免自动重试重复写入数据导致数据不一致。例如,设置为“不重试”。
- 作业分组:选择作业所对应的组,例如,设置为“DEFAULT”。
- 是否定时执行:配置作业是否要定时运行,例如,设置为“否”。
图10 Doris任务配置 - 在作业列表中观察新建作业的运行情况,状态为“Succeeded”表示作业运行成功。
图11 Doris作业运行情况
- 选择“作业管理”的“表/文件迁移”页签,单击“新建作业”进入作业配置页面,配置相关参数。
Doris数据迁移校验
以下操作为使用MgC Agent校验迁移后的Doris数据的一致性操作示例,以Linux版本25.3.3为例进行演示,具体以实际版本界面为准,详细操作请参见大数据校验。
- 分别创建两个Linux系统和一个Windows系统的弹性云服务器,对应ECS的安全组、虚拟私有云、子网需要和迁移目的端MRS集群保持一致,具体操作请参见自定义购买ECS。
后续操作中,MRS集群客户端和Mgc Agent需分别安装在不同的ECS节点上。
- 安装MRS集群客户端。
在新创建的其中一个Linux主机上安装MRS集群客户端,具体操作请参见安装客户端(3.x版本)。
- 创建Mgc项目。
- 登录迁移中心管理控制台。
- 单击左侧导航栏的“其他 > 配置管理”,进入配置管理页面。
- 选择“项目管理”页签,单击“创建项目”,右侧弹出创建新项目窗口。
- 在弹出的窗口中,选择“复杂迁移(大数据迁移)”项目类型,并设置项目名称,例如“doris_datacheck”。
项目类型选择后将无法更改。
- 单击“创建”。创建项目成功,可在项目管理列表查看。
- 部署MgC Agent。
- 在导航栏左侧最上方切换新创建的项目,选择“总览 > 迁移中心Agent”下载Agent安装包。
在Linux版区域,单击“下载安装包”或“复制下载命令”,将MgC Agent安装程序下载到Linux主机。
本示例以在与源端和目的端网络互通的Linux主机中安装MgC Agent为例进行演示,且已准备一台用于登录MgC Agent控制台的Windows主机。部署MgC Agent的详细操作请参见部署MgC Agent(原Edge)。
- 执行如下命令,解压MgC Agent安装包:
tar zxvf MgC-Agent.tar.gz
- 执行如下命令,进入MgC Agent安装目录中的scripts目录:
cd MgC-Agent/scripts/
- 执行如下命令,启动MgC Agent安装脚本:
./install.sh
- 输入Linux本机网卡的弹性公网IP地址作为后续访问MgC Agent页面的地址。
- 当出现如下图所示提示时,表示Linux版的MgC Agent已安装完成。其中提示的端口号请以实际情况为准。
图12 安装MgC Agent成功
执行如下命令,更新环境变量:
source /opt/cloud/MgC-Agent/scripts/setenv.sh
还需在安装MgC Agent的主机安全组入网规则中,需要添加一条允许通过TCP协议访问27080端口的规则。源地址填写用于登录MgC Agent控制台的Windows主机IP地址。
- 安装完成后,在Windows主机上打开浏览器,输入地址“https://IP地址:端口号”,即可访问MgC Agent的登录页面。例如,IP为“192.168.x.x”,端口号为“27080”,则MgC Agent的访问地址为“https://192.168.x.x:27080”。
- 在导航栏左侧最上方切换新创建的项目,选择“总览 > 迁移中心Agent”下载Agent安装包。
- 创建连接。
- 登录MgC Agent。
- 在登录页面,登录方式选择“华为云密钥登录”。
- 分别输入华为云账号的AK、SK,在区域下拉列表选择在MgC服务创建项目的区域。
- 单击“登录”按钮,进入MgC Agent的总览页面。
- (仅首次登录需要配置)在总览界面,单击页面右上方的“立即连接”按钮,右侧弹出连接迁移中心页面。
- 在连接迁移中心页面配置以下参数:
- 第一步:配置连接方式
- 第二步:关联迁移中心项目
迁移中心项目:单击“查询项目”按钮,查询成功后在下拉列表中,选择步骤 3创建的迁移项目。
- 第三步:预设当前迁移中心Agent名称
- 单击“连接”按钮,确认要与迁移中心进行连接,单击“确定”按钮。
- 在连接迁移中心页面配置以下参数:
- 登录MgC Agent。
- 添加Doris源端和目的端凭证。
- 在左侧导航栏选择“云边协同 > 凭证列表”,进入凭证列表页面。
- 单击列表上方的“创建凭证”按钮,配置以下参数创建源端凭证和目的端凭证:
表8 创建Doris凭证 参数
参数配置
使用类型
选择“大数据”。
类型
选择“Doris”。
凭证名称
输入自定义凭证名称,例如,源端凭证名称为“doris_source”,目标端凭证名称为“doris_target”。
认证方式
选择“用户名/密码”。
用户名
输入连接源端或目的端Doris的用户名。
密码
输入用户密码。
凭证创建后,等待凭证列表中相应凭证所在行的“同步状态”变为“已同步”。
- 选择并启用MgC Agent(仅首次使用时需要配置)。
- 创建Doris源端和目的端连接。
- 在大数据校验页面的“功能入口”区域单击“大数据迁移准备”进入大数据迁移准备页面。
- 在“连接管理”页签,单击“创建连接”进入新增连接页面,“大数据组件”选择“Doris”,单击“下一步”。
- 在详细配置页面配置以下参数,分别创建源端和目的端连接:
表9 Doris连接配置 参数
参数配置
所属源
选择“源端”或“目的端”。
连接名称
默认创建名称为“Doris-4位随机数(字母和数字)”,也可以自定义名称,例如“Doris-source”或“Doris-target”。
迁移中心Agent
选择MgC Agent中已启用的Agent名称。
Doris凭证
选择步骤 6中在MgC Agent添加的源端或目的端Doris凭证。
数据库地址
连接源端或目的端Doris FE节点的服务器IP地址。
数据库端口
连接源端或目的端Doris FE节点的端口号,默认为9030。
数据库名
填写源端或目的端Doris数据库名称。
- 单击“测试连接”,测试连接通过后,单击“确认”创建源端和目的端Doris连接。
- 创建并运行元数据同步任务。
- 在大数据迁移准备页面,单击“元数据管理”,在“任务管理”页签单击“创建元数据同步任务”,右侧弹出“创建任务-元数据同步”页面,配置以下参数,并单击“确认”:
- 任务名称:数据自定义任务名称。
- 元数据连接:选择步骤 8创建的Doris源端连接。
- 数据库(可选):数据待校验的数据库名称,例如“test_w”。
- 在任务列表中单击新创建的任务所在行的“运行任务”运行元数据同步任务。
- 任务运行完成后,单击“任务实例管理”页签,可查看到任务运行状态。
- 单击“库表清单”页签,查看同步的表清单。
- 在大数据迁移准备页面,单击“元数据管理”,在“任务管理”页签单击“创建元数据同步任务”,右侧弹出“创建任务-元数据同步”页面,配置以下参数,并单击“确认”:
- 创建并加入表组。
- 创建并运行校验任务。
- 查看校验任务运行情况。
- 单击“实例列表”页签,查看校验任务运行情况。
图15 查看校验任务运行结果
- 在实例列表中,选择校验任务所在行的“更多 > 查看校验结果”进入校验结果页面,查看校验结果。
图16 查看校验结果
- 单击“实例列表”页签,查看校验任务运行情况。