通过实例私网打通将自建Elasticsearch数据迁移至阿里云

本文主要介绍当您的阿里云Elasticsearch创建于新网络架构下时,如何通过实例私网连接打通网络后,使用reindex方式将ECS上自建的Elasticsearch中的数据迁移至阿里云Elasticsearch中,包括创建索引和迁移数据。

前提条件

  • 自建Elasticsearch需要满足以下条件:

    • 所在的ECS的网络类型必须是专有网络(不支持Classiclink方式打通的ECS),且必须与阿里云Elasticsearch在同一个专有网络下。

    • 所在的ECS的安全组不能限制阿里云Elasticsearch实例的各节点IP(Kibana控制台可查看各节点的IP),且要开启9200端口。

    • 已经与阿里云Elasticsearch实例连通。可在执行脚本的机器上,使用curl -XGET http://<host>:9200验证。

      说明

      您可以通过任意一台机器执行文档中的脚本,前提是该机器可以同时访问自建Elasticsearch和阿里云Elasticsearch集群的9200端口。

    • 准备自建Elasticsearch索引数据,本文以下图中的source索引作为需要迁移的索引为例。source索引

  • 阿里云Elasticsearch需要满足以下条件:

    • 提前开启自动创建索引功能或者在阿里云Elasticsearch上创建好索引mappingssettings

    • 未做白名单限制。

使用限制

2020年10月阿里云ES进行了网络架构调整,新网络架构下的集群跨集群reindex需依赖Privatelink打通阿里云ES集群私网。您可以参见下表,依据您的业务场景选择解决方案进行处理。

说明

2020年10月之前创建的ES集群属于旧网络架构,2020年10月及之后创建的ES集群属于新网络架构。

使用场景

ES集群所处网络架构

解决方案

阿里云ES集群间的数据迁移

两个ES集群均创建于旧网络架构下。

reindex方式:阿里云ES间跨集群reindex

其中一个ES集群创建于新网络架构下。

说明

另一个ES集群可以创建于新网络架构,也可以创建于旧网络架构。

将ECS上自建的ES集群中的数据迁移至阿里云ES集群中

阿里云ES集群创建于旧网络架构下。

reindex方式:通过reindex将自建ES数据迁移至阿里云

阿里云ES集群创建于新网络架构下。

reindex方式:通过实例私网打通将自建Elasticsearch数据迁移至阿里云

操作流程

  1. 步骤一:配置支持PrivateLink功能的负载均衡实例

    目前,仅支持PrivateLink功能的负载均衡实例作为终端节点服务的服务资源。通过PrivateLink实现在VPC间私网访问服务前,您需要创建支持PrivateLink功能的负载均衡实例,并配置相关监听信息。

  2. 步骤二:创建终端节点服务

    终端节点服务是可以被其他VPC通过创建终端节点建立私网连接的服务,待负载均衡实例配置完成后,您需要创建终端节点服务。

  3. 步骤三:配置阿里云Elasticsearch私网互通

    在Elasticsearch控制台关联阿里云Elasticsearch实例与步骤二中创建的终端节点服务。

  4. 步骤四:获取终端节点域名

    目标实例与终端节点服务关联成功后,即可获取终端节点域名,用于配置reindex白名单。

  5. 步骤五:配置reindex白名单

    在Elasticsearch控制台将步骤四中获取的域名配置到目标实例的reindex白名单中,进行授权。

  6. 步骤六:数据迁移

    完成以上步骤后,即完成源实例与目标实例间的网络互通,可以进行数据迁移。

步骤一:配置支持PrivateLink功能的负载均衡实例

  1. 创建负载均衡实例。

    确保负载均衡实例的地域和后端添加的云服务器ECS的地域相同。详情请参见创建支持PrivateLink功能的负载均衡实例

  2. 配置协议&监听。选择负载均衡协议为TCP,并配置端口号为9200

    详情请参见配置协议&监听

  3. 配置后端服务器,添加自建ES所在的ECS服务器,并配置端口号为9200

    详情请参见配置后端服务器

  4. 单击下一步,按需配置健康检查,本文以默认值为例。

  5. 配置完成后,单击提交,单击知道了,根据页面提示返回实例管理页面,查看后端ECS实例的健康检查状态。

    当后端ECS实例的健康检查状态为正常时,表示后端ECS实例可以正常处理负载均衡转发的请求了。

