全部产品
阿里云办公

创建MySQL同Elasticsearch间的数据实时同步

更新时间:2018-10-22 14:55:52

数据传输服务 DTS (以下简称 DTS)支持 MySQL 到Elasticsearch的数据实时同步。通过 DTS 提供的 MySQL->Elasticsearch 实时同步功能,可以将企业线上生产数据实时同步到Elasticsearch中进行实时搜索。
本小节介绍如何使用 DTS 快速创建 MySQL->Elasticsearch 实例的实时同步作业,实现MySQL数据到 Elasticsearch 的实时同步。

支持的数据实时同步类型

  • 通过专线接入阿里云的自建MySQL->阿里云Elasticsearch实例
  • 通过VPN网关接入阿里云的自建MySQL->阿里云Elasticsearch实例
  • ECS上的自建MySQL->阿里云Elasticsearch实例
  • 同一个阿里云账号下 RDS for MySQL->阿里云Elasticsearch实例
  • 不同阿里云账号下的 RDS for MySQL->阿里云Elasticsearch实例

支持的 SQL 操作类型

MySQL->Elasticsearch实时同步支持的 SQL 操作类型如下:
Insert
Delete
Update

目前暂不支持 DDL同步,如果同步过程中遇到DDL操作,DTS会忽略掉。
后续,如果遇到这个DDL对应表的DML操作可能失败。此时,修复方法为:

  1. 参考减少同步对象先将这个对象从同步列表中摘除。
  2. 删除Elasticsearch中这个表对应的索引。
  3. 参考 新增同步对象, 修改这个同步作业,将这个表重新添加到同步对象中,进行重新初始化。

如果是修改表, 新增列的DDL,建议DDL的操作顺序为:

  1. 现在Elasticsearch中手动修改对应表的mapping,新增列。
  2. 在源MySQL实例中手动修改表结构,新增列。
  3. 暂停DTS同步实例,重启DTS同步实例让DTS重新加载Elasticsearch中修改后的mapping关系。

配置步骤

下面详细介绍创建 MySQL 实例到 Elasticsearch 实例的同步链路的具体步骤。

1. 购买同步链路

进入 数据传输服务 DTS 控制台,进入数据同步页面,点击控制台右上角“创建同步作业” 开始作业配置。

在链路配置之前需要购买一个同步链路。同步链路目前支持包年包月及按量付费两种付费模式,可以根据需要选择不同的付费模式。

在购买页面需要配置的参数包括:

  • 源实例
    源实例目前只支持 MySQL。此处,使用MySQL即可。
  • 源地域
    如果为本地自建MySQL,那么选择专线在阿里云上的接入点所在的地域。如果为ECS上的自建MySQL,那么选择ECS实例所在的地域。如果为RDS For MySQL,那么选择RDS实例所在的地域。
  • 目标实例
    目标实例目前支持MySQL、MaxCompute、Datahub、分析型数据库 AnalyticDB及Elasticsearch 。此处选择 Elasticsearch
  • 目标地域
    目标地域为目标 Elasticsearch 实例所在地域。
  • 实例规格
    实例规格影响了链路的同步性能,实例规格跟性能之间的对应关系详见 数据同步规格说明

当购买完同步链路,返回DTS控制台。
DTS控制台的同步实例按照地域展示,刚才购买的同步实例所属的地域为同步实例的目标地域。例如,刚才购买的是 杭州MySQL->北京Elasticsearch的同步实例,那么这个同步实例在DTS的北京地区。进入北京区域的实例列表,查找刚才购买的同步实例,然后点击新购实例右侧的“配置同步作业” 开始配置实例。

配置入口

2. 同步链路连接信息配置

这一步主要配置:

  • 同步作业名称

同步作业名称没有唯一性要求。为了更方便识别具体的作业,建议选择一个有业务意义的作业名称,方便后续的链路查找及管理。

  • 数据源连接信息配置

源实例可以为:通过专线接入阿里云的自建数据库、ECS上的自建数据库、RDS。

如果源实例为通过专线/VPN网关/智能网关接入阿里云的自建数据库,那么需要配置的连接信息如下:

  • 实例类型:选择 通过专线接入阿里云的本地 DB
  • 实例地区:如果是通过专线接入,那么配置专线接入阿里云的接入点,例如接入阿里云的北京,那么选择 华北2 。 如果是通过VPN网关/智能网关接入,那么配置网关接入阿里云的接入点。
  • 对端专有网络:专线/VPN网关/智能网关接入的阿里云上的专有网络的VPC ID
  • 主机名或IP地址:本地 MySQL 数据库的访问地址,这个地址为本地局域网访问地址
  • 端口:本地 MySQL 实例监听端口
  • 数据库账号:本地 MySQL 实例访问账号
  • 数据库密码:上面指定的 MySQL 访问账号对应的密码

