ES中的索引生命周期管理

标签: Elasticsearch | 发表时间:2020-09-06 17:26 | 作者:
出处:https://jenkinwang.github.io/

ILM

ILM:索引生命周期管理,即 Manage the index lifecycle

使用 ILM应确保集群中的所有节点运行的是同一个版本,不然无法保证他们会按预期工作。

索引生命周期

索引的生命周期有四个阶段:

  1. Hot:索引更新和查询很活跃。
  2. Warm:索引不再更新,但仍然有查询
  3. Cold:索引不再更新,只有很少的查询,而且查询速度也很慢
  4. Delete:索引不需要了,可以安全的删除

索引的生命周期策略指定了适用于哪些阶段、在每个阶段中执行哪些操作以及何时在各个阶段之间进行转换。

rollover

当索引满足一定条件之后,将不再写入数据,而是自动创建一个索引,所有的数据将写入新的索引。

使用滚动索引能够:

  1. 优化活跃索引,在高性能 hot节点上提升高接收速率。
  2. 优化 warm节点搜索性能。
  3. 将旧的、访问频率低的数据转移到成本低的 cold节点上。
  4. 通过删除整个索引,根据索引保留策略删除数据。

官方推荐使用 data stream数据流来管理时间序列数据。每个数据流都需要一个 索引模板,其中包括:

  1. 数据流的名称或通配符(*)模式。
  2. 数据流时间戳字段。该字段必须映射为 datedate_nanos数据类型。并且包含在索引到该数据流的每个文档中。
  3. 当创建每一个索引时将应用索引模板的映射和设置。

数据流专为追加数据而设计,其中数据流名称可用作操作(读取、写入、翻转、收缩等)目标。如果需要更新数据,可以使用 索引别名来管理时间序列数据。

自动 rollover

ILM会根据你的配置: 索引大小文档数量所在阶段 ,当满足这些条件时,自动实现 rollover

索引生命周期策略的更新

  1. 生命周期策略被应用到索引上时,索引会获取当前策略的最新版本号。如果更新了当前策略,版本号会发生冲突, ILM就能检测出当前索引正在使用上一个版本的策略,需要将索引策略更新到最新版本。
  2. 如果将不同的策略应用到已经被管理的索引上时,索引还是使用先前管理策略中的缓存定义来完成当前阶段。直到进入下一个阶段,索引才会应用新的管理策略。

索引生命周期操作

  1. allocate:将分片移动到具有不同性能特征的节点上,并减少副本的数量。
  2. delete:永久移除索引。
  3. force merge:减少索引段的数量并清除已删除的文档。使索引为 只读
  4. freeze:冻结索引以最大程度减少其内存的占用量。
  5. read only:阻止对索引的写操作。
  6. rollover:删除索引作为过渡别名的写索引,然后开始索引到新索引。
  7. set priority:降低索引在生命周期中的优先级,以确保首先恢复热索引。
  8. shrink:通过将索引缩小为新索引来减少主分片的数量。
  9. unfollow:将关注者索引转换为常规索引。在进行滚动或收缩操作之前自动执行。
  10. wait for snapshot:删除索引之前,确保快照存在。

配置生命周期策略

要让 ILM管理索引,必须要在 index.lifecycle.name索引设置中指定有效的策略。

要为滚动索引创建生命周期策略,你要创建该策略并把它加入到 索引模板中。

创建生命周期策略

可以通过 Kibana管理页面设置,也可以通过API设置。

1     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PUT _ilm/policy/my_policy     
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "25GB"
}
}
},
{
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
}
将生命周期策略应用到索引模板中

可以通过 Kibana管理页面设置,也可以通过API设置。

1     
2
3
4
5
6
7
8
9
10
11
12
PUT _index_template/my_template     
{
"index_patterns": ["test-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "test-alias"
}
}
}
创建一个初始被管理的索引

如果要给滚动索引设置策略,需要手动创建第一个被该策略管理的索引,并指定为可写索引。

索引的名称必须跟索引模板里定义的模式相匹配,并且以数字结尾。

1     
2
3
4
5
6
7
8
PUT test-000001     
{
"aliases": {
"test-alias": {
"is_write_index": true
}
}
}
手动应用生命周期策略

你可以在创建索引的时候指定一个策略,也可以直接将策略应用到一个已经存在的索引上通过 Kibana管理或者更新设置的API。一旦你应用了策略, ILM立即会开始管理该索引。

1     
2
3
4
5
6
7
8
PUT test-index     
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_police"
}
}
将策略应用于多个索引
1     
2
3
4
5
6
7
8
PUT mylogs-pre-ilm*/_settings     
{
"index": {
"lifecycle": {
"name": "mylogs_policy_existing"
}
}
}

解决生命周期策略运行报错

查看错误:

1     
GET /my-index-000001/_ilm/explain     

重新运行报错的一步:

1     
POST /my-index-000001/_ilm/retry     

