本文为您介绍通过Logstash,将Elasticsearch(简称ES)索引从腾讯云ES迁移至阿里云ES中的方法。

迁移方案选取

由于腾讯云ES版本与阿里云ES版本不一致,需要选择兼容的版本进行迁移,本文支持的版本方案如下(其他方案不保证兼容):

  • 腾讯云ES 5.6.4 -> ECS(Logstash 5.6.x)-> 阿里云ES 5.5.6
  • 腾讯云ES 6.4.3 -> ECS(Logstash 6.7.0)-> 阿里云ES 6.7.0
  • 腾讯云ES 6.4.3 -> 阿里云Logstash 6.7.0 -> 阿里云ES 6.7.0(本文以此为例)
注意 由于腾讯云ES版本分别与阿里云ES版本不一致,所以建议您在大版本内进行数据同步,不建议跨大版本同步。关于Logstash版本选取详情,请参见Support Matrix

解决方案概述

您可以通过以下步骤来迁移Elasticsearch索引:

  1. 创建阿里云Elasticsearch实例阿里云Logstash实例
    在迁移过程中,需要连接公网才能与腾讯云ES互通。由于Logstash实例部署在VPC下,可以通过配置NAT网关实现与公网的连通,详情请参见公网数据导入和导出常见问题
    说明 对于自建的Logstash,需要购买与阿里云ES在同一可用区、同一VPC下的ECS实例(已符合条件的ECS不需要重复购买,需要绑定弹性公网IP)。您也可以购买经典网络的ECS实例(不建议),但需要配置Classiclink,实现通过经典网络访问专有网络中的阿里云ES,详情请参见通过经典网络访问ES常见问题
  2. 创建腾讯云ES实例,并搭建腾讯云代理服务器。
    由于腾讯云Elasticsearch不支持公网直接访问,因此您需要准备cvm服务器搭建nginx代理,详情请参见外网访问腾讯ES集群
  3. 修改Logstash的yml文件配置。
    目前阿里云Logstash只支持通过kibana方式,修改yml文件的pipeline配置,详情请参见通过Kibana配置Pipeline。您也可以使用自建Logstash,需要安装JDK(1.8及以上版本)以及相应版本的Logstash,然后在Logstash的conf下配置yml文件,并启动服务,详情请参见Logstash部署
  4. 在目标端使用GET /_cat/indices?v,查看索引是否迁移成功。

本案例以使用阿里云Logstash,将Elasticsearch(简称ES)索引从腾讯云ES迁移至阿里云ES中为例,具体实施步骤如下。

配置Logstash pipeline

以下为您介绍使用阿里云Logstash,通过Kibana方式配置pipeline的方法。

在配置pipeline前,您需要首先完成迁移方案选取,以及解决方案概述中的前两步。

说明 您也可以使用自建Logstash,需要安装JDK(1.8及以上版本)以及相应版本的Logstash,然后在Logstash的conf下配置yml文件,并启动服务,详情请参见Logstash部署
  1. 登录ES实例的Kibana控制台
  2. 单击左侧导航栏的Management
  3. Management页面,单击Logstash下的Pipelines
  4. Pipelines页面中,单击Create pipeline创建管道步骤
  5. Create pipeline页面,输入Pipeline IDDescription,并根据需求配置其他参数。
    本文的Pipeline参数配置如下,其他参数说明请参见通过Kibana配置Pipeline
    input {
         elasticsearch {
           hosts => "http://xxxxxxxxx:9200"
           user  => "elastic"
           index => "*"
           password => "xxxxxx"
           docinfo => true
         }
       }
    output {
          elasticsearch {
            hosts => "http://xxxxxxx.elasticsearch.aliyuncs.com:9200"
            user => "elastic"
            password => "xxxxxx"
            index => "%{[@metadata][_index]}"
            document_type => "%{[@metadata][_type]}"
            document_id => "%{[@metadata][_id]}"
      }
    }
    参数 说明
    hosts ES服务的访问地址。input中为http://<腾讯云代理服务的公网地址>:<端口>output中为http://阿里云ES实例ID.elasticsearch.aliyuncs.com:9200
    user 访问ES服务的用户名。
    password 访问ES服务的密码。
    index 指定同步索引名。
    docinfo 设置为true,将会提取ES文档的元信息,例如index、type和id。

    其他参数详情请参见input插件说明

    说明
    • 以上配置将源ES集群的所有索引同步到目标集群中,您也可以设置只同步指定的索引,input配置如下。
      input {
           elasticsearch {
             hosts => "http://xxxxxxxx:9200"
             user  => "elastic"
             index => "alicloudtest"
             password => "xxxxxxx"
             query => '{ "query":{ "query_string": { "query": "*" } } }'
             docinfo => true
           }
    • Elasticsearch input插件是根据配置的query语句,从ES集群读取文档数据。适用于批量导入测试日志、重索引等操作。默认一次query抽取完数据后,worker会自动关闭。如果想要实现定时触发同步动作,可以使用cron语法,配合schedule属性的配置实现,详情请参见Logstash官网Scheduling介绍
      schedule => "* * * * *"

      以上示例会每分钟触发抽取。如果没有指定schedule参数,那么抽取仅执行一次。

关联Logstash与ES实例

  1. 进入Logstash实例管理页面
  2. 单击左侧导航栏的管道管理
  3. 管道管理页面,单击关联Elasticsearch实例右侧的修改管道管理页面
    目前Logstash的管道管理方式仅支持集中式管道管理。您需要首先在所要关联的ES实例的Kibana控制台中,创建和配置Logstash管道。
  4. 修改配置页面,选择Elasticsearch实例,并输入ES实例的用户名和密码。
    用户名为所选的ES集群的用户名(一般为elastic),密码为创建集群时设置的密码。
  5. 单击测试连通性并获取管道列表
    连通成功后,系统显示管道ID下拉框。
  6. 选择管道ID
    管道ID对应您在配置Logstash pipeline时,配置的Pipeline ID。如果您还没有管道ID,可单击前往创建链接,前往所选Elasticsearch实例的Kibana控制台创建并配置管道,详情请参见配置Logstash pipeline前往创建
    管道创建成功后,返回Logstash管道管理的修改配置页面,再次单击测试连通性并获取管道列表,获取新创建的管道ID。获取管道ID
    警告 管道配置变更需要重启Logstash进程,请在不影响业务的情况下,继续执行以下操作。
  7. 勾选重启Logstash进程注意事项,单击确认
    确认后,Logstash会进行重启。重启过程中,可在任务列表中查看重启进度。重启成功后,即可完成Logstash实例的管道配置,并启动相应的数据传输进程。

结果验证

  1. 登录ES实例的Kibana控制台
  2. 单击左侧导航栏的Dev Tools
  3. Console中输入GET /_cat/indices?v,查询索引是否迁移成功。