如何通过reindex将Elasticsearch低版本数据迁移至高版本

迁移数据需要准备Elasticsearch和Logstash集群,具体原理可参见下文的操作流程。本文使用阿里云Elasticsearch和Logstash,无需手动部署,一键即可创建集群,即买即用。提供白屏化的操作界面,简单易用上手快,后期有专业人员维护,能够省去较大的时间和人力成本,现在还可免费试用。单击此处免费试用阿里云Elasticsearch,单击此处免费试用阿里云Logstash。
在这里插入图片描述
阿里云Elasticsearch兼容开源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商业功能,致力于数据分析、数据搜索等场景服务。支持5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等多个版本,并提供了商业插件X-Pack服务。在开源Elasticsearch的基础上提供企业级权限管控、安全监控告警、自动报表生成等功能。
阿里云Logstash(简称Logstash)作为服务器端的数据处理管道,提供了100%兼容开源Logstash的能力。Logstash能够动态地从多个来源采集数据、转换数据,并且将数据存储到所选择的位置。通过输入、过滤和输出插件,Logstash可以对任何类型的事件加工和转换。阿里云Logstash除了支持所有官方预置插件外,还致力于打造包含logstash-input-sls、logstash-input-oss、logstash-output-oss等适用各类场景的插件中心,为您提供更为强大的数据处理和搬迁能力,实现云上数据生态打通。
在**阿里云ELK(Elasicsearch、Logstash、Kibana)**生态下,Elasticsearch作为实时分布式搜索和分析引擎,Kibana为Elasticsearch提供了强大的可视化界面,Logstash提供了数据采集、转换、优化和输出的能力,可以被广泛应用于实时日志处理、全文搜索和数据分析等领域。

本文介绍基于reindex将Elasticsearch(简称ES)5.x实例中的多type数据,迁移到高版本ES 6.x实例的单type索引中。

操作流程

  1. 准备工作

    准备阿里云ES和Logstash实例,需确保两者在同一专有网络VPC(Virtual Private Cloud)下。

    • 阿里云ES实例:存储索引数据。
    • 阿里云Logstash实例:通过管道配置功能,迁移处理后的数据。
  2. 步骤一:转换索引类型

    通过reindex,将阿里云ES 5.x实例中的多type索引转换为单type索引。您可以通过以下两种方式来实现:

    • 合并type方式:将ES 5.x实例中的单索引多type数据,通过reindex script方式合并成一个单索引单type数据。
    • 拆分type方式:将ES 5.x实例中的单索引多type数据,按照不同的type,通过reindex拆分成多个单索引单type数据的方式。
  3. 步骤二:通过Logstash迁移数据

    使用阿里云Logstash,将处理后的索引数据迁移至高版本ES 6.x实例中。

  4. 步骤三:查看数据迁移结果

    在Kibana中查看迁移成功的索引。

准备工作

  1. 准备低版本(5.5.3)和高版本(6.7.0)的阿里云ES实例,并准备待迁移的多type数据。

    创建实例的具体步骤请参见创建阿里云Elasticsearch实例

  2. 创建阿里云Logstash实例,要求与阿里云ES实例处于同一专有网络VPC(Virtual Private Cloud)下。

    具体操作步骤请参见创建阿里云Logstash实例

步骤一:转换索引类型

以下步骤介绍通过合并type方式,将单索引多type数据合并成一个单索引单type数据。

  1. 开启阿里云ES实例的自动创建索引功能。

    1. 登录阿里云Elasticsearch控制台

    2. 在顶部菜单栏处,选择地域。

    3. 单击低版本的目标实例ID。

    4. 在左侧导航栏,单击ES集群配置

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

    6. YML文件配置页面,设置自动创建索引允许自动创建索引

      在这里插入图片描述

      警告: 修改自动创建索引方式会触发实例重启,请确认后再进行操作。

    7. 勾选该操作会重启实例,请确认后操作,单击确定

  2. 登录低版本阿里云ES实例的Kibana控制台。

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

  3. 在左侧导航栏,单击Dev Tools(开发工具)。

  4. Console中,执行以下命令,将单索引多type数据合并成单索引单type数据。

    POST _reindex
    {
      "source": {
        "index": "twitter"
      },
      "dest": {
        "index": "new1"
      },
      "script": {
        "inline": """
        ctx._id = ctx._type + "-" + ctx._id;
        ctx._source.type = ctx._type;
        ctx._type = "doc";
        """,
        "lang": "painless"
      }
    }
    

    以上示例通过自定义type的方式,指定ctx._source.typenew1索引中添加type字段,将其设置为原始_type的值。并且new1索引的_id_type-_id组成,防止存在不同类型的文档具有相同的ID而发生冲突的情况。

  5. 执行GET new1/_mapping命令,查看合并后的Mapping结构。

  6. 执行以下命令,查看合并后的索引数据。

    GET new1/_search
    {
       "query":{
         "match_all":{
          }
      }
    }
    

以下步骤介绍通过拆分type方式,将单索引多type数据,按照不同的type,通过reindex拆分成多个单索引单type数据。

  1. Console中,执行以下命令,将单索引多type拆分单索引单type。

    POST _reindex
    {
      "source": {
        "index": "twitter",
        "type": "tweet",
        "size": 10000
      },
      "dest": {
        "index": "twitter_tweet"
      }
    }
    POST _reindex
    {
      "source": {
        "index": "twitter",
        "type": "user",
        "size": 10000
      },
      "dest": {
        "index": "twitter_user"
      }
    }
    

    以上示例将twitter索引按照不同type分别拆分成twitter_tweettwitter_user索引。

  2. 执行以下命令,查看拆分后的索引数据。

    GET twitter_tweet/_search
    {
       "query":{
         "match_all":{
    
          }
      }
    }
    
    GET twitter_user/_search
    {
       "query":{
         "match_all":{
    
          }
      }
    }
    

步骤二:通过Logstash迁移数据

  1. 登录阿里云Elasticsearch控制台

  2. 在顶部菜单栏处,选择地域。

  3. 在左侧导航栏,单击Logstash实例,再在实例列表中单击目标实例ID。

  4. 在左侧导航栏,单击管道管理

  5. 管道管理页面,使用配置文件管理方式配置管道。

    管道配置的详细方法请参见通过配置文件管理管道,Config配置示例如下。

    input {
        elasticsearch {
        hosts => ["http://es-cn-0pp1f1y5g000h****.elasticsearch.aliyuncs.com:9200"]
        user => "elastic"
        index => "*"
        password => "your_password"
        docinfo => true
      }
    }
    filter {
    }
    output {
      elasticsearch {
        hosts => ["http://es-cn-mp91cbxsm000c****.elasticsearch.aliyuncs.com:9200"]
        user => "elastic"
        password => "your_password"
        index => "test"
      }
    }
    
  6. 保存并部署管道配置,开始迁移数据。

    具体操作步骤请参见通过配置文件管理管道

步骤三:查看数据迁移结果

  1. 登录高版本阿里云ES实例的Kibana控制台。

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

  2. 在左侧导航栏,单击Dev Tools

  3. Console中,执行以下命令,查看迁移成功的索引。

    GET _cat/indices?v
    

猜你喜欢

转载自blog.csdn.net/qq_46396563/article/details/106956773