开启和终止索引生命周期管理

查看 ILM状态:

1     
2
3
4
5
6
GET _ilm/status     

# 返回结果
{
"operation_mode": "RUNNING"
}

终止 ILM

1     
2
3
4
5
6
7
8
9
10
POST _ilm/stop     

# 返回结果
{
"operation_mode": "STOPPING"
}

{
"operation_mode": "STOPPED"
}

开启 ILM

1     
POST _ilm/start     

跳过rollover

设置 index.lifecycle.indexing_completetrue

举个例子,如果你要改变一系列新索引的名称,并保留之前根据你配置的策略产生的索引数据,你可以:

  1. 为新的索引模式创建一个模板,并使用之前相同的策略。
  2. 根据新的模板创建一个初始索引。
  3. 使用索引别名API将别名的 write索引更改为 bootstrapped索引。
  4. 设置旧索引的 index.lifecycle.indexing_complete的值为 true

相关连接: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/index-lifecycle-management.html

相关 [es 索引 生命周期] 推荐:

ES中的索引生命周期管理

- - JenkinWang's Blog
ILM:索引生命周期管理,即 Manage the index lifecycle. 使用 ILM应确保集群中的所有节点运行的是同一个版本,不然无法保证他们会按预期工作. Hot:索引更新和查询很活跃. Warm:索引不再更新,但仍然有查询. Cold:索引不再更新,只有很少的查询,而且查询速度也很慢.

Elasticsearch索引生命周期管理方案

- - SegmentFault 最新的文章
在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套 UI 界面来配置策略. 本文主要介绍 Elasticsearch 索引生命周期管理如何配置和使用.

索引表和ES的一点点思考 - CSDN博客

- -
在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存. 一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作. 使用分库可以降低数据库写的压力. 尽管写操作为主,但是读操作也是有的. 比如说,库存占用的时候,得先查询是否有库存,而这个查询操作并不都会带上分库因子(用于路由到具体的某个数据库),而是一些比较宽松的查询条件,这些查询条件对应的数据可能分布在不同的数据库上.

根据配置实现不同ES索引保留天数不同

- - 开源软件 - ITeye博客
由于ES接入的项目变多,之前所有索引都保留30天,现在需要根据业务不同,索引保留的天数可以配置,所以写了shell命令,可以根据配置删除过期索引,配合cron执行. 索引按照天进行分隔,格式统一为:xxxx_yyyy.mm.dd. #/bin/bash ES_URL="http://127.0.0.1:9200" #填写你的es对外http连接地址 ES_USER="username" #name代表你的你的es用户名 ES_PASSWORD="password" #password代表你的es用户密码 delete_index() {.

Spring bean生命周期

- - 开源软件 - ITeye博客
Spring bean生命周期.       在传统的Java应用中,Bean的生命周期非常简单.  Java的关键词new用来实例化Bean(或许他是非序列化的).  相反,Bean的生命周期在Spring容器中更加细致.  理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程.

Activity生命周期详解

- - 编程语言 - ITeye博客
本文概述:针对一个例子详细阐述Activity的生命周期. Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的Activity的集合,这个栈也叫返回栈(Back Stack). 每次我们启动一个新的Activity,这个Activity就会入栈,并处于栈顶位置. 按下返回键或者finish()方法销毁一个Activity时,处于栈顶的Activity就会出栈,另一个Activity就会处于栈顶位置,显示给用户的就会是这个Activity..

ES优化总结

- - 非技术 - ITeye博客
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:. 为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降. 候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了.

敏捷应用生命周期管理

- - 博客 - 伯乐在线
Agile ALM使用敏捷的价值观和策略来充实了ALM,ALM的敏捷做法提升了产品的质量,缩短了上市时间,且有利于开发者以一种更加愉悦的心情来工作. 我对Agile ALM的定义可归结为,一些灵活的、对改变持开发态度的、高质量的过程和工具链. 敏捷应用生命周期管理(Agile Application Lifecycle Management,Agile ALM)正得到越来越大的推动,记得我在撰写“Agile ALM”一书的书稿时,几乎没有人会想到使用敏捷来丰富ALM的做法,或是找出一种有实效的ALM做法,越来越多的工具厂商发现,他们的工具在贴上敏捷工具甚至是敏捷ALM工具的标签之后好卖多了.

spring中Bean的生命周期总结

- - CSDN博客推荐文章
spring中在ApplicationContext或在BeanFactory中Bean的生命周期总结.  Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在ApplicationContext和BeanFactory中Bean的生命周期.

Activity的生命周期方法

- - 移动开发 - ITeye博客
一:Activity的生命周期方法.  Android提供了很多Activity的生命周期方法,比如我们常用的onCreate、onPause、onResume等. 这里主要介绍粗粒度的周期方法,诸如onPostCreate、onPostResume等. 这些细粒度的周期方法可以参考Android的API文档,在你需要更细层次的控制的时候可以使用这些细粒度的方法.