迁移数据需要准备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索引中。
操作流程
-
准备阿里云ES和Logstash实例,需确保两者在同一专有网络VPC(Virtual Private Cloud)下。
- 阿里云ES实例:存储索引数据。
- 阿里云Logstash实例:通过管道配置功能,迁移处理后的数据。
-
通过reindex,将阿里云ES 5.x实例中的多type索引转换为单type索引。您可以通过以下两种方式来实现:
- 合并type方式:将ES 5.x实例中的单索引多type数据,通过reindex script方式合并成一个单索引单type数据。
- 拆分type方式:将ES 5.x实例中的单索引多type数据,按照不同的type,通过reindex拆分成多个单索引单type数据的方式。
-
使用阿里云Logstash,将处理后的索引数据迁移至高版本ES 6.x实例中。
-
在Kibana中查看迁移成功的索引。
准备工作
-
准备低版本(5.5.3)和高版本(6.7.0)的阿里云ES实例,并准备待迁移的多type数据。
创建实例的具体步骤请参见创建阿里云Elasticsearch实例。
-
创建阿里云Logstash实例,要求与阿里云ES实例处于同一专有网络VPC(Virtual Private Cloud)下。
具体操作步骤请参见创建阿里云Logstash实例。
步骤一:转换索引类型
以下步骤介绍通过合并type方式,将单索引多type数据合并成一个单索引单type数据。
-
开启阿里云ES实例的自动创建索引功能。
-
在顶部菜单栏处,选择地域。
-
单击低版本的目标实例ID。
-
在左侧导航栏,单击ES集群配置。
-
单击YML文件配置右侧的修改配置。
-
在YML文件配置页面,设置自动创建索引为允许自动创建索引。
警告: 修改自动创建索引方式会触发实例重启,请确认后再进行操作。
-
勾选该操作会重启实例,请确认后操作,单击确定。
-
登录低版本阿里云ES实例的Kibana控制台。
具体步骤请参见登录Kibana控制台。
-
在左侧导航栏,单击Dev Tools(开发工具)。
-
在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.type
在new1
索引中添加type
字段,将其设置为原始_type
的值。并且new1
索引的_id
由_type-_id
组成,防止存在不同类型的文档具有相同的ID而发生冲突的情况。 -
执行
GET new1/_mapping
命令,查看合并后的Mapping结构。 -
执行以下命令,查看合并后的索引数据。
GET new1/_search { "query":{ "match_all":{ } } }
以下步骤介绍通过拆分type方式,将单索引多type数据,按照不同的type,通过reindex拆分成多个单索引单type数据。
-
在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_tweet
和twitter_user
索引。 -
执行以下命令,查看拆分后的索引数据。
GET twitter_tweet/_search { "query":{ "match_all":{ } } }
GET twitter_user/_search { "query":{ "match_all":{ } } }
步骤二:通过Logstash迁移数据
-
在顶部菜单栏处,选择地域。
-
在左侧导航栏,单击Logstash实例,再在实例列表中单击目标实例ID。
-
在左侧导航栏,单击管道管理。
-
在管道管理页面,使用配置文件管理方式配置管道。
管道配置的详细方法请参见通过配置文件管理管道,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" } }
-
保存并部署管道配置,开始迁移数据。
具体操作步骤请参见通过配置文件管理管道。
步骤三:查看数据迁移结果
-
登录高版本阿里云ES实例的Kibana控制台。
具体步骤请参见登录Kibana控制台。
-
在左侧导航栏,单击Dev Tools。
-
在Console中,执行以下命令,查看迁移成功的索引。
GET _cat/indices?v