数据传输服务DTS

    使用DTS实现目标端为Elasticsearch的数据迁移

    1. 适用场景

    本文适用于使用百度智能云数据传输服务DTS(以下简称 DTS),将DTS已经支持的任意上游数据源(MySQL/Oracle等)中的数据迁移到目标端Elasticsearch实例中。

    2. 使用限制

    • 不支持结构迁移
    • 增量同步不支持同步关系型数据库的DDL语句
    • 源端数据源为MySQL时,源端表中的enum/set/timestamp类型字段只能将二进制信息传给下游,用户需要自行按照上游MySQL表结构解析其释义
    • 不支持同步源端数据源的二进制(binary)类型数据

    3. 迁移前置条件

    3.1 环境要求

    已创建作为迁移源端的数据源实例,如:RDS for MySQL、自建MySQL、自建Oracle等。

    已创建作为迁移目标端的Elasticsearch实例,如:百度Elasticsearch实例、自建Elasticsearch实例。DTS支持的Elasticsearch版本为5.0及以上

    3.2 权限要求

    源端:满足结构迁移、全量迁移、增量迁移、数据校验等各阶段对源端权限的最低要求即可,详见各类数据源迁移上云最佳实践

    目标端:要求账号拥有在Elasticsearch实例中创建索引、写入数据的权限

    3.3 目标端Elasticsearch推荐配置

    目前,DTS暂不支持结构迁移。如果您选择全量/增量迁移,向下游写入数据时,Elasticsearch会根据写入数据的格式自动建立索引,并指定相应的索引映射(mapping)。但有可能Elasticsearch自行映射的字段类型并不符合实际的使用需求,因此不推荐这样做。

    我们推荐在启动DTS任务前,先建立目标端Elasticsearch的相关索引,并按照实际的查询需求指定每一个字段的类型,然后启动DTS数据迁移任务。

    此外,为了避免大批量写入数据给下游的Elasticsearch实例造成过高的负载,我们推荐将集群粒度属性refresh_interval配置为相对合理的值。如果您能接受新写入的数据在写入后1分钟可见,则可以考虑将refresh_interval取值设为1m。

    PUT /indice/_settings
    {
        "index" : {
            "refresh_interval" : "1m"
        }
    }

    4. 操作步骤

    4.1 创建迁移任务

    进入DTS列表页,点击【创建数据传输实例】

    create.png

    配置实例基本信息后支付购买DTS实例

    beforepay.png

    bill.png

    4.2 配置任务

    回到DTS列表页后,可以看到刚刚购买的DTS实例,状态为【未配置】

    create.png

    点击【配置任务】

    4.2.1 连接配置

    首先配置数据传输任务的上下游连接信息,您可以按需选择云数据库实例或自建实例

    connection.png

    如上图所示。源端连接信息中,您可以按需选择不同的数据源作为任务的源端,包括:RDS for MySQL、自建MySQL、自建Oracle等。图中选择了华东-苏州地域的RDS for MySQL实例。

    目标端应选择Elasticsearch实例。目前DTS的目标端支持云上托管产品百度Elasticsearch和自建Elasticsearch实例。图中选择了华北-保定地域的百度Elasticsearch实例。Elasticsearch目标端配置参数说明如下:

    • 接入类型:支持公网/BCC/BBC/DCC自建Elasticsearch实例和百度Elasticsearch实例
    • 数据类型:固定选择Elasticsearch
    • 地域:自建实例/百度Elasticsearch实例所在的百度云逻辑地域。接入类型选择公网时不需要选择地域
    • 实例ID:接入类型选择BCC/BBC/DCC时,表示BCC/BBC/DCC实例ID;接入类型选择百度Elasticsearch时,表示百度Elasticsearch实例ID。接入类型选择公网时,不需要选择实例ID,但需要填入实例IP。
    • 端口:Elasticsearch实例的访问端口,百度Elasticsearch实例不需要填写该字段。

    如果您的Elasticsearch实例为自建集群,且集群中包含多个节点,配置任务时只需要填写集群中某一个节点连接信息即可,推荐使用主节点配置任务

    • 账号鉴权:接入类型选择百度Elasticsearch时,默认要求填写账号和密码,可在百度Elasticsearch实例详情页查得。接入类型选择公网/BCC/BBC/DCC时,可按照自建Elasticsearch实例的实际配置,选择是否需要填写账号鉴权信息
    • 插入方式:属于数据视图相关功能,配置方式详见下文【数据视图】->【如何配置任务】。正常的数据迁移任务选择任务默认即可
    • 指定主键:属于数据视图相关功能,配置方式详见下文【数据视图】->【如何配置任务】。正常的数据迁移任务无需配置该字段
    • 负载均衡:仅当接入类型选择公网/BCC/BBC/DCC自建时可选。若打开负载均衡,则DTS在数据迁移过程中,会查询并维护Elasticsearch集群全局拓扑,并在写入时将请求随机发到集群的任意存活节点中。

    完成配置后点击【授权白名单进入下一步】,进入对象映射配置页

    4.2.2 对象映射

    schema.png

    如上图所示,数据流向为:云数据库 RDS(MySQL) -> 百度Elasticsearch(Elasticsearch),迁移类型选择全量迁移+增量同步。传输对象可以选择迁移源端整个实例,也可以选择手动筛选迁移对象。图中选择将dtstest库下的multi_pk_tbl1、multi_pk_tbl2、multi_pk_tbl3三张表作为迁移对象。

    选择好的迁移对象会出现在右边的已选择对象列表中。DTS支持上下游库表名映射、行过滤、列过滤黑白名单等功能。可以点击【编辑】,对每一个迁移对象配置映射和过滤规则。

    上图中,示例任务配置了multi_pk_tbl1和multi_pk_tbl2的表名映射规则,将其目标端表名改为tbl1和tbl2。您也可以按照自己需要配置行过滤规则和列过滤黑白名单。

    DTS数据迁移的映射规则为源端一张表对应Elasticsearch中一个索引,索引名为:映射后库名_映射后表名。如dtstest.multi_pk_tbl1表,配置了表名映射规则multi_pk_tbl1->tbl1后,对应下游的索引名为:dtstest_tbl1。同理,dtstest.multi_pk_tbl2表对应的下游索引名为dtstest_tbl2。而图中dtstest.multi_pk_tbl3表并未配置表名映射,因此其映射后表名仍为multi_pk_tbl3,所以其对应的下游索引名为:dtstest_multi_pk_tbl3。

    如果选择库级别迁移,则只能配置库名映射,无法配置表名映射。下游索引名:映射后库名_表名。如:test库下有tbl1一张表,任务选择迁移test库,并配置库名映射为:test->alpha。则下游Elasticsearch实例中新建的索引名为:alpha_tbl1。

    另外,Elasticsearch要求索引名必须为全小写。因此DTS会默认将上游库表名转为全小写的索引名。如:上游的dtsTEST.TESTTABLE表对应的下游Elasticsearch索引名为:dtstest_testtable。

    完成对象映射配置后,点击【保存并预检查】,启动任务的前置检查

    4.3 前置检查和启动迁移

    可以在DTS实例列表页查看前置检查的执行结果。如果检查失败,可以点击任务主状态旁的眼睛状标识查看前置检查的详情,并查阅未通过检查项的失败原因。

    precheck.png

    您可以根据DTS推荐的方式修正问题后,重新执行预检查,直至前置检查通过。此时点击右侧【启动】即可启动任务

    checkpass.png

    4.4 检查Elasticsearch实例数据

    您可以在数据迁移过程中用Elasticsearch提供的客户端或REST接口检查数据。如目标端Elasticsearch版本为7.6时,查询twitter索引中_id为0的记录

    GET twitter/_doc/0

    5. 数据视图

    5.1 业务场景

    数据视图就是将源端数据源多张实体表的数据拼成一个视图,并保存到目标端Elasticsearch实例的同一个索引中。

    upsert.png

    如上图所示,源端数据源中存在三张实体表:tbl_name、tbl_age、tbl_address。其中,三张表中主键相同且均为pk_id,但表中其他字段相异。DTS支持建立源端多张实体表的数据同步到目标端某一个或某几个索引的数据迁移任务,同步任务以pk_id为索引指定主键,支持同步全量或增量数据。

    5.2 使用限制

    • 同一视图内的表均包含索引指定主键。如上图中,tbl_name、tbl_age、tbl_address三张表中均包含索引指定主键pk_id
    • 源端数据视图一致性由用户保证。同一视图内的表新增和删除数据时应尽可能保证原子性
    • 不支持修改数据视图的指定主键列,会导致任务执行失败

    5.3 如何配置任务

    5.3.1 连接配置

    view1.png

    回到任务配置中的连接配置页,数据视图功能与正常迁移任务的区别在于需要多配置两个字段

    • 插入方式:固定选择upsert
    • 指定主键:用户需要指定一个数据视图中的主键列,格式为:下游索引名1[主键列];下游索引名2[主键列1,主键列2]

    如上文中【5.1 业务场景】中的示例。tbl_name、tbl_age、tbl_address三张表组成的数据视图主键列为pk_id。源端数据视图对应的Elasticsearch索引名为:dtstest_view,此时指定主键中就应当配置为dtstest_view[pk_id]

    此外,一个数据迁移任务中可以配置多个数据视图的同步规则。如:一个数据迁移任务内打算配置dtstest_view1(主键列为id)、dtstest_view2(主键列为user_id和name)两个数据视图的全量迁移+增量迁移,指定主键可以配置为:dtstest_view1[id];dtstest_view2[user_id,name]。不同视图间用分号(;)连接,同一视图的不同主键列间用逗号(,)连接

    5.3.2 对象映射

    在对象映射配置页中,数据视图功能与正常迁移任务的区别在于同一数据视图的实体表需要配置表名映射,以确保源端多张表的全量数据和增量变更记录能够写入目标端同一个Elasticsearch索引中。

    如下图所示,multipktbl1、multipktbl2、multipktbl3三张表同属同一个数据视图,因此三张表的目标端表名配置为view。配置后的目标端Elasticsearch索引名为:映射后库名_映射后表名(dtstest_view)索引名与上一步中指定主键配置(dtstest_view[pk_id])中的索引名保持一致

    view2.png

    其他配置与正常的数据迁移任务相同,不再赘述

    上一篇
    使用DTS实现MongoDB到MongoDB数据迁移
    下一篇
    使用DTS实现Redis到Redis数据迁移