reindex 是 ES 提供的一个 api 接口,可以把数据从源 ES 集群导入到当前 ES 集群,实现集群内部或跨集群同步数据。
但仅限于腾讯云 ES 的实现方式(跨集群迁移需要elasticsearch.yml中加上ip白名单,并重启集群),所以腾讯云ES不支持 reindex 操作。具体见官方文档说明:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/reindex-upgrade-remote.html
下面简单介绍 reindex 接口的使用方法:
1) 配置 elasticsearch.yml中的reindex.remote.whitelist 参数
需要在目标 ES 集群中配置该参数,指明能够 reindex 的远程集群的白名单。
2) 调用 reindex api
以下操作表示从源 ES 集群中查询名为 test1 的索引,查询条件为 title 字段为 elasticsearch,将结果写入当前集群的 test2 索引。
POST _reindex
{
"source": {
"remote": {
"host": "http://172.16.0.39:9200"
},
"index": "test1",
"query": {
"match": {
"title": "elasticsearch"
}
}
},
"dest": {
"index": "test2"
}
}
从源索引中提取文档源,并将文档索引到目标索引中。可以将所有文档复制到目标索引,或为文档的子集重新索引。_reindex获取源索引的快照,但是其目标必须是其他索引,因此不会发生版本冲突。
以上介绍了elasticsearch-dump、logstash、reindex、snapshot方式进行数据迁移,实际上这几种工具大体上可以分为两类:
elasticsearch-dump | logstash | snapshot | reindex | |
---|---|---|---|---|
基本原理 | 逻辑备份,类似mysqldump将数据一条一条导出后再执行导入 | 从一个 ES 集群中读取数据然后写入到另一个 ES 集群 | 从源 ES 集群通过备份api创建数据快照,然后在目标 ES 集群中进行恢复 | reindex是Elasticsearch提供的一个api接口,可以把数据从一个集群迁移到另外一个集群 |
网络要求 | 网络需要互通 | 网络需要互通 | 无网络互通要求 | 网络需要互通 |
迁移速度 | 慢 | 一般 | 快 | 一般 |
运维配置复杂度 | 复杂,索引的分片数量和副本数量需要对每个索引单独进行迁移,或者直接在目标集群提前将索引创建完成,再迁移数据 | 复杂,需要提前在目标集群创建mapping和setting等,再迁移数据 | 简单 | 需要在目标ES集群中配置reindex.remote.whitelist参数,指明能够reindex的远程集群的白名单 |
适合场景 | 适用于数据量小的场景 | 适用于数据量一般,近实时数据传输 | 适用于数据量大,接受离线数据迁移的场景 | 本地索引更新Mapping实现索引层面迁移,或者跨集群的索引迁移 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。