一、前言

Elasticsearch 的日常中,有很多如存储 系统日志行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长 索引 的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对 索引 进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能;

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

二、生命周期

2.1. 阶段介绍

索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作。

rollover:滚动更新创建的新索引将添加到索引别名,并被指定为写索引。

PS:4个阶段中只有hot阶段是必须的

索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操作必须完成。

2.2. 阶段动作

阶段/action 优先级设置 取消跟随 滚动索引 分片分配 只读 强制段合并 收缩索引 冻结索引 删除
hot × × × × × ×
warm × × ×
cold × × × × ×
delete × × × × × × × ×

2.3. 例子

下面以索引 syslog-2020.10.01 为例子,在索引创建 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除

日期 动作 阶段
2020-10-01 创建索引 syslog-2020.10.01 ,处理读写请求 hot阶段
2020-10-02 syslog-2020.10.01 改为只读 warm阶段
2020-11-01 syslog-2020.10.01 为只读,并迁移到冷节点储存 cold阶段
2020-12-01 删除索引 syslog-2020.10.01 delete阶段

三、模拟过程

3.1. 创建索引生命周期策略

假设 Policy 设定如下:

  • 索引以每10个文档做一次 Rollover
  • Rollover 后 5 秒转为 Warm 阶段
  • Rollover 后 20 秒转为 Cold 阶段
  • Rollover 后 40 秒删除
curl -XPUT "http://$IP:9200/_ilm/policy/my_ilm_policy" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": "10"
}
}
},
"warm": {
"min_age": "5s",
"actions": {
"allocate": {
"include": {
"box_type": "warm"
}
}
}
},
"cold": {
"min_age": "20s",
"actions": {
"allocate": {
"include": {
"box_type": "cold"
}
}
}
},
"delete": {
"min_age": "40s",
"actions": {
"delete": {}
}
}
}
}
}'

ip、用户名和密码按实际情况修改

3.2. 关联策略

关联策略有两种方式,分别是使用索引模板关联和索引直接关联

3.2.1. 索引模板关联

索引模板来创建所需的索引,并关联ilm策略

curl -XPUT "http://$IP:9200/_template/my_test_template" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"index_patterns": ["my-test-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index.lifecycle.name": "my_ilm_policy",
"index.lifecycle.rollover_alias": "my-test",
"index.routing.allocation.include.box_type": "hot"
}
}'

ip、用户名和密码按实际情况修改

index.lifecycle.name:指明该索引应用的 ILM Policy

index.lifecycle.rollover_alias:指明在 Rollover 的时候使用的 alias

index.routing.allocation.include.box_type:指明新建的索引都分配在 hot 节点上

3.2.2. 索引直接关联

为现有的索引单独关联策略

curl -XPUT "http://$IP:9200/my-test-*/_settings" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"index": {
"lifecycle": {
"name": "my_ilm_policy"
}
}
}'

ip、用户名和密码按实际情况修改

3.3. 查看索引所处阶段

http://$IP:9200/my-test-*/_ilm/explain

3.4. 更新策略

  1. 如果没有index应用这份策略,那么我们可以直接更新该策略。
  2. 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
  3. 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。

3.5. kibana图形化操作

上述的步骤,大部分都可以在 Kibana 中以图形化界面的方式进行操作

注意:如果使用图形化界面来创建策略,删除阶段会缺失 actions 内容而导致无法删除

四、修改轮询间隔(可选)

ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了测试更快地看到效果,可将其修改为1秒。

curl -XPUT "http://$IP:9200/_cluster/settings" \
-H 'Content-Type: application/json' \
-u elastic:changeme \
-d '{
"persistent": {
"indices.lifecycle.poll_interval":"1s"
}
}'

ip、用户名和密码按实际情况修改

五、启动和停止索引生命周期管理

ILM 默认开启

由ILM管理的所有索引将继续执行其策略。有时可能不需要某些索引,甚至集群中的所有索引都不需要。例如,当需要集群拓扑更改时,可能会有计划的维护窗口,这可能会影响正在运行的ILM操作。因此,ILM有两种禁用操作的方法。

停止ILM时,快照生命周期管理操作也会停止,这意味着不会创建计划的快照(当前正在进行的快照不受影响)。

通常,ILM将默认运行。要查看ILM的当前运行状态,请使用Get Status API 来查看ILM的当前状态。

GET  _ilm/status

如果请求没有遇到错误,您将收到以下结果:

{
"operation_mode": "RUNNING"
}

ILM的操作模式

阶段/action 优先级设置
正在运行 正常运行,所有策略均正常执行
停止 ILM已收到停止请求,但仍在处理某些策略
已停止 这表示没有执行任何策略的状态

5.1. 停止ILM

可以暂停ILM服务,以便使用Stop API不再执行其他步骤。

POST  _ilm/stop

停止后,所有其他政策措施都将停止。这将反映在状态API中

