Elastic Search(五):索引生命周期管理 - ilm

2024-09-01 09:28

本文主要是介绍Elastic Search(五):索引生命周期管理 - ilm,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 ES:索引生命周期管理 - ilm
    • 1.1 介绍
      • 1、ILM
        • 阶段转换
        • 阶段执行
        • 阶段操作
    • 1.2 索引生命周期操作
      • 1、设置 索引生命周期
    • 1.3 索引生命周期管理
      • 1、创建 生命周期策略
      • 2、创建索引模板,模板中关联 policy
      • 3、创建符合模板的起始索引,设置别名(即我们统一对外提供服务的索引名)
      • 4、测试
      • 5、简易模式
      • 6、对已有索引添加生命周期策略

1 ES:索引生命周期管理 - ilm

1.1 介绍

ILM(Information Lifecycle Management)即信息生命周期管理,是一个涵盖信息在其整个生命周期中各个阶段的管理概念,ILM是指从一个信息系统数据及其相关元数据产生和初始储存阶段到最后过时被删除时的一套综合管理方法。

创建并应用索引生命周期管理(ILM)策略,以根据性能、弹性和保留要求自动管理索引。

  • 索引生命周期策略可以触发以下操作,例如:
  • 滚动(Rollover):当现有索引达到一定的时间、文档数量或大小时,将别名重定向以开始写入新索引。
  • 收缩(Shrink):减少索引中的主分片数量。
  • 强制合并(Force merge):手动触发合并以减少索引中每个分片中的段数,并释放被删除文档占用的空间。
  • 冻结(Freeze):使索引变为只读并最小化其内存占用。
  • 删除(Delete):永久删除索引,包括所有数据和元数据。

ilm在hot-warm-cold结构中,使管理索引变得更加简单,这种结构在处理时间序列数据(如日志和指标)时很常见。

可以在ilm中指定:

  • 希望滚动到新索引时的最大分片大小、文档数量或时间。
  • 索引不再更新且可以减少主分片数量的时间点。
  • 何时强制合并以永久删除标记为删除的文档。
  • 索引可以移动到性能较低的硬件的时间点。
  • 可用性不那么关键且可以减少副本数量的时间点。
  • 可以安全删除索引的时间点。

例如,如果正在将来自一系列ATM机的指标数据索引到Elasticsearch中,可以定义这样一个策略:

  • 当索引达到50GB时,滚动到新索引。
  • 将旧索引移入温阶段,将其标记为只读,并将其缩减为单个分片。
  • 7天后,将索引移入冷阶段并将其移至成本较低的硬件。
  • 在达到所需的30天保留期后删除索引。

1、ILM

ILM定义了四个索引生命周期阶段:

  • Hot(热):索引正在被积极更新和查询。
  • Warm(温):索引不再被更新但仍然被查询。
  • Cold(冷):索引不再被更新且很少被查询。信息仍然需要可被搜索,但如果这些查询稍微慢一些也没关系。
  • Delete(删除):索引不再需要并且可以安全地移除。

一个索引的生命周期策略指定了哪些阶段适用,每个阶段执行哪些操作,以及索引在不同阶段之间何时转换。

可以在创建索引时手动应用一个生命周期策略。对于时间序列索引,需要将生命周期策略与用于创建系列中新索引的索引模板相关联。当索引滚动时,手动应用的策略不会自动应用于新索引。

阶段转换

ILM根据索引的age将它们通过生命周期移动。为了控制这些转换的时间,你为每个阶段设置一个最小age。为了将索引移动到下一个阶段,当前阶段的所有操作必须完成,并且索引必须比下一个阶段的最小age更老。

最小age默认设置为零,这会导致ILM在当前阶段的所有操作完成后立即将索引移动到下一个阶段。

如果索引有未分配的分片且集群健康状态为黄色,索引仍然可以根据其索引生命周期管理策略转换到下一个阶段。然而,由于Elasticsearch只能在绿色集群上执行某些清理任务,因此可能会出现意外的副作用。

为了避免增加的磁盘使用和可靠性问题,请及时解决任何集群健康问题。

