在看ILM时发现很多policy 对HOT数据都有rollover操作,不太明白这个rollover是什么神操作。终于找到一篇相关介绍,防止原博客被删,自己copy过来。
https://www.shuzhiduo.com/A/rV57W9ea5P/
索引名
一般而言,客户端将数据每天写入一个索引,比如直接写入YYYY-MM-HH格式的索引,那么我们只需要在写入的客户端里面获取时间,然后得到相应的格式即可,例如logstash写入ES时索引名就是logstash-YYYY-MM-HH,但是实际使用中,我们总会遇到这种格式的索引名不太适用的情况(比如每天数据量很少,但是又需要保存很久的数据,或者每天数据量极大,每天一个索引已经不能容纳了),这个时候我们就需要考虑一个机制,将索引rollover,让我们能够按照具体情况调节写的索引。
索引别名-alias
ES提供了为索引创建别名的接口,例如:POST _aliases{"actions" : [{"add" : {"index" : "test_index","alias" : "test_alias","is_write_index" : true}}]}这里就创建了一个alias指向test_index,在使用时,用test_alias替代操作即可对test_index进行操作。
手动Rollover
结合alias,我们可以实现客户端写alias,在需要时将alias指向一个新的索引,就可以自由地控制数据的写入了。步骤如下:1. 先create一个新的索引PUT test_index22. 再将alias指向新的索引并移除旧的aliasPOST _aliases{"actions" : [{"remove" : {"index" : "test_index","alias" : "test_alias",}},{"add" : {"index" : "test_index2","alias" : "test_alias","is_write_index" : true}}]}
自动Rollover
在上文中,我们手动Rollover了一个索引,在运行过程中,我们需要不断的获取ES中索引的情况,然后判断是否进行Rollover。这里,我们可以用ES自带的Rollover接口替代,假设已经存在一个test_index, 和一个test_alias指向test_index。1.先执行一次rollover验证一下POST test_alias/_rollover/test_index2{"conditions": {"max_age": "7d","max_docs": 1}}Response:{"old_index": "test_index","new_index": "test_index2","rolled_over": false,"dry_run": false,"acknowledged": false,"shards_acknowledged": false,"conditions": {"[max_docs: 1]": false,"[max_age: 7d]": false}}这个返回表明test_index没有触发我们传入的条件max_age存在7天或者max_docs文档数量达到12.写入一个docPUT test_alias/test/1{"field1":"value"}3.再次执行rolloverPOST test_alias/_rollover/test_index2{"conditions": {"max_age": "7d","max_docs": 1}}Response:{"old_index": "test_indexbb","new_index": "test_indexcc","rolled_over": true,"dry_run": false,"acknowledged": true,"shards_acknowledged": true,"conditions": {"[max_docs: 1]": true,"[max_age: 7d]": false}}触发了max_docs达到1的条件rollover成功,创建了新的索引并将test_alias指向了新的索引
本文探讨了在Elasticsearch中如何通过rollover机制管理海量数据,包括手动和自动索引轮换,以及利用别名实现灵活的数据写入和持久化。重点介绍了创建别名、设置条件触发滚动索引的过程。
1034

被折叠的 条评论
为什么被折叠?



