我正在使用Elasticsearch 2.3.3并尝试制作现有索引的精确副本。 (使用捆绑Elasticsearch安装的reindex插件)ElasticSearch - 如何制作现有索引的1对1副本
问题是数据被复制,但映射和分析器等设置被忽略。
制作现有索引的精确副本(包括其所有设置)的最佳方法是什么?
我的主要目标是创建一个副本,更改副本,并且只有一切顺利,才能将副本切换到副本。 (零宕机时间备份和恢复)
我正在使用Elasticsearch 2.3.3并尝试制作现有索引的精确副本。 (使用捆绑Elasticsearch安装的reindex插件)ElasticSearch - 如何制作现有索引的1对1副本
问题是数据被复制,但映射和分析器等设置被忽略。
制作现有索引的精确副本(包括其所有设置)的最佳方法是什么?
我的主要目标是创建一个副本,更改副本,并且只有一切顺利,才能将副本切换到副本。 (零宕机时间备份和恢复)
下似乎实现正是我想要的:
使用Snapshot And Restore我能够恢复到一个不同的索引:
POST /_snapshot/index_backup/snapshot_1/_restore { "indices": "original_index", "ignore_unavailable": true, "include_global_state": false, "rename_pattern": "original_index", "rename_replacement": "replica_index" }
据我目前所知道的,它已经完成了我所需要的。 我的原始索引的一对一副本。
我也怀疑这个操作比我的目的重新索引有更好的性能。
在我看来,实现这一目标的最佳方法是利用index templates。索引模板允许您存储索引的规范,包括设置(因此分析器)和映射。然后,无论何时创建与您的模板匹配的新索引,ES都将使用模板中的设置和映射为您创建索引。
所以,首先要创建与模板图案myindex-*
称为index_template
索引模板:
PUT /_template/index_template
{
"template": "myindex-*",
"settings": {
... your settings ...
},
"mappings": {
"type1": {
"properties": {
... your mapping ...
}
}
}
}
什么接下来会发生的是,每当你想索引的任何索引其名称匹配myindex-*
一个新的文档,ES会使用这个模板(+设置和映射)来创建新的索引。
所以说你当前的索引被称为myindex-1
,你想重新索引到一个新的索引myindex-2
。你会送一个重新索引的查询像这样的
POST /_reindex
{
"source": {
"index": "myindex-1"
},
"dest": {
"index": "myindex-2"
}
}
myindex-2
还不存在,但它会在这个过程中使用的设置和index_template
映射因为名称myindex-2
的myindex-*
模式匹配来创建。
那样简单。
谢谢,我接受了你的答案。 我想,但是我发现通过使用快照和恢复实现我的主要备份索引的更好方法。 看起来,在恢复时,我可以提供一个'rename_replacement',如果我理解正确的话就会制作索引的精确副本。 我还没有尝试过,但对我来说这似乎是个好主意。 –
好吧,也许你应该描述你的解决方案,以便其他有类似需求的人也能找到自己的方式。感谢他们! – Val
是的 - 我会试试以确保它确实做到了我认为它所做的事情,如果是这样,将会在此处发布它作为附加答案。 –
实现此目的的最好方法是利用[index templates](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)。你试过了吗? – Val
我会试一试 - 谢谢。 –