本文介绍基于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