乐闻世界logo
搜索文章和话题

How to move elasticsearch data from one server to another

3 个月前提问
3 个月前修改
浏览次数6

1个答案

1

当需要将Elasticsearch的数据从一个服务器迁移到另一个服务器时,我们可采用多种方法。下面介绍几种常用的方法:

1. 快照和恢复(Snapshot and Restore)

这是Elasticsearch官方推荐的迁移数据的方法。步骤如下:

步骤 1: 创建快照仓库

首先,在源服务器上配置一个快照仓库。这可以是文件系统仓库,也可以是支持的云存储服务。

json
PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup", "compress": true } }

步骤 2: 创建快照

然后,在源服务器上创建一个包含所有需要迁移数据的索引的快照。

json
PUT /_snapshot/my_backup/snapshot_1 { "indices": "index_1,index_2", "ignore_unavailable": true, "include_global_state": false }

步骤 3: 在目标服务器上配置相同的快照仓库

确保目标服务器可以访问快照存储位置,并配置相同的仓库。

步骤 4: 从快照恢复数据

最后,在目标服务器上恢复快照。

json
POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "index_1,index_2", "include_global_state": false }

2. 使用Elasticsearch-dump工具

Elasticsearch-dump是一个非官方的工具,可以用来导出和导入数据。它可以处理大数据量的迁移。

步骤 1: 安装工具

bash
npm install elasticdump -g

步骤 2: 导出数据

bash
elasticdump --input=http://source-server:9200/my_index --output=my_index_mapping.json --type=mapping elasticdump --input=http://source-server:9200/my_index --output=my_index_data.json --type=data

步骤 3: 导入数据

bash
elasticdump --input=my_index_mapping.json --output=http://destination-server:9200/my_index --type=mapping elasticdump --input=my_index_data.json --output=http://destination-server:9200/my_index --type=data

3. 索引重新索引(Reindex from Remote)

如果两个ES集群可以相互访问,可以使用重新索引从远程功能直接从一个集群到另一个集群迁移数据。

步骤 1: 在目标集群上设置远程集群

首先,需要在目标Elasticsearch集群上配置reindex.remote.whitelist,以允许从源集群读取。

步骤 2: 使用_reindex迁移数据

json
POST /_reindex { "source": { "remote": { "host": "http://source-server:9200", "username": "user", "password": "pass" }, "index": "source_index" }, "dest": { "index": "destination_index" } }

采用上述任何一种方法时,都要确保数据的一致性和完整性,同时注意安全性,特别是数据在传输过程中的加密和访问控制。每种方法都有其适用场景,选择合适的方法取决于具体的业务需求和环境配置。

2024年8月14日 21:49 回复

你的答案