Elasticsearch 数据迁移主要取决于数据量大小和集群版本跨度。
常见的方法包括:快照备份(海量数据首选)、Reindex API(同集群或跨小版本迁移)以及 Logstash/Elasticsearch-dump(轻量级或跨大版本同步)。
一、跨大版本 / 轻量级迁移
elasticsearch-dump
适用场景:数据量较小(GB级以内),或需灵活筛选特定数据。
优缺点:操作简单,支持跨大版本迁移(如5.x迁移至7.x/8.x);但速度较慢,容易中断。
操作命令(通过 npm 安装执行):
<span style="font-size: 18px;"># 1. 全局安装 elasticdump 工具<br/>npm install elasticdump -g<br/><br/># 2. 迁移 Index 的 Settings<br/>elasticdump --input=http://源IP:9200/源索引名 --output=http://目标IP:9200/目标索引名 --type=settings<br/><br/># 3. 迁移 Index 的 Mapping<br/>elasticdump --input=http://源IP:9200/源索引名 --output=http://目标IP:9200/目标索引名 --type=mapping<br/><br/># 4. 迁移 Data 数据<br/>elasticdump --input=http://源IP:9200/源索引名 --output=http://目标IP:9200/目标索引名 --type=data<br/></span>
二、同版本 / 跨小版本
Reindex API
适用场景:同一集群内迁移数据,或小版本之间迁移(如 6.x 到 7.x),不支持跨大版本(如 5.x 到 8.x)。
优缺点:无需停机,数据同步速度快,能自动处理 mapping 转换,支持指定查询条件迁移。
操作步骤:
①、配置白名单:在目标集群的 elasticsearch.yml 中添加 reindex.remote.whitelist: ["源集群IP:9200"]。
②、执行迁移命令(在 Kibana 中运行):
<span style="font-size: 18px;">POST _reindex<br/>{<br/> "source": {<br/> "remote": {<br/> "host": "http://源集群IP:9200",<br/> "username": "源集群用户名",<br/> "password": "源集群密码"<br/> },<br/> "index": "源索引名",<br/> "query": {<br/> "match_all": {}<br/> }<br/> },<br/> "dest": {<br/> "index": "目标索引名"<br/> }<br/>}<br/></span>三、海量数据首选:快照与恢复
Snapshot & Restore
适用场景:PB / TB 级别海量数据迁移。
优缺点:性能损耗极低,支持全量备份与按需恢复;要求两端集群版本必须兼容(低版本可以恢复至高版本,跨大版本需通过中间版本)。
操作步骤:
①、注册快照仓库:源集群和目标集群都需注册仓库。如使用本地共享文件,需修改 path.repo 配置;云端通常使用对象存储(如阿里云OSS、AWS S3),需安装对应的 Repository 插件(如 elasticsearch-repository-oss)。
<span style="font-size: 18px;">PUT _snapshot/my_backup<br/>{<br/> "type": "fs",<br/> "settings": {<br/> "location": "/mount/backups/my_backup"<br/> }<br/>}<br/></span>②、创建快照(源集群操作)
<span style="font-size: 18px;">PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true<br/></span>
③、恢复快照(目标集群操作)
<span style="font-size: 18px;">POST _snapshot/my_backup/snapshot_1/_restore<br/></span>
四、复杂 ETL / 增量同步
Logstash
适用场景:实时同步增量数据、需要清洗/过滤或异构数据源迁移。
优缺点:支持实时、并发同步,高度可配置;需要搭建并配置 Logstash 运行环境。
操作指令(配置文件示例 es_to_es.conf):
<span style="font-size: 18px;">input {<br/> elasticsearch {<br/> hosts => ["源集群IP:9200"]<br/> index => "源索引名"<br/> query => '{ "query": { "match_all": {} } }'<br/> }<br/>}<br/>output {<br/> elasticsearch {<br/> hosts => ["目标集群IP:9200"]<br/> index => "目标索引名"<br/> }<br/>}</span>
elasticesearch 第8章 数据迁移