步骤二:创建终端节点服务

  1. 登录终端节点服务控制台

  2. 在顶部菜单栏处,选择要创建终端节点服务的地域。

    本文以华东1(杭州)为例。

  3. 单击创建终端节点服务,在服务创建页面,按需选择创建终端节点服务配置。

    具体操作和详细说明请参见创建和管理终端节点服务。本文使用的配置说明如下,未提及的参数按需选择或保持默认。

    参数

    说明

    选择服务资源

    选择要承载流量的可用区,然后选择与终端节点服务关联的负载均衡实例。

    负载均衡实例作为服务资源与终端节点服务关联,关联的负载均衡实例将接受来自您服务的用户的网络访问,终端节点服务的可用区与服务资源所在的主可用区一致。

    可以作为服务资源的负载均衡实例必须满足以下两个条件:

    • 网络类型专有网络

    • 功能特性支持PrivateLink

    自动接受终端节点连接

    选择是否自动接受终端节点的连接请求,建议选择,取值含义如下:

    • :终端节点服务将自动接受终端节点的连接请求,通过终端节点能够访问服务。

    • :终端节点连接将处于已断开状态,等待服务管理员进行处理:

      • 如果服务管理员接受该终端节点对应的终端节点服务连接,通过终端节点将能够访问服务。

      • 如果服务管理员拒绝该终端节点对应的终端节点服务连接,通过终端节点无法访问服务。

    是否支持同可用区优先

    选择是否支持同可用区优先,建议选择

  4. 单击确定创建

步骤三:配置阿里云Elasticsearch私网互通

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. Elasticsearch实例中单击目标实例ID。
  4. 在左侧导航栏,选择配置与管理 > 安全配置

  5. 集群网络设置区域,单击配置实例私网连接右侧的修改

  6. 配置实例私网连接面板,单击+添加私网连接,选择步骤二中创建的终端节点服务和目标访问可用区,并选中系统提示信息。

    选择对应可用区

  7. 单击确认,终端节点服务主动连接终端节点,连接成功后会显示已连接

    连接成功

步骤四:获取终端节点域名

执行完以上步骤后,需要获取终端节点域名用于配置reindex白名单。

  1. 配置实例私网连接面板中,单击目标终端节点ID

    单击终端节点ID

  2. 终端节点连接页签,单击目标终端节点ID前的展开符图标,即可查看终端节点对应的域名。

    获取域名

步骤五:配置reindex白名单

重要

该操作会触发集群重启,建议在业务低峰期进行。

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. Elasticsearch实例中单击目标实例ID。
  4. 在左侧导航栏,选择配置与管理 > ES集群配置

  5. YML文件配置区域,单击右侧的修改配置

  6. YML文件配置面板,修改其他Configure配置,将从步骤四中获取的域名配置至此处。

    代码示例:

    reindex.remote.whitelist: 'ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200'

    配置reindex白名单

  7. 单击确定

步骤六:数据迁移

  1. 在Kibana控制台的Dev Tools中执行如下命令,进行数据迁移。

    说明

    登录Kibana控制台的具体步骤请参见登录Kibana控制台

    POST /_reindex?pretty
    {
    
      "source": {
    
        "remote": {
    
          "host": "http://ep-bp1nitq0krp8yhcf****-cn-hangzhou-i.epsrv-bp1zczi0fgoc5qtv****.cn-hangzhou.privatelink.aliyuncs.com:9200",
    
          "username": "elastic",
    
          "password": "Elastic@123***"
    
        },
    
        "index": "source",
        "size": 5000
    
      },
    
      "dest": {
    
        "index": "dest"
    
      }
    
    }

    更多信息说明请参见reindex api

  2. 可选:在数据迁移过程中,如果您需要获取所有正在运行的reindex请求状态,请执行以下命令。

    GET _tasks?detailed=true&actions=*reindex
  3. 查看数据迁移结果。

    待数据迁移完成后,您可以通过执行以下命令查看数据迁移结果。

    GET _cat/indices?

    如果目标端索引test中显示健康状态正常并且数据大小正常,则证明数据迁移成功。数据迁移结果

常见问题

问题:单索引数据量比较大,数据同步速度比较慢时,如何处理?

解决方法:

  • 由于reindex功能的底层实现原理是通过scroll方式实现的,所以您可以适当调大scroll size的大小或配置scroll slice,借助scroll并行化机制提升效率。详情请参见reindex api

  • 如果源端数据量较大,建议采用OSS快照方式。详情请参见通过OSS将自建Elasticsearch数据迁移至阿里云

  • 如果单索引数据量比较大,可以在迁移前将目标索引的副本数设置为0,刷新时间设置为-1,以加快数据同步速度。待数据迁移完成后,再修改回来。

    // 迁移索引数据前可以先将索引副本数设为0,不刷新,用于加快数据迁移速度。
    curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' {
            "number_of_replicas" : 0,
            "refresh_interval" : "-1"
    }'
    // 索引数据迁移完成后,可以重置索引副本数为1,刷新时间1s(1s是默认值)。
    curl -u user:password -XPUT 'http://<host:port>/indexName/_settings' -d' {
            "number_of_replicas" : 1,
            "refresh_interval" : "1s"
    }'