本文介绍通过阿里云Logstash,将索引数据从腾讯云Elasticsearch迁移至阿里云Elasticsearch中。

操作流程

  1. 准备工作
    创建阿里云Elasticsearch实例、Logstash实例和腾讯云Elasticsearch实例、开启阿里云Elasticsearch实例的自动创建索引功能、搭建腾讯云代理服务器。
  2. 步骤一:选取迁移方案
    选择兼容的腾讯云Elasticsearch实例、阿里云Elasticsearch实例和Logstash实例进行迁移。
  3. 步骤二:创建并配置Logstash管道
    通过配置文件管理方式创建并配置Logstash管道,配置时设置input为腾讯云Elasticsearch,output为阿里云Elasticsearch。
    说明 您也可以使用自建Logstash,需要在服务器上安装JDK(1.8及以上版本)以及相应版本的Logstash,然后在Logstash的conf下配置YML文件,并启动服务。
  4. 步骤三:验证结果
    在Kibana中使用GET /_cat/indices?v,查看索引是否迁移成功。

准备工作

  1. 创建阿里云Elasticsearch实例,并开启自动创建索引功能。
  2. 创建阿里云Logstash实例。
    具体操作步骤请参见创建阿里云Logstash实例
    由于阿里云Logstash实例部署在专有网络VPC(Virtual Private Cloud)下,但在迁移过程中,Logstash需要连接公网才能与腾讯云Elasticsearch互通,因此需要通过配置NAT网关实现与公网连通,详情请参见配置NAT公网数据传输
    说明 对于自建的Logstash,需要购买与阿里云Elasticsearch在同一VPC下的ECS实例(已符合条件的ECS不需要重复购买,需要绑定弹性公网IP)。您也可以购买经典网络的ECS实例(不建议),但需要配置Classiclink,实现通过经典网络访问专有网络中的阿里云Elasticsearch,详情请参见通过经典网络访问ES常见问题
  3. 创建腾讯云Elasticsearch实例,并搭建腾讯云代理服务器。
    由于腾讯云Elasticsearch不支持通过公网直接访问,因此需要准备cvm服务器搭建nginx代理,详情请参见通过外网访问腾讯云Elasticsearch集群

步骤一:选取迁移方案

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

  • 腾讯云Elasticsearch 5.6.4 -> ECS(Logstash 5.6.x)-> 阿里云Elasticsearch 5.5.6
  • 腾讯云Elasticsearch 6.4.3 -> ECS(Logstash 6.7.0)-> 阿里云Elasticsearch 6.7.0
  • 腾讯云Elasticsearch 6.4.3 -> 阿里云Logstash 6.7.0 -> 阿里云Elasticsearch 6.7.0(本文以此为例)
注意 建议您在大版本内进行数据迁移。关于Logstash版本选取详情,请参见Support Matrix

步骤二:创建并配置Logstash管道

  1. 登录阿里云Elasticsearch控制台
  2. 在顶部菜单栏处,选择资源组和地域。
  3. 在左侧导航栏,单击Logstash实例,再在实例列表中单击目标实例ID。
  4. 在左侧导航栏,单击管道管理
  5. 管道列表区域,单击创建管道
    创建管道
  6. 创建管道任务页面,输入管道ID并配置管道。
    本文使用的管道配置如下。
    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 Elasticsearch服务的访问地址。input中为http://<腾讯云代理服务的公网地址>:<端口>output中为http://<阿里云Elasticsearch实例ID>.elasticsearch.aliyuncs.com:9200
    user 访问Elasticsearch服务的用户名,默认为elastic。
    password 对应用户的密码。对于阿里云Elasticsearch,elastic用户的密码在创建实例时设定,如果忘记可进行重置,重置密码的注意事项和操作步骤请参见重置实例访问密码
    index input中为待迁移的索引名,设置为*表示同步全部索引;output中为迁移后的索引名,设置为%{[@metadata][_index]}表示匹配元数据中的index,即迁移后的索引名与源索引名相同。
    document_type 迁移后索引的类型。设置为%{[@metadata][_type]}表示匹配元数据中的type,即迁移后索引的类型与源索引的类型相同。
    document_id 迁移后文档的ID。设置为%{[@metadata][_id]}表示匹配元数据中的id,即迁移后文档的ID与源文档的ID相同。
    docinfo 设置为true,Logstash将会提取Elasticsearch文档的元信息,例如index、type和id。

    更多Config配置详情请参见Logstash配置文件说明

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

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

  7. 单击下一步,配置管道参数。
    管道参数配置
    表 1. 管道配置参数说明
    参数 说明
    管道工作线程 并行执行管道的Filter和Output的工作线程数量。当事件出现积压或CPU未饱和时,请考虑增大线程数,更好地使用CPU处理能力。默认值:实例的CPU核数。
    管道批大小 单个工作线程在尝试执行Filter和Output前,可以从Input收集的最大事件数目。较大的管道批大小可能会带来较大的内存开销。您可以设置LS_HEAP_SIZE变量,来增大JVM堆大小,从而有效使用该值。默认值:125。
    管道批延迟 创建管道事件批时,将过小的批分派给管道工作线程之前,要等候每个事件的时长,单位为毫秒。默认值:50ms。
    队列类型 用于事件缓冲的内部排队模型。可选值:
    • MEMORY:默认值。基于内存的传统队列。
    • PERSISTED:基于磁盘的ACKed队列(持久队列)。
    队列最大字节数 请确保该值小于您的磁盘总容量。默认值:1024MB。
    队列检查点写入数 启用持久性队列时,在强制执行检查点之前已写入事件的最大数目。设置为0,表示无限制。默认值:1024。
    警告 配置完成后,需要保存并部署才能生效。保存并部署操作会触发实例重启,请在不影响业务的前提下,继续执行以下步骤。
  8. 单击保存或者保存并部署
    • 保存:将管道信息保存在Logstash里并触发实例变更,配置不会生效。保存后,系统会返回管道管理页面。可在管道列表区域,单击操作列下的立即部署,触发实例重启,使配置生效。
    • 保存并部署:保存并且部署后,会触发实例重启,使配置生效。

步骤三:验证结果

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台。
    具体步骤请参见登录Kibana控制台
  2. 在左侧导航栏,单击Dev Tools(开发工具)。
  3. Console中执行GET /_cat/indices?v命令,查询索引是否迁移成功。