ElasticSearch索引生命周期管理(ILM)
注: 部分概念介绍来源于网络
6.6 版本的发布,Index Lifecycle Management(索引生命周期管理,后文简称 ILM );
ILM 可以将索引生命周期分为四个阶段(Phase)(具体几个阶段可以根据实际情况设定);
Hot 阶段:索引数据正在活跃的更新和查询,由于该阶段需要进行大量的数据读写,因此需要高配置的节点,也就是我们通常说的热数据,为保证性能数据通常都是在内存中或者SSD上;
Warm 阶段:索引数据不再被更新,但是仍被查询,由于该阶段主要负责数据的读取,中等配置的节点即可满足需求,介于热和冷之间,数据来源于hot层,可以进行数据周期设置,shrink,forcemerge,reduce replica等操作,数据可以根据需求存在内存、硬盘以及SSD上;
Cold 阶段:索引已经不被更新且很少查询。但是索引数据的信息还需要被搜索,若被搜索则比较慢,由于该阶段只负责少量的数据读取工作,低等配置的节点即可满足要求,数据通常存储在大容量的磁盘上;数据来源于warm层,可以进行数据周期设置,freeze等操作;
Delete 阶段:索引按照设置的数据时间规则可被安全的删除。
ILM 将不同的生命周期管理策略称为 Policy,而所谓的 Policy 是由不同阶段(Phase)的不同动作(Action)组成的。
Action是一系列操作索引的动作,比如 Rollover、Shrink、Force Merge等,不同阶段可用的 Action 不同,详情如下:
Hot Phase
Rollover
滚动索引操作,可用在索引大小或者文档数达到某设定值时,创建一个新的写入索引,将旧的写入索引的别名去掉,并把别名赋给新的写入索引。所以便可以通过切换别名控制写入的索引是谁,用于数据读写,从而控制单个索引的大小。这里要注意的一点是,如果启用了 Rollover ,那么所有阶段的时间不再以索引创建时间为准,而是以该索引 Rollover 的时间为准。
Rollover可。它可用于Hot阶段。
Warm Phase
Allocate 设定副本数、修改分片分配规则(如将分片迁移到中等配置的节点上)等
Read-Onlly 设定当前索引为只读状态
Force Merge 合并 segment 操作,可触发一个索引分片的segment merge,同时释放掉被删除文档的占用空间
Shrink 缩小 shard 分片数,需要注意的是当shink完成后索引名会由原来的<origin-index-name>变为shrink-<origin-index-name>
Cold Phase
Allocate 设定副本数、修改分片分配规则(如将分片迁移到中等配置的节点上)等
Delete Phase
Delete 删除
如何应用到索引(Index)上面呢?
修改索引配置可以直接修改(PUT index_name/_settings)或者通过索引模板(Index Template)来实现。
使用滚动索引有几个注意事项:
索引命名最好以数值类型为结尾,比如 index-000001
索引必须设置index.lifecycle.rollover_alias为滚动的别名;
索还必须是别名的写入索引。
优先级设置
这个action等同于设置索引属性index.priority的值。具有较高优先级的索引将在节点重启后优先恢复。通常,热阶段的指数应具有最高值,而冷阶段的指数应具有最低值。未设置此值的指标的隐含默认优先级为1。索引的优先级。必须为0或更大。也可以设置为null以删除优先级。
{
"set_priority" : {
"priority": 50
}
}
强制合并
使用强制合并时,索引将变成只读。
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"forcemerge" : {
"max_num_segments": 1 //合并后的shard里的lucene segments数,
}
}
}
}
}
}
收缩索引
使用收缩索引时,索引将变成只读。收缩索引API允许您将现有索引缩减为具有较少主分片的新索引。目标索引中请求的主分片数必须是源索引中分片数的一个因子。如果索引中的分片数是素数,则只能缩小为单个主分片。
新索引将有一个新名称:shrink-<origin-index-name>。因此,如果原始索引称为“logs”,则新索引将命名为“shrink-logs”。
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"warm": {
"actions": {
"shrink" : {
"number_of_shards": 1
}
}
}
}
}
}
冻结索引
为了使索引可用且可查询更长时间但同时降低其硬件要求,它们可以转换为冻结状态。一旦索引被冻结,它的所有瞬态分片内存(除了映射和分析器)都会被移动到持久存储。
注意冻结一个索引会close并reopen,这会导致短时间内不可用,集群会变red,直到这个索引的分片分配完毕。
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"cold": {
"actions": {
"freeze" : { }
}
}
}
}
}
索引生命周期操作:
Alias(重新别名)
Allocation(分配分片)
Close(关闭索引)
Cluster Routing(集群路由)
Create Index(创建索引)
Delete Snapshots(删除快照)
Forcemerge(段合并)
Index Settings(索引设置)
Open(打开索引)
Reindex(重新索引)
Replicas(副本分配)
Restore(重新存储)
Snapshot(索引快照)
allocate:将分片移动到具有不同性能特征的节点上,并减少副本的数量。
delete:永久移除索引。
force merge:减少索引段的数量并清除已删除的文档。使索引为只读。
freeze:冻结索引以最大程度减少其内存的占用量。
read only:阻止对索引的写操作。
rollover:删除索引作为过渡别名的写索引,然后开始索引到新索引。(滚动索引)
set priority:降低索引在生命周期中的优先级,以确保首先恢复热索引。
shrink:通过将索引缩小为新索引来减少主分片的数量。(收缩索引)
unfollow:将关注者索引转换为常规索引。在进行滚动或收缩操作之前自动执行。
wait for snapshot:删除索引之前,确保快照存在。
创建 ILM Policy
索引名以 index 为前缀,索引的创建时间最大为1小时,索引的最大大小不超过50G,索引的最大文档数不超过1个
Rollover 后 2 小时转为 Warm 阶段
Rollover 后 3 小时转为 Cold 阶段
Rollover 后 4 小时删除
1.创建一个索引策略
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
//rollover前距离索引的创建时间最大为1小时
"max_age": "1h",
//rollover前索引的最大大小不超过50G
"max_size": "50G",
//rollover前索引的最大文档数不超过2个
"max_docs": 2,
}
}
},
"warm": {
//rollover之后进入warm阶段的时间不小于2小时
"min_age": "2h",
"actions": {
"forcemerge": {
//强制分片merge到segment为1
"max_num_segments": 1
},
"shrink": {
//收缩分片数为1
"number_of_shards": 1
},
"allocate": {
//副本数为1
"number_of_replicas": 1
}
}
},
"cold": {
//rollover之后进入cold阶段的时间不小于3小时
"min_age": "3h",
"actions": {
"allocate": {
"require": {
//分配到cold 节点,ES可根据机器资源配置不同类型的节点
"type": "cold"
}
}
}
},
"delete": {
//rollover之后进入cold阶段的时间不小于4小时
"min_age": "4小时",
"actions": {
"delete": {}
}
}
}
}
}
2.创建一个索引模版,指定使用的索引策略
PUT _template/my_template
{
//索引模版匹配的索引名以"index-"开头
"index_patterns": ["index-*"],
"settings": {
//索引分片数为2
"number_of_shards":2 ,
//索引副本数为2
"number_of_replicas": 2,
//索引使用的索引策略为 my_policy
"index.lifecycle.name": "my_policy",
//索引rollover后切换的索引别名为 myindex
"index.lifecycle.rollover_alias": "myindex"
}
}
3.创建一个符合上述索引模版的索引
PUT index-000001
{
"aliases": {
"myindex":{ //别名为 myindex
//允许索引被写入数据
"is_write_index": true
}
}
}
4.修改 ILM Polling Interval
ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了更快地看到效果,我们将其修改为 1 秒。
PUT _cluster/settings
{
"persistent": {
"indices.lifecycle.poll_interval":"1s"
}
}
5.手动应用生命周期策略
你可以在创建索引的时候指定一个策略,也可以直接将策略应用到一个已经存在的索引上。一旦你应用了策略,ILM立即会开始管理该索引。
PUT test-index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_police"
}
}
6.将策略应用于多个索引
PUT test-index-*/_settings
{
"index": {
"lifecycle": {
"name": "my_policy"
}
}
}
7.索引策略执行失败
首先我们先看一下失败的原因是什么,可以用API查看一下:
GET /myindex/_ilm/explain
返回信息中step_info就是失败原因,假设是索引策略设置的有问题,比如说Shrink的主分片数设置的比模版的都大,我们只需要更新索引策略,解决问题。然后在重试让ILM继续执行下一步就好。
POST /myindex/_ilm/retry
8.索引策略的更新
每次更新索引策略的版本都会增加,对于还没有开始创建的索引,更新索引策略显然能够生效。对于已经存在的策略生效的索引,当前阶段是不会按照最新版本的策略执行的,必须等到变为下一个阶段了,才会按照最新版本的策略执行。
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "25GB"
}
}
},
"delete": {
"min_age": "4h",
"actions": {
"delete": {}
}
}
}
}
}
9.切换索引使用的索引策略:
PUT myindex/_settings
{
"lifecycle.name": "my_other_policy"
}
10.ILM的启用禁用
ILM的状态查看:
GET _ilm/status
{
"operation_mode": "RUNNING"
}
开启和关闭:
POST _ilm/start
POST _ilm/stop
ElasticSearch索引生命周期管理(ILM)相关推荐
- 干货 | Elasticsearch 索引生命周期管理 ILM 实战指南
1.什么是索引生命周期? 关于人生,有人这么说:"人,生来一个人,死去一个人,所以,人生就是一个人生老病死的简称." 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类 ...
- Elasticsearch索引生命周期管理方案
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 一.前言 在 Elasticsearch 的日常中,有很多 ...
- ES索引生命周期管理ILM
前言 在使用ES的过程中,你是否遇到过这样的问题: 1.单个索引数据量持续增长,导致查询速度降低,运维困难 2.希望能根据时间周期自动生成新的索引,比如天.周.月自动生成新的索引 3.希望能定期自动删 ...
- Elasticsearch 索引生命周期管理方案
Elasticsearch索引生命周期管理方案 文章目录 Elasticsearch索引生命周期管理方案 1.生命周期 1.1 阶段介绍 2.模拟过程(基础) 2.1 创建索引生命周期策略 2.2 创 ...
- 索引生命周期管理ILM看完不懂你锤我
阅读完本文你可以学到什么是索引生命周期管理,各个阶段可以做的操作以及如何使用索引模版使用索引生命周期策略,下面就跟我一起来吧 基础理论篇 索引生命周期管理(ILM)是一种可以让我们随着时间推移自动化的 ...
- 【Elasticsearch】Elasticsearch 索引生命周期管理
文章目录 1.概述 1.1 为什么要对elasticsearch进行生命周期管理? 1.2 什么是索引周期管理 1.3 各个阶段允许的action 1.3 如何对elasticsearch进行生命周期 ...
- Elasticsearch ILM 索引生命周期管理常见坑及避坑指南
之前的博文和视频都讲过 ILM 索引生命周期管理.但从近期的反馈和我自己的实战经验看,依然会有很多坑. 现将我自己和大家遇到的常见坑汇集如下,希望能让后来小伙伴少走弯路. 少啰嗦,直接上干货. 坑1: ...
- Elasticsearch 快照生命周期管理 (SLM) 实战指南
1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群高可用的方式包含但不限于如下三种: 方式一:副本分片.主分片失效后,副本分片会被提升为主分片. 方式二:跨集群复 ...
- 【Elasticsearch】使用索引生命周期管理实现热温冷架构
1.概述 [Elasticsearch]Elasticsearch 索引生命周期管理 转载:使用索引生命周期管理实现热温冷架构 索引生命周期管理 (ILM) 是在 Elasticsearch 6.6( ...
最新文章
- phpstorm—下载安装配置教程
- python自动化测试书籍推荐豆瓣_推荐几本自动化测试的书籍
- ●BZOJ 4408 [Fjoi 2016]神秘数
- Android之解决PC浏览器访问手机服务端取assets目录下的文件页面显示不出来问题
- PhoneGap录像 以及 录音功能 简单代码实现3
- 吧唧下工作的事情 - 记用canvas封装的小小控件
- 44膜型键盘_小学四年级数学上册考试必考题型:判断题练习题
- 四位共阳数码管与共阴数码管的c语言,4位共阳LED数码管与常用共阳极数码管型号...
- Win11系统svchost.exe一直在下载怎么办?
- omniPlan密匙
- mysql insert on duplicate_一条Insert on duplicate引发的血案
- COFs单体—醛类单体/氨基单体/硼酸系列
- 贪吃蛇小游戏(HTML+CSS+JS)
- Kali Linux修改更新源
- Ubuntu 测网速
- java 保存微信表情_Java微信公众号开发之用户表情存储解决方案
- 键盘钢琴软件v1.0.1.0官方pc版
- clang++ exe error unable to execute command Couldnt execute program文件名或扩展名太长
- 视频加封面制作步骤,全部视频添加不同图片封面图
- 基于STM32F407+RFID的模拟公交车刷卡收费系统小项目
热门文章
- win10安装winpcap4.13
- Arcgis For Android实现比例尺
- 怎么让python一直执行_怎么才能让Python多进程不间断执行任务
- python生成一个四位数字的随机数
- python中年大叔学编程_中年大叔学编程-我用Python保存金山词霸每日一句
- 如何通过局域网共享本机网页
- 电商小程序实战教程-分类导航
- 9月最新版 H5移动棋牌游戏联运推广平台移动游戏系统源代码下载(带安装说明)
- 职场管理(3)——提取公积金需要满足哪些条件?你还不知道吧
- 给select里面的option加入背景图片(select美化)