文档首页/ 云搜索服务 CSS/ 最佳实践/ Elasticsearch数据迁移/ 通过Reindex API实现Elasticsearch集群间数据迁移
更新时间:2024-11-22 GMT+08:00

通过Reindex API实现Elasticsearch集群间数据迁移

使用Reindex API可以实现Elasticsearch集群间的数据迁移。

应用场景

Elasticsearch作为一款开源搜索引擎,提供了Reindex API以支持集群间的索引数据迁移。CSS服务同样支持利用Reindex API实现Elasticsearch集群间的数据迁移。以下是该方案适用的专业迁移场景概述:
  • 集群合并:Reindex API能够将分散在多个Elasticsearch集群中的索引数据合并至单一集群,实现数据的集中管理和分析。
  • 服务迁移上云:企业可以将自建的Elasticsearch服务迁移至云平台,以利用云服务的弹性扩展、简化维护和成本效益。
  • 变更服务提供商:对于当前使用第三方Elasticsearch服务的企业,若出于成本、性能或其他战略考量,希望更换至华为云等其他服务提供商,Reindex API提供了一种迁移途径。
Reindex API支持以下迁移策略:
  • 全量迁移:实现跨集群的完整索引数据迁移。在此过程中,必须暂停对源集群的写入操作,以确保源集群与目标集群数据的一致性。
  • 增量迁移:当集群索引包含时间字段时,Reindex API支持基于时间戳的增量数据迁移。在业务切换阶段,全量迁移完成后,需暂停源集群的写入操作,并利用Reindex API基于最近更新时间快速同步增量数据,随后将业务全面切换至目标集群。
  • 索引重构:当需要调整索引结构,如Mapping、分词器或分片设置时,Reindex API可用于在迁移过程中重新配置索引结构。

方案架构

图1 迁移流程

通过Reindex API实现Elasticsearch集群间数据迁移的迁移流程如图1所示。

  1. 在目标集群配置Reindex白名单,连接源集群和目标集群。
  2. 通过Reindex API,将源集群的索引数据迁移至目标集群。

方案优势

  • 操作简单:Reindex API作为Elasticsearch的内置功能,提供了一个简单直接的方法来迁移数据,无需复杂的配置或额外的工具。
  • 数据处理灵活:在迁移过程中,可以对数据进行处理,例如调整Mapping、分词、Shard等。
  • 性能控制:在迁移过程中,可以通过配置Scroll API的参数来控制迁移速率,优化迁移性能。

性能影响

Reindex API的工作原理基于Scroll API,此API能够高效地从源集群查找索引数据,并批量同步至目标集群。这一过程可能会对源集群性能产生影响,具体影响程度取决于目标集群对源集群的读取速度,而读取速度取决于Scroll API的size和slice参数配置。参数配置的详细指导可参考Reindex API文档。

由于Reindex任务在Elasticsearch集群中作为异步任务执行,在低并发情况下对源集群性能的影响是可管理的。然而,对于资源占用较高的集群,建议通过调整Scroll API的size参数来减缓迁移速度,或选择在业务低峰期进行迁移,以降低对业务的影响。

约束限制

  • 集群迁移过程中,源集群的索引数据不能增删改,否则会导致迁移后的源集群数据和目标集群数据内容不一致。
  • 源集群和目标集群的版本必须一致。

前提条件

  • 源Elasticsearch集群和目标Elasticsearch集群处于可用状态。
  • 集群间需要保证网络连通。
    • 如果源集群和目标集群在不同VPC,则需要先打通VPC网络建立对等连接。具体操作请参见对等连接简介
    • 如果是自建Elasticsearch集群迁移至华为云,则可以通过给自建Elasticsearch集群配置公网访问打通网络。
    • 如果是第三方Elasticsearch集群迁移至华为云,则需要建立企业内部数据中心到华为云的VPN通道或专线。
  • 确认集群的索引已开启“_source”

    集群索引的“_source”默认是开启的。执行命令GET {index}/_search,当返回的索引信息里有“_source”信息时表示已开启。

获取Elasticsearch源集群信息

在迁移集群前,需要先获取必备的源集群信息,用于配置迁移任务。

表1 需要获取的Elasticsearch源集群信息

源集群来源

要获取的信息

获取方式

华为云Elasticsearch集群

  • 源集群的访问地址
  • 访问源集群的用户名和密码(仅安全集群涉及)
  • 索引结构
  • 获取集群名称和访问地址请参见3
  • 用户名和密码请联系服务管理员获取。
  • 查询索引结构请参见6

自建Elasticsearch集群

  • 源集群的公网访问地址
  • 访问源集群的用户名和密码(仅安全集群涉及)
  • 索引结构

