Elasticsearch索引生命周期管理方案

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文主要介绍Elasticsearch索引生命周期管理如何配置和使用

封面.png

一、前言

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阶段是必须的

4个阶段.png

索引根据时间参数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 中以图形化界面的方式进行操作
kibana1.png

 

kibana2.png

注意:如果使用图形化界面来创建策略,删除阶段会缺失 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来管理索引策略。可参考官方文档 管理索引生命周期

 

扫码关注有惊喜!

陶陶技术笔记公众号二维码.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
64 5
|
1月前
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
59 3
|
3月前
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
66 6
|
15天前
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
32 4
|
27天前
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
41 8
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
2月前
|
存储 搜索推荐 数据建模
Elasticsearch 的数据建模与索引设计
【9月更文第3天】Elasticsearch 是一个基于 Lucene 的搜索引擎,广泛应用于全文检索、数据分析等领域。为了确保 Elasticsearch 的高效运行,合理的数据建模和索引设计至关重要。本文将探讨如何为不同的应用场景设计高效的索引结构,并分享一些数据建模的最佳实践。
117 2
|
3月前
|
存储 运维 搜索推荐
运维开发.索引引擎ElasticSearch.倒序索引的概念
运维开发.索引引擎ElasticSearch.倒序索引的概念
53 1
|
3月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
3月前
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
44 0
下一篇
无影云桌面