本地自建DB

如果源实例为ECS上的自建数据库,那么需要配置的连接信息如下:

  • 实例类型:选择 ECS上的自建数据库
  • ECS实例ID: ECS实例的ID
  • 端口:本地 MySQL 实例监听端口
  • 数据库账号:本地 MySQL 实例访问账号
  • 数据库密码:上面指定的 MySQL 访问账号对应的密码

ECS上的自建数据库

如果源实例为RDS,那么只需要配置RDS实例的ID。

RDS2ADS

目标实例信息中需要配置 Elasticsearch 的实例ID及访问的账号密码。ES连接信息

当这些内容配置完成后,可以点击授权白名单并进入下一步 进行 MySQL 及 Elasticsearch的白名单添加。

当MySQL为RDS及ECS实例上的自建数据库时,DTS会自动添加白名单或安全组。如果是通过专线/VPN网关/智能网关接入的本地自建数据库,请参考 通过专线访问的本地自建数据库到RDS实例的数据同步实例 一文的 迁移前置条件 一节 进行路由配置,设置DTS服务器可通过专线/VPN网关/智能网关访问本地数据库。

3. 授权实例白名单

如果源实例为RDS 或ECS实例上的自建数据库,那么DTS将自身的IP段添加到 RDS 实例的白名单或ECS的安全组中。避免因为 RDS/ECS实例 设置了白名单,DTS服务器连接不上数据库导致同步作业创建失败。

为了保证同步作业的稳定性,在同步过程中,请勿将这些服务器 IP 从 RDS实例的白名单/ECS实例的安全组中删除。

当白名单授权后,点击“下一步”,进入同步账号创建。

5. 选择同步对象

当 白名单授权完成后 后,即进入同步对象的选择步骤。

在这个步骤,可以配置需要同步的表列,以及索引的命名规则。

(1) 索引名称命名规则可以选择:表名、库名_表名。如果选择了表名,那么索引名称同表名。如果选择了库名表名,那么索引名称的命名格式为:库名表名。例如,库名为:dbtest,表名为:sbtest1,那么这张表同步到Elasticsearch后,对应的索引名称为:dbtestsbtest1。如果,需要同步的不同库中存在相同名称的表名,建议索引名称命名规则选择:库名表名。

(2) 选择具体需要同步的库表列,实时同步的同步对象的选择粒度可以支持到表级别,即用户可以选择同步某些库或某几张表。

实时同步的同步对象的选择粒度可以支持到表级别,即用户可以选择同步某些库或某几张表。
选择同步表

(3)默认所有表的docid为表的主键,如果部分表没有主键,那么对于这部分配置docid 对应的源表的列。在右侧-已选择对象 框中,将鼠标挪到对应表上,点击右侧的 编辑 入口,进入这个表的高级设置界面。
高级配置

在高级配置中可以设置:
索引名称、Type名称、分区列及分区数定义、_id取值列。其中,_id取值如果选择 业务主键,那么需要选择对应的业务主键列。
当配置完同步对象后,进入高级配置步骤。

6. 高级配置

如果选择了结构初始化,那么需要对每个要同步的表,定义其在 AnalyticDB 中的表类型、主键、分区列等。AnalyticDB的表定义可以参考 创建和修改表

在这个步骤中,主要配置:
(1)同步初始化的类型,建议选择 结构初始化+全量数据初始化,由DTS自动进行索引的创建及全量数据的初始化。如果不选择结构初始化,那么需要在同步创建之前,先手动在Elasticsearch中完成索引mapping的定义。如果不选择全量数据初始化,那么DTS同步增量数据的起始时间点为:启动同步的时间点。
(2)索引的分片配置,默认为:5个分片,1个副本。可以根据业务需要进行调整,一旦调整后,所有的索引按照这个配置定义分片。
(3)字符串analyzer定义,可以选择字符串的analyzer,默认为Standard Analyzer。取值包括:Standard Analyzer、Simple Analyzer、Whitespace Analyzer、Stop Analyzer、Keyword Analyzer、English Analyzer、Figerprint Analyzer。所有索引的字符串字段按照这个配置定义Analyzer。
(4)时区,可以配置同步到Elasticsearch中的时间字段存储的时区。默认为东八区。

任务-高级配置

7. 预检查

同步作业配置完成后,DTS会进行预检查,当预检查通过后,可以点击 启动 按钮,启动同步作业。

同步作业启动后,即进入同步作业列表。此时刚启动的作业处于同步初始化状态。初始化的时间长度取决于源实例中同步对象的数据量大小。初始化完成后,同步链路即进入同步中的状态,此时源跟目标实例的同步链路才真正建立。