联系服务管理员获取。

第三方Elasticsearch集群

  • 源集群的访问地址
  • 访问源集群的用户名和密码(仅安全集群涉及)
  • 索引结构

联系服务管理员获取。

源集群的来源不同,获取信息的方式不同,此处仅介绍如何获取华为云Elasticsearch集群的信息。

  1. 登录云搜索服务管理控制台。
  2. 在左侧菜单栏选择集群管理 > Elasticsearch
  3. 在Elasticsearch集群列表,获取集群名称和访问地址。
    图2 获取集群信息
  4. 单击集群操作列的“Kibana”,登录Kibana。
  5. 单击左侧导航栏的“Dev Tools”进入操作页面。
  6. 执行如下命令,查询源集群的索引结构。
    GET {index_name}

    index_name表示待迁移的索引名称。

配置Reindex白名单

在Elasticsearch目标集群,配置Reindex白名单。
  1. 登录云搜索服务管理控制台。
  2. 在左侧菜单栏选择集群管理 > Elasticsearch
  3. 在Elasticsearch集群列表,单击目标集群,进入集群基本信息页面。
  4. 在左侧导航栏选择“参数配置”,单击“编辑”,添加自定义参数配置Reindex白名单。

    当源Elasticsearch集群是HTTPS访问方式,则还需要添加自定义参数忽略SSL认证。

    • 参数名称:reindex.ssl.verification_mode
    • 参数值:none
  5. 单击“提交”,在弹窗中确认参数无误后勾选“参数修改后需要手动重启才能生效”,单击“确定”。
  6. 返回Elasticsearch集群列表,单击目标集群操作列的“更多 > 重启”重启集群,使修改的配置生效。

通过Reindex API迁移集群数据

  1. 在目标集群,创建索引结构。
    1. 登录云搜索服务管理控制台。
    2. 在左侧菜单栏选择集群管理 > Elasticsearch
    3. 在Elasticsearch集群列表,单击集群操作列的“Kibana”,登录Kibana。
    4. 单击左侧导航栏的“Dev Tools”进入操作页面。
    5. 执行命令,创建和源集群一样的索引结构。
      PUT {index_name}
      {
        源集群的索引结构
      }

      index_name表示迁移后的索引名称。源集群的索引结构可参见获取Elasticsearch源集群信息获取。

  2. 执行如下命令,通过Reindex API迁移集群数据。
    • 全量迁移:源集群的索引数据全量迁移到目标集群。

      在目标集群的Kibana,执行如下命令:

      POST _reindex?wait_for_completion=false
      {
        "source": {
           "remote": {
            "host": "http://xx.xx.xx.xx:9200",    //源集群的访问地址,当源集群是HTTPS访问方式,则使用“https://xx.xx.xx.xx:9200”。
            "username": "xxx",    //访问源集群的用户名,仅安全集群涉及。
            "password": "******"    //访问源集群的用户密码,仅安全集群涉及。
          },
          "index": "index_name",    //源集群的索引名称。
          "size": 3000
        },
        "dest": {
          "index": "index_name"    //目标集群的索引名称。
        }
      }
    • 增量迁移:通过时间字段,将源集群的索引数据增量迁移到目标集群。该方案也可以用于进行大数据量索引的分段迁移。

      在目标集群的Kibana,执行如下命令:

      POST _reindex?wait_for_completion=false
      {
        "source": {
          "remote": {
            "host": "http://xx.xx.xx.xx:9200",    //源集群的访问地址,当源集群是HTTPS访问方式,则使用“https://xx.xx.xx.xx:9200”。
            "username": "xxx",    //访问源集群的用户名,仅安全集群涉及。
            "password": "******"    //访问源集群的用户密码,仅安全集群涉及。
          },
          "query": {
            "range" : {
              "timestamps" : {    //增量时间字段。
                "gte" : "xxx",    //增量迁移的开始时间。
                "lte" : "xxx"    //增量迁移的结束时间。
              }
            }
          },
          "index": "index_name",    //源集群的索引名称。
          "size": 3000
        },
        "dest": {
          "index": "index_name"    //目标集群的索引名称。
        }
      }
    • 同集群索引重构:Reindex API在迁移过程中可以重新配置索引结构。

      在目标集群的Kibana,执行如下命令:

      POST _reindex?wait_for_completion=false
      {
        "source": {
          "index": "index_name",    //源集群的索引名称
          "size": 3000
        },
        "dest": {
          "index": "index_name"    //目标集群的索引名称
        }
      }

常见问题:当索引数据大、数据同步慢时,如何处理?

当索引数据大、数据同步慢时,有如下几种方案可以提高效率。