阶段执行

ILM 控制一个阶段中操作的执行顺序,以及执行每个操作所需的必要索引步骤。

当索引进入一个阶段时,ILM 会在索引元数据中缓存该阶段的定义。这确保了策略更新不会将索引置于无法退出该阶段的状态。如果更改可以安全地应用,ILM 会更新缓存的阶段定义。如果无法应用,则使用缓存的定义继续执行阶段。

ILM 会定期运行,检查索引是否符合策略标准,并执行所需的任何步骤。为了避免竞态条件,ILM 可能需要运行多次以执行完成一个操作所需的所有步骤。例如,如果 ILM 确定一个索引已达到滚动标准,它将开始执行完成滚动操作所需的步骤。如果它达到一个不能安全进入下一步的点,执行将停止。下次 ILM 运行时,它将从上次停止的地方继续执行。这意味着,即使将 indices.lifecycle.poll_interval 设置为 10 分钟,并且索引满足滚动标准,也可能需要 20 分钟才能完成滚动。

阶段操作

ILM 支持在每个阶段执行以下操作。

Hot(热)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 滚动 (Rollover)

Warm(温)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 只读 (Read-Only)
  • 分配 (Allocate)
  • 收缩 (Shrink)
  • 强制合并 (Force Merge)

Cold(冷)

  • 设置优先级 (Set Priority)
  • 取消跟踪 (Unfollow)
  • 分配 (Allocate)
  • 冻结 (Freeze)

Delete(删除)

  • 等待快照 (Wait For Snapshot)
  • 删除 (Delete)

1.2 索引生命周期操作

1、设置 索引生命周期

重点:这里delete指定的是当老的索引index超过rollver的时间,后的delete指定时间才被删掉。而不是索引的创建时间。

如果是索引按指定时间rollver,那删除时间就是rollver中的max_age+delete指定时间,才被删除。而索引按容量或者文档数量(max_size、max_docs)那么就小于 max_age+delete指定时间 就被删除。

官网对于删除的定义是:Delete the index 30d days after rollover.(30d是这里设置的删除时间)

总结来说就是:当这个索引不再写入数据(即创建新索引)开始算在delete设定时间后删除

1.3 索引生命周期管理

要使用 ILM 自动滚动更新和管理时间序列索引,您可以:
1.创建一个生命周期策略,定义适当的 阶段和行动。
2.创建索引模板以将策略应用于每个新索引。
3.引导索引作为初始写入索引。
4.验证索引是否按预期在生命周期阶段移动。

1、创建 生命周期策略

# 官方示例
PUT _ilm/policy/timeseries_policy
{"policy": {"phases": {"hot": {         # 默认值为 min_age,因此新索引会立即进入该阶段                 "actions": {"rollover": {    # 当满足任一条件时触发操作"max_size": "50GB",     "max_age": "30d"}}},"delete": {"min_age": "90d",           #  在展期后 90 天将指数移至阶段"actions": {"delete": {}                 }}}}
}## 实际使用
PUT _ilm/policy/openstack-log-30
{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {"rollover": {"max_age": "15d","max_primary_shard_size": "50gb"}}},"delete": {"min_age": "15d","actions": {"delete": {}}}}}
}## 查看是否创建成功
GET /_ilm/policy/openstack-log-30## 删除
DELETE /_ilm/policy/openstack-log-30

2、创建索引模板,模板中关联 policy

## 引用官方,实际示例在下面
PUT _index_template/timeseries_template
{"index_patterns": ["timeseries-*"],    # 如果模板的名称以 开头,则将模板应用于新索引。timeseries-     "template": {"settings": {"number_of_shards": 1,"number_of_replicas": 1,"index.lifecycle.name": "timeseries_policy",     # 要应用于每个新索引的生命周期策略的名称   "index.lifecycle.rollover_alias": "timeseries"     #  用于引用这些索引的别名的名称。 对于使用滚动更新操作的策略是必需的}}
}### 使用
PUT /_index_template/network-logs
{"index_patterns": ["network-logs"], "template": {"settings": {"index": {"number_of_replicas": 0,"lifecycle.name": "openstack-log-30", "lifecycle.rollover_alias": "network-logs"}}},"priority": 100, "version": 1 
}

