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

相关文章

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

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

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

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

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

NGINX轻松管理10万长连接 --- 基于2GB内存的CentOS 6.5 x86-64

转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=190176&id=4234854 一 前言 当管理大量连接时,特别是只有少量活跃连接,NGINX有比较好的CPU和RAM利用率,如今是多终端保持在线的时代,更能让NGINX发挥这个优点。本文做一个简单测试,NGINX在一个普通PC虚拟机上维护100k的HTTP

PMBOK® 第六版 规划进度管理

目录 读后感—PMBOK第六版 目录 规划进度管理主要关注为整个项目期间的进度管理提供指南和方向。以下是两个案例,展示了进度管理中的复杂性和潜在的冲突: 案例一:近期,一个长期合作的客户因政策要求,急需我们为多家医院升级一个小功能。在这个过程中出现了三个主要问题: 在双方确认接口协议后,客户私自修改接口并未通知我们,直到催进度时才发现这个问题关于UI设计的部分,后台开发人员未将其传递给