本文主要介绍当您的阿里云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月起,由于网络架构的调整,导致部分通过reindex方式跨集群迁移数据的场景受到了限制。您可以参见下表,查看您的业务场景是否支持reindex功能,并参考解决方案进行处理。
使用场景网络状态(2020年10月之前属于旧网络架构,2020年10月及之后属于新网络架构)是否支持reindex功能解决方案
通过reindex方式迁移阿里云Elasticsearch集群间的数据两个Elasticsearch集群均创建于旧网络架构下。请参见通过reindex迁移数据
两个Elasticsearch集群均创建于新网络架构下。不支持reindex方式,建议使用OSS或Logstash方式。具体操作请参见通过OSS将自建Elasticsearch数据迁移至阿里云通过阿里云Logstash将自建Elasticsearch数据迁移至阿里云
两个Elasticsearch集群分别创建于旧网络架构下和新网络架构下。
将ECS上自建的Elasticsearch集群中的数据迁移至阿里云Elasticsearch集群中阿里云Elasticsearch集群创建于旧网络架构下。请参见通过reindex将自建Elasticsearch数据迁移至阿里云
阿里云Elasticsearch集群创建于新网络架构下。借助PrivateLink,打通ECS上自建Elasticsearch集群所处的网络与阿里云服务账号的网络,再使用终端节点域名进行reindex。详情请参见通过实例私网打通将自建Elasticsearch数据迁移至阿里云
说明 PrivateLink仅支持部分地域私网连接,详情请参见支持私网连接的地域和可用区。如果您的集群可用区不满足此条件,则不支持reindex功能。

操作流程

  1. 步骤一:配置支持PrivateLink功能的负载均衡实例
    目前,仅支持PrivateLink功能的负载均衡实例作为终端节点服务的服务资源。通过PrivateLink实现在VPC间私网访问服务前,您需要创建支持PrivateLink功能的负载均衡实例,并配置相关监听信息。
  2. 步骤二:创建终端节点服务
    终端节点服务是可以被其他VPC通过创建终端节点建立私网连接的服务,待负载均衡实例配置完成后,您需要创建终端节点服务。
  3. 步骤三:配置阿里云Elasticsearch私网互通
    在Elasticsearch控制台关联阿里云Elasticsearch实例与步骤二中创建的终端节点服务。
  4. 步骤四:获取终端节点域名
    目标实例与终端节点服务关联成功后,即可获取终端节点域名,用于配置reindex白名单。
  5. 步骤五:配置reindex白名单
    在Elasticsearch控制台将步骤四中获取的域名配置到目标实例的reindex白名单中,进行授权。
  6. 步骤六:数据迁移
    完成以上步骤后,即完成源实例与目标实例间的网络互通,可以进行数据迁移。

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

  1. 创建负载均衡实例。
    确保负载均衡实例的地域和后端添加的云服务器ECS的地域相同。详情请参见创建支持PrivateLink功能的负载均衡实例
    说明 PrivateLink仅支持部分地域私网连接,详情请参见支持私网连接的地域和可用区。如果您的集群可用区不满足此条件,则不支持reindex功能。
  2. 配置协议&监听。选择负载均衡协议为TCP,并配置端口号为9200
    详情请参见配置协议&监听
  3. 配置后端服务器,添加自建ES所在的ECS服务器,并配置端口号为9200
    详情请参见配置后端服务器
  4. 单击下一步,按需配置健康检查,本文以默认值为例。
  5. 配置完成后,单击提交,根据页面提示返回实例管理页面,查看后端ECS实例的健康检查状态。

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

  6. 负载均衡业务配置向导弹框中,单击知道了,返回实例管理页面。

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

    创建结果

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

  1. 登录终端节点服务控制台
  2. 在顶部菜单栏处,选择要创建终端节点服务的地域。
    本文以华东1(杭州)为例。
  3. 单击创建终端节点服务,在服务创建页面,按需选择创建终端节点服务配置。
    具体操作和详细说明请参见创建和管理终端节点服务。本文使用的配置说明如下。创建终端节点服务
    参数 说明
    选择服务资源选择要承载流量的可用区,然后选择与终端节点服务关联的负载均衡实例。负载均衡实例作为服务资源与终端节点服务关联,关联的负载均衡实例将接受来自您服务的用户的网络访问,终端节点服务的可用区与服务资源所在的主可用区一致。
    可以作为服务资源的负载均衡实例必须满足以下两个条件:
    • 网络类型专有网络
    • 功能特性支持PrivateLink
    自动接受终端节点连接选择是否自动接受终端节点的连接请求,建议选择,取值含义如下:
    • :终端节点服务将自动接受终端节点的连接请求,通过终端节点能够访问服务。
    • :终端节点连接将处于已断开状态,等待服务管理员进行处理:
      • 如果服务管理员接受该终端节点对应的终端节点服务连接,通过终端节点将能够访问服务。
      • 如果服务管理员拒绝该终端节点对应的终端节点服务连接,通过终端节点无法访问服务。
    说明
    • 如果您的终端节点服务开启了自动接受连接,创建成功后,终端节点连接状态显示已连接。当状态为已连接时,支持拒绝连接
    • 如果您的终端节点服务未开启自动接受连接,则终端节点状态显示未连接,支持允许连接
    是否支持同可用区优先选择是否支持同可用区优先,建议选择
    描述输入终端节点服务的描述信息,描述长度为2~256个字符,但是不能以http://和https://开头。
  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"
    }'