{
"operation_mode": "STOPPING"
}

然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该STOPPED模式

{
"operation_mode": "STOPPED"
}

5.2. 启动ILM

要启动ILM并继续执行策略,请使用Start API

POST  _ilm/start

Start API将向ILM服务发送请求,以立即开始正常操作。

{
"operation_mode": "RUNNING"
}

六、API清单

可以使用以下API来管理索引策略。可参考官方文档 管理索引生命周期

扫码关注有惊喜!

Elasticsearch索引生命周期管理方案的更多相关文章

  1. Elasticsearch索引生命周期管理探索

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484130&idx=1&sn=454f199 ...

  2. ElasticSearch——索引生命周期管理

    从ES6.6开始,Elasticsearch提供索引生命周期管理功能,索引生命周期管理可以通过API或者kibana界面配置,详情参考[index-lifecycle-management] 本文仅通 ...

  3. Elasticsearch 索引生命周期管理 ILM 实战指南

    文章转载自:https://mp.weixin.qq.com/s/7VQd5sKt_PH56PFnCrUOHQ 1.什么是索引生命周期 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类似 ...

  4. Elasticsearch7.X ILM索引生命周期管理(冷热分离)

    Elasticsearch7.X ILM索引生命周期管理(冷热分离) 一.“索引生命周期管理”概述 Elasticsearch索引生命周期管理指:Elasticsearch从设置.创建.打开.关闭.删 ...

  5. Logstash & 索引生命周期管理(ILM)

    Grok语法 Grok是通过模式匹配的方式来识别日志中的数据,可以把Grok插件简单理解为升级版本的正则表达式.它拥有更多的模式,默认,Logstash拥有120个模式.如果这些模式不满足我们解析日志 ...

  6. 这么简单的ES索引生命周期管理,不了解一下吗~

    对于日志或指标(metric)类时序性强的ES索引,因为数据量大,并且写入和查询大多都是近期时间内的数据.我们可以采用hot-warm-cold架构将索引数据切分成hot/warm/cold的索引.h ...

  7. Elastic 使用索引生命周期管理实现热温冷架构

    Elastic: 使用索引生命周期管理实现热温冷架构 索引生命周期管理 (ILM) 是在 Elasticsearch 6.6(公测版)首次引入并在 6.7 版正式推出的一项功能.ILM 是 Elast ...

  8. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  9. ES 7.13版本设置索引模板和索引生命周期管理

    第一步:索引管理中查看都有哪些索引文件,然后添加索引模式(后面的日期用*表示) 第二步:索引生命周期管理 自带的有一个log,就使用这个,不用再新建了,根据需求修改里面的配置就行了 第三步:添加索引模 ...

随机推荐

  1. 11_SurfaceView绘图

    学习SurfaceView绘图API的使用方法,为接下来使用SurfaceView开发游戏做准备. 1 package com.example.surfaceview; 2 3 import andr ...

  2. spring boot 访问外部http请求

    以前 访问外部请求都要经过 要用 httpClient  需要专门写一个方法  来发送http请求   这个这里就不说了 网上一搜全都是现成的方法 springboot 实现外部http请求 是通过F ...

  3. MongoDB 分片集群配置

    本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12) 使用 root 操作 (实际操作中使用非 root 账户启动报错) 零.服务器分配 服务器 102 服务器 103 服务 ...

  4. Go语言基础--1.1 变量的声明

    1.标准格式: var name type     (var 关键字 name 变量名 type 类型)   命名规则:建议使用驼峰命名法 例如:var userName string    var ...

  5. 第14.6节 使用Python urllib.request模拟浏览器访问网页的实现代码

    Python要访问一个网页并读取网页内容非常简单,在利用<第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头>的方法构建了请求http报文的请求头情况下,使 ...

  6. 第四章 、PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 前面章节其实已经在使用信号和槽了,但是作为Qt中最重要的机制也是Qt区别与其他开发平台的重 ...

  7. C++ 有关指针作为函数参数的问题,自定义内存分配函数传递二级指针的问题

    如题所示,我们主要讨论在自定义的内存分配函数中通常见到的代码如下所示: void Create(A** addr); 其中传递的参数是二级指针.为什么? 我们先看一下完整的动态内存分配函数的简单例子: ...

  8. 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用

    前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理.ABP框架的后端是基于.net core5.0 ...

  9. mac中nvm的安装和使用

    nvm 是 Mac 下的 node 管理工具,如果是管理 Windows 下的 node,可以使用 nvmw 或 nvm-windows . 一.若电脑中已安装node,需先卸载.参考学习的文档:ht ...

  10. 将命令行提示符里的执行结果导出到text文件中

    为便于查看和保存命令行提示符里的执行结果, 可以使用 ">" 将执行结果导入到指定.txt文件中. 例如: 在命令行提示符里查看C盘文件,并将结果导入到E盘dir-c-out ...