通过LTS迁移和同步自建Elasticsearch数据

LTS提供了表结构迁移、历史数据迁移、增量数据同步及数据校验等核心功能,支持将自建Elasticsearch(简称ES)集群中的数据全量迁移或增量同步至Lindorm搜索引擎。本文介绍具体的操作步骤。

前提条件

注意事项

  • 增量同步功能不支持同步过程中源集群的删除(DELETE)操作,源集群的数据删除不会同步到目标集群。

  • 增量同步过程中,源集群的写RT与执行刷新(Refresh)操作的时间总和,不能超过增量同步配置的gapInterval的值。增量同步任务启动时,对应时间区间内写入的数据必须可以通过API读取到。

    重要
    • 如果写RT+Refresh操作时间大于gapInterval的值,可能会导致任务启动后系统无法读取到指定时间区间内的数据。因此,请勿将gapInterval的值设置地过低。

    • 建议您在同步过程中关注源集群的写入延迟和Refresh延迟,增大告警阈值,方便定位问题。

  • 增量同步基于时间范围扫描源集群的索引数据,因此要求源集群索引必须包含时间字段,且每次写入或更新索引文档时需同步该时间字段,以确保数据的连续性。

    说明

    如果索引无时间字段,您可以通过default_pipeline新增时间字段

步骤一:添加数据源

在配置迁移任务前,您需要先添加自建ES数据源及Lindorm Search数据源。

添加自建ES数据源

  1. 登录LTS,在左侧导航栏选择数据源管理 > 添加数据源

  2. 数据源类型选择ElasticSearch(7.x)

  3. 数据源参数处,配置以下参数:

    参数

    说明

    connection

    自建ES集群的连接地址,格式为<域名(IP)>:<端口>,例如es-hosts.*******.com:9200

    如果自建ES集群有多个节点(Node)可以填多个连接地址,用英文逗号(,)分隔,例如host1:9200,host2:9200,host3:9200

    user

    自建ES集群的用户名。

    password

    自建ES集群的密码。

  4. 单击添加

添加Lindorm Search数据源

  1. 在左侧导航栏选择数据源管理 > 添加数据源

  2. 数据源类型选择ElasticSearch(7.x)

  3. 数据源参数处,配置以下参数:

    参数

    说明

    connection

    Lindorm搜索引擎Elasticsearch兼容地址

    user

    Lindorm搜索引擎的用户名

    password

    Lindorm搜索引擎的密码

  4. 单击添加

步骤二:配置同步任务

  1. 在左侧导航栏选择Lindorm Search > ES迁移

  2. 进入自建ES迁移Lindorm Search页面,单击创建任务

  3. 配置以下参数:

    参数

    是否必填

    说明

    任务名

    迁移任务名称。

    源集群

    选择已创建的自建ES数据源。

    目标集群

    选择已创建的Lindorm Search数据源。

    操作

    根据需求勾选操作:

    • 表结构迁移:在目标集群创建表(Schema、分区信息一致),目标集群表已存在会跳过。

    • 实时数据复制:同步源集群的实时增量数据。

    • 历史数据迁移:文件级别的全量文件物理迁移。

    同步/迁移的表

    填写需要同步或迁移的表,填写规则请单击同步/迁移的表后的参数说明查看。

    重要
    • 支持使用通配符(换行符)填写多张表。

    • 任务启动后,源集群新创建的索引不会被加入到同步列表中。

    image

  4. 可选)配置数据读取模式。

    • Scroll API(默认模式):使用方式简单,但当任务同步失败时,整个任务需要重新开始执行。

    • Search After:支持Task级别的断点续传,但需填写额外的排序字段。

  5. 配置增量时间字段。

    重要

    如果操作参数勾选了实时数据复制,则该步骤不可跳过。

    增量同步本质上是一项定时任务,通过定期执行数据扫描将指定时间区间内的数据同步至目标端,因此需要为每次更新的文档配置一个能够表示当前时间的增量时间字段。如果索引无时间字段,您可以通过default_pipeline新增

  6. 可选)高级配置。您可以参考以下内容进行配置:

    配置

    说明

    refreshInterval

    源端索引配置的refresh_interval(数据从写入到可见的最长间隔时间),将自动从索引settings中获取。若settings中未配置,则需手动指定。

    autoRefreshEnabled

    是否自动执行Refresh,保证源端写入的数据可以被扫描。默认关闭。开启后在全量启动时、每次增量扫描启动时会执行一次Refresh。

    incrInterval

    增量同步配置,表示每次扫描的时间区间的长度,默认值为1分钟。例如12:00~12:01

    gapInterval

    增量同步配置,每次启动扫描的等待时间,默认值为3分钟。

    例如:当前任务需要扫描的时间区间为12:00~12:01,则该任务只能在12:04(12:01 + 3分钟)启动。

    重要
    • 配置该参数可以避免源端请求排队导致的时间错位问题(即数据实际更新时间晚于任务启动时间)。

    • 缩短等待时间可提升实时性,但依旧会存在数据不一致的问题,建议您结合autoRefreshEnabled参数使用。

    scrollSize

    通过ES API拉取数据时每次指定的数据大小。

    scrollTtlMs

    Scroll ID(或PIT)过期的时间,若ID过期则任务只能从头重试。

  7. 单击创建

步骤三:数据校验

任务完成后您可以通过以下步骤校验源集群和目标集群的数据一致性:

  1. 在左侧导航栏选择Lindorm Search > 数据校验

  2. ES迁移-数据校验页面,单击创建任务

  3. 在数据抽样校验页面,配置以下参数。

    参数

    是否必填

    说明

    任务名

    迁移任务名称。

    源集群

    选择已创建的自建ES数据源。

    目标集群

    选择已创建的Lindorm Search数据源。

    同步/迁移的表

    填写需要校验的索引。

    高级配置

    填写抽样比例,格式请单击高级配置后的参数说明查看。image

  4. 单击创建,校验结果会存储在目标集群的索引中,方便您查看不一致信息。

步骤四:切换流量

切换流量过程中需要短暂停止服务。源集群写流量停止后,需要观察停止时刻之前的实时数据是否都已经同步完成,同步完成后请将流量切换至目标集群。您可以通过以下步骤查看同步进度:

  1. 自建ES迁移Lindorm Search页面单击目标任务名称。

  2. 实时任务区域,单击任务名称。image

  3. 增量Task同步信息区域查看同步进度。image

附录

示例:通过default_pipeline新增更新时间字段

  1. 创建pipeline。

    PUT _ingest/pipeline/add_timestamp
    {
      "description": "Add a timestamp field with the current Unix timestamp.",
      "processors": [
        {
          "set": {
            "field": "timestamp",
            "value": "{{_ingest.timestamp}}",
            "if": "ctx.timestamp == null"
          }
        },
        {
          "script": {
            "lang": "painless",
            "source": """
              if (ctx.timestamp instanceof String) {
                ZonedDateTime zdt = ZonedDateTime.parse(ctx.timestamp); 
                Instant instant = zdt.toInstant();
                ctx.timestamp = instant.toEpochMilli();
              }
            """
          }
        }
      ]
    }
  2. 为已有的索引更新default_pipeline,写入和更新时会自动修改该时间字段。以索引pipeline_test为例:

    PUT pipeline_test/_settings
    {
      "default_pipeline": "add_timestamp"
    }

常见问题

迁移任务运行失败应该如何处理?

导致迁移任务失败的可能原因很多,例如网络不稳定、服务冲突等。LTS自带重试机制,在任务失败后会自动重试。如果重试后依然失败,请联系Lindorm技术支持(钉钉号:s0s3eg3)。