备份和恢复elasticsearch - elasticdump?

Mik*_*e77 4 elasticsearch

我是elasticsearch的新手,并一直用它来存储来自网络的数据并将其传递给kibana进行分析.

但是我一直需要调整我的映射.从我收集的内容来看,我无法动态改变现有字段的映射.到目前为止,每次我必须对我的映射进行调整时,我必须删除索引,创建一个新的映射,然后再次抓取我的爬行(痛苦!).

所以我想要做的是分别从现有的爬网和映射中轻松备份数据,因此我可以在逐步调整映射时恢复数据.

我已经看过使用elasticdump,但是虽然我可以创建映射和数据的json输出,但是我可以使用elasticdump重新导入那些创建和存档的json文件的数据和/或映射吗?

感谢您的任何想法/建议!

Mik*_*e77 12

最后我使用了elasticdump,它非常容易使用和直接.

我还没有必须使用不同的映射重新创建我的elasticsearch数据库,所以没有测试完整的循环,因为我认为我需要.但我可以报告,elasticdump允许您以json格式(完整的每个条目索引条目)和映射分别导出整个数据集.您也可以单独导出分析仪,但我没有必要.

现在使用这两个文件 - 如果我需要创建一个新实例但具有不同的映射和分析器设置,我相信我可以手动调整映射文件,将映射导入新数据库然后导入数据.然后,当我使用kibana进行可视化时,我只需要获取新索引.

一些便于参考的命令:

npm install elasticdump -g
Run Code Online (Sandbox Code Playgroud)

然后是数据:

elasticdump \
    --input=http://production.es.com:9200/my_index \
    --output=/data/my_index_data.json \
    --type=data
Run Code Online (Sandbox Code Playgroud)

然后是映射:

elasticdump \
    --input=http://production.es.com:9200/my_index \
    --output=/data/my_index_mapping.json \
    --type=mapping
Run Code Online (Sandbox Code Playgroud)

当我在新环境中测试这个时,我将能够确认重新导入的实际测试,但我想我现在会更新,以防其他人也在考虑选项.

(仅供参考,您也可以从一个ES数据库导出并直接输出到另一个数据库)...


Aje*_*han 6

您可以使用快照备份Elasticsearch数据,并还原elasticsearch本身提供的api。例:

PUT /_snapshot/my_backup/snapshot_1
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false
}
Run Code Online (Sandbox Code Playgroud)

是一篇博客文章,介绍“如何进行Elasticsearch数据的备份”,如果您想观看备份和还原操作,请观看此视频教程


Eya*_*ari 2

有几种方法可以更改 Elasticsearch 中的映射,无需停机,也无需完全重建索​​引。

  • 使用新 api 的最新版本可以在这里reindex找到。这是一篇文章,其中包含有关如何使用它的简单示例。

  • 另一种方法(官方方法)是使用scrollapibulk来将索引从一个索引重新索引到较新的索引。问题是aliases为了保持相同的“索引”名称并仍然更改其映射。这里描述的是。关键概念是为每个索引创建一个别名,并使用别名来索引数据而不是真正的索引名称。一旦您需要更改映射,您就可以使用新映射创建一个新索引,一旦所有数据都重新索引到新索引,您就可以更改别名以指向新索引。

关于保存索引,我不知道在没有映射的情况下在 Elasticsearch 中保存索引的官方方法。

无论如何,如果您希望将数据移动到另一个位置的另一个集群,然后重新索引。您可能会发现这篇关于将 Elasticsearch 数据快照到 Amazon S3 或从 Amazon S3 恢复数据的文章很有帮助。

链接指向有关如何对其他文件系统进行快照/恢复的 Elasticsearch 文档。

希望我能帮上忙!