你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
发现
分享
文章
活动
下载
登录
The requested URL was not found on this server. 不管你信不信,反正我是没找到
如何深入理解ES ILM
Elasticsearch
| 作者
Charele
| 发布于2022年05月16日 | 阅读数:
418
分享到:
QQ空间
新浪微博
微信
QQ好友
印象笔记
有道云笔记
ILM,索引生命周期管理,
这个包里面其实有两个功能,ILM,SLM
这里只谈ILM, 不涉及SLM。
一个管理索引,一个管理(索引的)快照。
你也许会说:“你说的这些垃圾,对我跟本没用,因为我跟本用不着”
那告辞!道不同,不相为谋。
废话不多话,先上一个策略的定义,下面就是围绕这个来讲的:
没有找到相关结果
已邀请:
与内容相关的链接
提交
6 个回复
Charele
赞同来自:
1
https://elasticsearch.cn/question/12617
这个贴子里提到,一个ilm策略,就是
phase ---> action ---> step 这么一个3层架构,
(策略里包括phase, phase里面包含action, action里面包含step)
其中,phase和action就是你在定义一个策略里定义的那些(不完全相等,下面会提及)
而ILM的执行单元,step,不是用户自己定义的,是由ES自已产生的。
最终,这个策略会“扁平化”,会形成一个step列表,
ilm的执行,就是围绕这个列表来执行的,
从表头到表尾,一个一个执行,,,
那这么列表究竟长啥样呢?拿上面那个策略来讲:
里面的标识,意义各有不同,下面我会一一分析,
Charele
赞同来自:
2
说起step,首先得了解step的分类,
这个问题非常重要!!!
只有先知道了这些,才能理解ILM的执行流程,才不致于迷失方向
从上面的图中,我标识出了具体step属于哪类,(PhaseCompleteStep除外)
总体来说,可以分成4大类(和3个特别的)
1> 绿色的,异步动作
就是通常的执行,没啥特别的
2> 红色的,异步等待,
它会等待某些条件,成功了则下一步,否则会一直等
3> 紫色的,CS动作
它会改变CS,从一个CS变化到另外一个CS(ClusterState是什么,就不多啰嗦了)
4> 黄色的,CS等待
它会等待CS符合某些条件,而做出不同的选择,和2类似
5> 其他类型的,黑框框里面的
Charele
赞同来自:
3
重新贴下这个图,稍微讨论一下。
这是重点,但不是难点。
1> 这里面分了3个phase(红框里面)
phase0,是第1个phase(叫啥无所谓,只序号上区分的)
这个phase,是ES手工加上去的。不管什么策略,ES都会加这个
这步的作用是设置索引的一些参数
2> phase1和phase2就是你在定义一个策略时,定义的两个
用红线划出来的3个,就是实际起作用的,你要做的事情。
比如DeleteStep,就是真正删除索引,
其中phase1里面,有两个action,为什么有两个呢?
明明在hot里面只定义了一个rollover动作,
这是ES自己加上去的
(就是紫框框里面的那些,啥时加的,为什么要加,后面谈)
3> 每个phase最后,肯定会有一个"PhaseComleStep",(绿框框里面)
标记这个phase结束,要么进入下一个phase,
要么没有下一个phase了,就全部完成了
4> 一共20个step,整个ilm执行,就是取1,执行1,
取2,执行2,,,,一直到执行完最后一个
(只是形式上可以这么理解,实际情况可能有点复杂)
另外:黑框框里面的,有点特殊,后面会谈到
Charele
赞同来自:
4
为了对上面我说的,有个直观的认识,我挑一段代码来说明一下下
如果当前step是PhaseCompleteStep,说明一个phase结束了。
如果没有下一步了,就说明所有的结束了,就返回了。绿框里的。
如果有一下步(比如上面的第2个step或者第16个step),
要进行一下判断(黄框里的),
为真就进入下一步(也是下一个phase)
这里的判断是什么呢? 就是那个你在定义策略时定义"min_age"时间
(注意:红框里的,这里传入的是“下一个步的phase的”名字!因为当前是本phase的最后一步,
所以这里也就是下一个phase的名字)
Charele
赞同来自:
5
网上文章,好像有人对"min_age"这个参数好像有一些困惑,什么它究竟是增量还是啥量,有人还各种测试。
其实这很简单:
接上楼,isReadyToTransitionToThisPhase()这个方法,
其实就是判断一下,
红色的,就是索引的创建时间,
(要说明了下,如果你是执行了rollover, 001 -> 002,
这里指的还是索引001,这不应该有疑问)
绿色的,就是你定义的这个phase的"min_age"
结论:如果你想进入这个phase,就取出这个phase的min_age,这样比较一下
(索引的创建时间是不变的),跟其他phase的min_age设置没有任何关系。
就是这么简单。
接上楼的话题,如果是true了,就进入这个phase,
如果就不是,不进入下一步,返回:就是等待,
Charele
赞同来自:
6
有了上面的一些铺垫,就可以进入正题了:如何一步一步执行ILM的流程。
虽然还有其他一些问题,
比如那个后台定时过程是怎么启动的,比如ILM策略是保存在哪的等等,
但这些都不是重点,可以暂时略过
ilm的执行,有两个地方,
1> 每次CS发生变化时,这是不定时的,
2> 就是"indices.lifecycle.poll_interval"这个参数定义的间隔时间,这是定时的
两个地方会执行同一个方法,
只是这个boolean fromClusterStateChange的参数,传入的值不一样,
情况1时,传true
情况2时,传入的是false
要回复问题请先
登录
或
注册
发起人
Charele
活动推荐
Jun
30
Elastic Stack 8.2平台和解决方案更新
线上直播
·
6-30 周四
·
报名中
相关问题
虚心求教,elastisearch 该怎么进行深入学习以及调优
关于_type 与 _doc 我该怎么理解?
Translog 安全性理解
我对elasticsearch translog flush的理解和疑惑(看完网上的分析后感觉不严谨)
谁推荐一本关于es以及lucene的书籍,深入学习es
求助个query理解问题
kibana-discovery 中的filter out value如何理解啊?
关于倒排索引中搜索结果合并不太理解的地方
es-head文档数量疑问,按照理解括号外面的是主分片的文档数量,括号里面的是主分片加副本文档数量
关于《深入理解ElasticSearch》中对于"~"的一点疑问
elastic2.3自定义插件,监测index变化,postIndex,postCreate的执行让我无法理解
问题状态
最新活动:
2022-05-20 06:00
浏览:
418
关注:
1
人
6 个回复
Charele
赞同来自:
https://elasticsearch.cn/question/12617
这个贴子里提到,一个ilm策略,就是
phase ---> action ---> step 这么一个3层架构,
(策略里包括phase, phase里面包含action, action里面包含step)
其中,phase和action就是你在定义一个策略里定义的那些(不完全相等,下面会提及)
而ILM的执行单元,step,不是用户自己定义的,是由ES自已产生的。
最终,这个策略会“扁平化”,会形成一个step列表,
ilm的执行,就是围绕这个列表来执行的,
从表头到表尾,一个一个执行,,,
那这么列表究竟长啥样呢?拿上面那个策略来讲:
里面的标识,意义各有不同,下面我会一一分析,
Charele
赞同来自:
说起step,首先得了解step的分类,
这个问题非常重要!!!
只有先知道了这些,才能理解ILM的执行流程,才不致于迷失方向
从上面的图中,我标识出了具体step属于哪类,(PhaseCompleteStep除外)
总体来说,可以分成4大类(和3个特别的)
1> 绿色的,异步动作
就是通常的执行,没啥特别的
2> 红色的,异步等待,
它会等待某些条件,成功了则下一步,否则会一直等
3> 紫色的,CS动作
它会改变CS,从一个CS变化到另外一个CS(ClusterState是什么,就不多啰嗦了)
4> 黄色的,CS等待
它会等待CS符合某些条件,而做出不同的选择,和2类似
5> 其他类型的,黑框框里面的
Charele
赞同来自:
重新贴下这个图,稍微讨论一下。
这是重点,但不是难点。
1> 这里面分了3个phase(红框里面)
phase0,是第1个phase(叫啥无所谓,只序号上区分的)
这个phase,是ES手工加上去的。不管什么策略,ES都会加这个
这步的作用是设置索引的一些参数
2> phase1和phase2就是你在定义一个策略时,定义的两个
用红线划出来的3个,就是实际起作用的,你要做的事情。
比如DeleteStep,就是真正删除索引,
其中phase1里面,有两个action,为什么有两个呢?
明明在hot里面只定义了一个rollover动作,
这是ES自己加上去的
(就是紫框框里面的那些,啥时加的,为什么要加,后面谈)
3> 每个phase最后,肯定会有一个"PhaseComleStep",(绿框框里面)
标记这个phase结束,要么进入下一个phase,
要么没有下一个phase了,就全部完成了
4> 一共20个step,整个ilm执行,就是取1,执行1,
取2,执行2,,,,一直到执行完最后一个
(只是形式上可以这么理解,实际情况可能有点复杂)
另外:黑框框里面的,有点特殊,后面会谈到
Charele
赞同来自:
为了对上面我说的,有个直观的认识,我挑一段代码来说明一下下
如果当前step是PhaseCompleteStep,说明一个phase结束了。
如果没有下一步了,就说明所有的结束了,就返回了。绿框里的。
如果有一下步(比如上面的第2个step或者第16个step),
要进行一下判断(黄框里的),
为真就进入下一步(也是下一个phase)
这里的判断是什么呢? 就是那个你在定义策略时定义"min_age"时间
(注意:红框里的,这里传入的是“下一个步的phase的”名字!因为当前是本phase的最后一步,
所以这里也就是下一个phase的名字)
Charele
赞同来自:
网上文章,好像有人对"min_age"这个参数好像有一些困惑,什么它究竟是增量还是啥量,有人还各种测试。
其实这很简单:
接上楼,isReadyToTransitionToThisPhase()这个方法,
其实就是判断一下,
红色的,就是索引的创建时间,
(要说明了下,如果你是执行了rollover, 001 -> 002,
这里指的还是索引001,这不应该有疑问)
绿色的,就是你定义的这个phase的"min_age"
结论:如果你想进入这个phase,就取出这个phase的min_age,这样比较一下
(索引的创建时间是不变的),跟其他phase的min_age设置没有任何关系。
就是这么简单。
接上楼的话题,如果是true了,就进入这个phase,
如果就不是,不进入下一步,返回:就是等待,
Charele
赞同来自:
有了上面的一些铺垫,就可以进入正题了:如何一步一步执行ILM的流程。
虽然还有其他一些问题,
比如那个后台定时过程是怎么启动的,比如ILM策略是保存在哪的等等,
但这些都不是重点,可以暂时略过
ilm的执行,有两个地方,
1> 每次CS发生变化时,这是不定时的,
2> 就是"indices.lifecycle.poll_interval"这个参数定义的间隔时间,这是定时的
两个地方会执行同一个方法,
只是这个boolean fromClusterStateChange的参数,传入的值不一样,
情况1时,传true
情况2时,传入的是false