李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
Elasticsearch索引生命周期管理
Leefs
2021-12-27 PM
2021℃
0条
[TOC] ### 前言 在ELK架构中,使用Elasticsearch来存储系统日志时,有如下典型的特点: + 数据量非常大 + 经常访问新增的数据,随着时间的推移,数据的价值也在逐渐降低 随着数据量的增大,Elasticsearch创建索引的数量也在不断增长,这个时候就需要对 `索引` 进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 `Elasticsearch` 的性能。 为了对Elasticsearch中的索引进行更好的管理,Elasticsearch在6.6版本中引入了Index Lifecycle Management(索引生命周期管理),简称ILM,并在 6.7 版正式推出该功能。 **本篇示例使用的环境:** + Elasticsearch版本7.2.0 + Kibana版本7.2.0 + Elasticsearch节点个数:2 ### 一、概述 索引生命周期管理ILM是指Elasticsearch对索引进行设置、创建、打开、关闭、删除的全生命周期管理的过程。 #### 1.1 阶段介绍 **将索引生命周期分为4个阶段:hot、warm、cold、delete。** 其中hot阶段主要负责对索引进行滚动更新操作,warm、cold、delete阶段主要负责进一步处理滚动更新后的数据。 ![19.Elasticsearch索引生命周期管理01.png](https://lilinchao.com/usr/uploads/2021/12/1940666303.png) **具体介绍** | 阶段 | 介绍 | | ------ | ------------------------------------------------------------ | | hot | 热数据阶段,主要处理时序数据的实时写入。可根据索引的文档数、大小、时长决定是否调用rollover API来滚动更新索引。 | | warm | 冷数据阶段,索引不再写入,主要用来提供查询。 | | cold | 冷数据阶段,索引不再更新,查询很少,查询速度会变慢。 | | delete | 删除数据阶段,索引将被删除。 | ##### 添加生命周期管理方式 + **通过索引模板添加生命周期管理策略** 将策略应用到整个别名覆盖的索引下 + **为单个索引添加生命周期管理策略(不推荐)** 只能覆盖当前索引,新滚动的索引不再受策略影响。 ##### 阶段动作 | 阶段/action | 优先级设置 | 取消跟随 | 滚动索引 | 分片分配 | 只读 | 强制段合并 | 收缩索引 | 冻结索引 | 删除 | | ----------- | ---------- | -------- | -------- | -------- | ---- | ---------- | -------- | -------- | ---- | | hot | √ | √ | √ | × | × | × | × | × | × | | warm | √ | √ | × | √ | √ | √ | √ | × | × | | cold | √ | √ | × | √ | × | × | × | √ | × | | delete | × | × | × | × | × | × | × | × | √ | #### 1.2 常用Action | 参数 | 说明 | | ----------- | ------------------------------------------------------------ | | rollover | 当写入索引达到了一定的大小,文档数量或创建时间时,rollover可创建一个新的写入索引,将旧的写入索引的别名去掉,并把别名赋给新的写入索引。所以便可以通过切换`别名`控制写入的索引是谁。它可用于`Hot`阶段。 | | shrink | 减少一个索引的主分片数,可用于`Warm`阶段。需要注意的是当shink完成后索引名会由原来的`
`变为`shrink-
`. | | force merge | 可触发一个索引分片的segment merge,同时释放掉被删除文档的占用空间。用于`Warm`阶段。 | | allocate | 可指定一个索引的副本数,用于`warm, cold`阶段。 | | delete | 删除索引,用户delete阶段 | ### 二、配置生命周期管理 #### 2.1 需求 **索引策略如下:** + 初始创建索引包含一个主分片和一个副本分片 + 刚创建的索引默认在hot阶段 + 当文档数量达到5个进行滚动更新,旧索引从hot阶段进入到warm阶段 + 在warm阶段,删除掉索引副本分片,只留下主分片 + 在10秒后索引从warm阶段进入到delete阶段,并在20秒后将索引删除。 #### 2.2 步骤 + 第一步:配置lifecycle检测时间; + 第二步:创建一个索引策略; + 第三步:创建一个索引模版,指定使用的索引策略; + 第四步:创建一个符合上述索引模版的索引; + 第五步:向索引中写入数据,使索引触发滚动更新策略; + 第六步:查看索引所处阶段 #### 2.3 实现 **(1)配置lifecycle检测时间** ```json PUT /_cluster/settings { "transient": { "indices.lifecycle.poll_interval": "1s" } } ``` 默认为十分钟,为了测试看效果,改为1秒钟,如果在生产环境中则不需要进行修改。 **(2)创建一个索引策略** ```json # /_ilm/policy为固定格式,leefs_ilm_policy为创建索引策略名称 PUT /_ilm/policy/leefs_ilm_policy { # policy:配置策略 "policy": { # phases:阶段配置 "phases": { "hot": { "actions": { # rollover:滚动更新 "rollover": { # max_docs:文档数量最大为5执行操作 "max_docs": "5" } } }, "warm": { # min_age:该阶段最小停留时长 "min_age": "10s", "actions": { # allocate:指定一个索引的副本数 "allocate": { # number_of_replicas:进行索引副本数量设置 "number_of_replicas": 0 } } }, "delete": { "min_age": "20s", "actions": { # delete:删除索引,如果没有该方法即使到删除阶段也不执行删除操作 "delete": {} } } } } } ``` **说明** 在创建索引策略时,不是每个阶段都是必须的,除了hot阶段,其他阶段都可以根据需求进行省略。 包括滚动更新(rollover)在内的所有actions中的方法都可以根据需求进行省略。 **(3)创建一个索引模版,指定使用的索引策略** ```json # leefs_ilm_template:索引模版名称 PUT _template/leefs_ilm_template { # 模版匹配的索引名以"leefs_logs-"开头 "index_patterns": ["leefs_logs-*"], "settings": { # number_of_shard:设置主分片数量 "number_of_shards": 1, # number_of_replicas:设置副本分片数量 "number_of_replicas": 1, # 通过索引策略名称指定模版所匹配的索引策略 "index.lifecycle.name": "leefs_ilm_policy", # 索引rollover后切换的索引别名为leefs_logs "index.lifecycle.rollover_alias": "leefs_logs" } } ``` **(4)创建一个符合上述索引模版的索引** ```json # 清空之前索引 DELETE leefs_logs* # 创建第一个索引 PUT leefs_logs-000001 { "aliases": { //设置索引别名为leefs_logs的索引 "leefs_logs": { //允许索引被写入数据 "is_write_index":true } } } ``` **(5)向索引中写入数据,使索引触发滚动更新策略** ```json # refresh写入后更新 POST leefs_logs/_doc?refresh { "name":"llc" } ``` 上方命名执行5次,使其触发滚动更新策略。 **(6)查看索引所处阶段** ```json # 查询索引名称以leefs_logs-开头的索引信息 GET leefs_logs-*/_ilm/explain ``` **查询结果** ![19.Elasticsearch索引生命周期管理02.jpg](https://lilinchao.com/usr/uploads/2021/12/1518670677.jpg) ```json # 查询索引别名 GET _alias/ ``` ![19.Elasticsearch索引生命周期管理03.jpg](https://lilinchao.com/usr/uploads/2021/12/3354993208.jpg) ### 三、更新策略 1. 如果没有index应用这份策略,那么我们可以直接更新该策略。 2. 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。 3. 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。 ### 四、启动和停止索引生命周期管理 **ILM默认是开启状态。** **(1)查看ILM的当前运行状态** ```http GET _ilm/status ``` 执行结果 ```json { "operation_mode" : "RUNNING" } ``` **ILM的操作模式** | 阶段/action | 优先级设置 | | ----------- | ------------------------------------- | | 正在运行 | 正常运行,所有策略均正常执行 | | 停止 | ILM已收到停止请求,但仍在处理某些策略 | | 已停止 | 这表示没有执行任何策略的状态 | **(2)停止ILM** ```http POST _ilm/stop ``` 停止后,所有其他政策措施都将停止。这将反映在状态API中 ```json { "operation_mode": "STOPPING" } ``` 然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该`STOPPED`模式 ```json { "operation_mode": "STOPPED" } ``` **(3)启动ILM** ```http POST _ilm/start ``` 启动后查询状态 ```json { "operation_mode": "RUNNING" } ``` *附参考文章链接:* *https://developer.aliyun.com/article/780694* *https://help.aliyun.com/document_detail/164408.html*
标签:
Elasticsearch
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1790.html
上一篇
Cerebro安装教程
下一篇
【转载】Elastic Stack之Data Stream的概念
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
nginx
SpringBoot
Golang
SpringCloud
LeetCode刷题
Netty
工具
Jenkins
Git
随笔
Jquery
FastDFS
Http
Elastisearch
MyBatisX
锁
Nacos
数据结构和算法
DataX
RSA加解密
JavaScript
序列化和反序列化
Hbase
Azkaban
Spark
Spark SQL
微服务
Zookeeper
SpringCloudAlibaba
Java
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