《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(4) https://developer.aliyun.com/article/1230206
基于 write index 滚动
基于write index滚动主要是为了解决,使用别名查询能够获取到之前创建的索引数据,以及同一别名绑定多个索引滚动切换歧义问题。同一个别名具有查询和写入两种特性。
示例如下:
#创建一个索引,绑定别名 logs,并标注 is_write_index 为 true,即通过别名写入数据,实际是写入到 my_logs_index-000001 表中 PUT my_logs_index-000001 { "aliases": { "logs": { "is_write_index": true } } } #写入一个文档 PUT logs/_doc/1 { "message": "a dummy log" } #刷新,生成一个 segements,使文档变得可搜索 POST logs/_refresh #执行滚动操作 POST /logs/_rollover #备注1 { "aliases": {"search_all": {}}, #备注2 "conditions": { "max_docs": "1" } } #再次基于别名写入 PUT logs/_doc/2 { "message": "a newer log" }
执行滚动操作write index切换成为新创建的索引,之后写入的数据将写入到新索引中,滚动时新产生的索引添加别名 search_all
上述代码块执行_rollover的返回值如下:
{ "_index" : "my_logs_index-000002", "_type" : "_doc", "_id" : "2", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
在完成滚动之后,GET _alias/logs,查看别名元信息,可以发现新索引已经作为write index。
{ "my_logs_index-000002": { "aliases": { "logs": { "is_write_index": true } } }, "my_logs_index-000001": { "aliases": { "logs": { "is_write_index" : false } } } }
基于 ILM 实现自动 Rollover
首先在 Kibana ,定义生命周期策略(也可通过 API 方式);
下图规定了 Hot 阶段重新生成索引的规则,这部分功能其实就是对于rollover API的封装;下图中我们定义了一个名称为rollover-test-all的生命周期管理策略,其中滚动条件为max_size,为 20gb,max_age为 1 天,max_docs为 2;
我们可以通过 API,查看GET _ilm/policy/rollover-test-all。返回值如下:
{ "rollover-test-all" : { "version" : 1, "modified_date" : "2021-05-11T15:23:27.155Z", "policy" : { "phases" : { "hot" : { "min_age" : "0ms", "actions" : { "rollover" : { "max_size" : "20gb", "max_age" : "1d", "max_docs" : 2 }, "set_priority" : { "priority" : 100 } } } } } } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(6) https://developer.aliyun.com/article/1230204