3、创建符合模板的起始索引,设置别名(即我们统一对外提供服务的索引名)

#创建<index_name>索引,支持rollover的时候index名称附加年月日时分秒(将url及json里面的<index_name>替换为对应索引名)
PUT /%3C<index_name>-%7Bnow%2Fm%7Byyyy.MM.dd.HH.mm%7CAsia%2FShanghai%7D%7D-000001%3E
{"aliases":{"<index_name>":{"is_write_index":true}    }
}## 实际使用
PUT /%3Cpcsp_log_record-%7Bnow%2Fm%7Byyyy.MM.dd.HH.mm%7CAsia%2FShanghai%7D%7D-000001%3E
{"aliases":{"pcsp_log_record":{"is_write_index":true}    }
}

4、测试

按以上设置完成后就可以查看
测试插入数据:

POST /pcsp_log_record/_doc{ "name": "王者荣耀1", "age": 19, "address": "长沙岳麓山"}GET /my_cas_history_logs/_search

5、简易模式

# 1、创建生命周期策略,此时没有创建 rollover 操作
PUT _ilm/policy/openstack-log-30
{"policy": {"phases": {"hot": {"min_age": "0ms","actions": {}},"delete": {"min_age": "30d","actions": {"delete": {}}}}}
}# 2、创建索引模板,没有创建 lifecycle.rollover_alias
PUT /_index_template/network-logs
{"index_patterns": ["network-logs-*"], "template": {"settings": {"index": {"number_of_replicas": 0,"lifecycle.name": "openstack-log-30"}}},"priority": 100, "version": 1 
}# 3、可以直接创建索引验证
POST /network-logs-abcd/_doc
{"name": "test"
}

6、对已有索引添加生命周期策略

需要注意的是:对已有索引添加生命周期策略时,如果索引存在的时间已经超过了策略中的 min_age 定义的值,索引则会被删除。不过需要等一段时间。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 查看
GET /openstack-first-prodution-10.0.31.10-2024.06/_ilm/explain
### 输出如下:
{"indices" : {"openstack-first-prodution-10.0.31.10-2024.06" : {"index" : "openstack-first-prodution-10.0.31.10-2024.06","managed" : true,"policy" : "openstack-log-30", ### 策略"index_creation_date_millis" : 1717294821838,"time_since_index_creation" : "3.25d",    # 索引创建多久了"lifecycle_date_millis" : 1717294821838,"age" : "3.25d","phase" : "hot",    # 所处的阶段"phase_time_millis" : 1717575620273,"action" : "complete","action_time_millis" : 1717575620073,"step" : "complete","step_time_millis" : 1717575620273,"phase_execution" : {"policy" : "openstack-log-30","phase_definition" : {"min_age" : "0ms","actions" : { }},"version" : 2,"modified_date_in_millis" : 1717573130448}}}
}## 下面是另一个索引,索引创建时间超过 生命周期策略中的 min_age
GET /network-logs-2024.01.01/_ilm/explain
#### 输出
{"indices" : {"network-logs-2024.01.01" : {"index" : "network-logs-2024.01.01","managed" : true,"policy" : "openstack-log-30","index_creation_date_millis" : 1704067209059,"time_since_index_creation" : "156.34d","lifecycle_date_millis" : 1704067209059,"age" : "156.34d","phase" : "delete",    # 处于delete阶段"phase_time_millis" : 1717575805167,"action" : "delete","action_time_millis" : 1717575805167,"step" : "wait-for-shard-history-leases","step_time_millis" : 1717575805167,"phase_execution" : {"policy" : "openstack-log-30","phase_definition" : {"min_age" : "30d","actions" : {"delete" : {"delete_searchable_snapshot" : true}}},"version" : 2,"modified_date_in_millis" : 1717573130448}}}
}

这篇关于Elastic Search(五):索引生命周期管理 - ilm的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126549

相关文章

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