目录
背景
第一部分
alias
配置和取消第二部分
alias
查看参考文献及资料
背景
在实际生产环境中,需要对线上Elasticsearch
集群进行置换。业务上需要集群对外服务不中断的前提上,将原集群的数据迁移至新集群。目前迁移有多种方案,主要有: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实现索引层面迁移,或者跨集群的索引迁移 |
- scroll query + bulk: 批量读取旧集群的数据然后再批量写入新集群,elasticsearch-dump、logstash、reindex都是采用这种方式
- snapshot: 直接把旧集群的底层的文件进行备份,在新的集群中恢复出来,相比较scroll query + bulk的方式,snapshot的方式迁移速度最快。
https://cloud.tencent.com/developer/article/1611786
第一部分 Reindex接口介绍
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迁移方案
下面简单介绍 reindex 接口的使用方法:
1) 配置 elasticsearch.yml中的reindex.remote.whitelist 参数
需要在目标 ES 集群中配置该参数,指明能够 reindex 的远程集群的白名单。
2) 调用 reindex api
以下操作表示从源 ES 集群中查询名为 test1 的索引,查询条件为 title 字段为 elasticsearch,将结果写入当前集群的 test2 索引。
1 | POST _reindex |
从源索引中提取文档源,并将文档索引到目标索引中。可以将所有文档复制到目标索引,或为文档的子集重新索引。_reindex获取源索引的快照,但是其目标必须是其他索引,因此不会发生版本冲突。
第四部分 参数调优
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
https://www.cnblogs.com/Ace-suiyuan008/p/9985249.html
https://elkguide.elasticsearch.cn/elasticsearch/api/reindex.html
参考文献及资料
1、Reindex from a remote cluster,链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/reindex-upgrade-remote.html