更新活跃使用的索引的配置,而不会丢失数据

时间:2019-10-18 08:18:43

标签: elasticsearch

有时候,我需要更新映射,设置或将默认管道绑定到活跃使用的索引。

暂时,我正在使用 数据丢失的方法,如下所示:

  1. 使用适当的映射(或通过index.default_pipeline绑定默认管道)更新索引模板;
  2. 创建a_new_index(与template index_patterns匹配);
  3. reindexindex_to_fixa_new_index迁移已建立索引的数据;
  4. 使用alias将即将到来的索引请求重定向到a_new_index(别名将与index_to_fix相同,以确保索引不受干扰)并删除index_to_fix ;

但是在第3步和第4步之间有一个时间间隔,在此间隔期间,新索引的数据会丢失在原始index_to_fix中。


有没有一种方法可以更新正在使用的索引的配置,而不会丢失任何数据?

1 个答案:

答案 0 :(得分:0)

经过一些讨论,感谢@LeBigCat的帮助。我认为这个问题可以通过三个步骤来解决。

将别名用于CRUD

首先,不要直接使用索引,请尽可能使用别名;由于您不能使用与现有索引同名的别名,因此即使索引已损坏(设计不良),也无法直接替换该索引。最简单的方法是使用模板并将索引名称直接包含在别名中。

<style>
 .fb_dialog { 
     left: 18pt;
 };

  iframe.fb_customer_chat_bounce_in_v2{
     left:36pt!important;
  }

  iframe.fb_customer_chat_bounce_out_v2{
     left:36pt!important;
  }
</style>

重定向索引

由于PUT _template/test { ... "aliases" : { "{index}-alias" : {} } } 被积极使用,因此在更新模板并创建新索引index_to_fix之后,我们可以使用别名将索引重定向到{{1} }。

a_new_fix

迁移数据

只需使用a_new_fix将所有数据从POST /_aliases { "actions" : [ { "add": { "index": "a_new_index", "alias": "index_to_fix-alias" } }, { "remove": { "index": "index_to_fix", "alias": "index_to_fix-alias" } } ] } 迁移到_reindex

index_to_fix