【ES实战】索引生命周期管理(一)

news2025/4/13 1:09:08

索引生命周期管理ILM(index lifecycle management)

在这里插入图片描述

文章目录

  • 索引生命周期管理ILM(index lifecycle management)
    • 概述
      • 版本矩阵
    • 主要概念
        • 索引生命周期
          • 阶段的过渡
          • 阶段的执行
        • 生命周期中的操作
        • 生命周期策略
        • 索引翻滚
          • 自动翻转
    • 生命周期策略配置
      • 策略API
        • 创建或者更新策略
        • 查询策略
        • 移除策略
        • 删除策略
      • 应用策略
        • 将策略应用到索引模板
          • 创建一个初始管理的索引
        • 手动应用生命周期策略
      • 更改策略
      • 更改是如何应用的
      • 如何应用新策略

概述

索引生命周期管理(ILM)API使你能够自动处理你希望随着时间推移管理索引的方式。你可以根据其他因素(如分片大小、性能要求、弹性、数据保存时长)来采取行动,而不是简单地按照设定的时间表对你的索引进行管理行动。

你可以通过将生命周期策略附加到用于创建索引的模板上,来控制如何处理过时的索引。你可以更新该策略,以修改新的和现有的索引的生命周期。

生命周期策略管理着索引如何在这些阶段过渡,以及在每个阶段对索引进行的操作。该策略可以指定。

  • 你想翻转到一个新索引的最大存储或时限。
  • 索引不再被更新的时间点,主分片的数量可以减少。
  • 当强制合并以永久删除标明要删除的文件的时候。
  • 索引可以被转移到性能较差的硬件上的时机。
  • 可用性不那么关键的时候,可以减少副本分片的数量。
  • 索引可以被安全删除的时机。

例如,如果你在Elasticsearch中索引来自ATM的指标数据,你可以定义一个策略说。

  • 当索引达到50GB时,翻转到一个新的索引。
  • 将旧的索引移到温暖阶段,标记为只读,并将其缩减为一个分片。
  • 7天后,将该索引移到冷阶段,并将其移到较便宜的硬件上。
  • 一旦达到规定的30天保留期,就删除该索引。

索引生命周期管理不支持混合版本的集群使用。尽管有可能针对较新版本的节点创建这样的新策略,但不能保证它们能按预期工作。使用不存在于最旧版本的节点中的新动作的新策略将导致错误。

版本矩阵

关键版本号说明
6.6此版本的生命周期管理是实验功能
6.7-7.10此期间版本的生命周期管理是X-pack模式下的
7.11从此版本开始生命周期管理功能开始免费,并入数据管理下。
7.12生命周期阶段增加Frozen阶段

主要概念

索引生命周期

将索引分为5个阶段(版本7.12之前为4个阶段)

  1. Hot:索引正在频繁地被更新和查询。
  2. Warm:索引不再被更新,但仍然被查询。
  3. Cold:索引不再被更新,并且不经常被查询。这些信息仍然需要被搜索,但是如果这些查询比较慢也没关系。
  4. Frozen:该索引不再被更新,并且很少被查询。这些信息仍然需要可以被搜索到,但是如果这些查询非常慢也没关系。–7.12时新增的阶段
  5. Delete:索引不再需要了,可以安全地被删除。
阶段的过渡

ILM根据索引的时长在生命周期中移动指数。为了控制这些转换的时间,你为每个阶段设置一个最小时限。要使一个索引进入下一阶段,当前阶段的所有操作必须完成,并且该索引必须比下一阶段的最小年龄大。配置的最小时限必须在后续阶段之间增加,例如,一个最小时限为10天的 "Warm"阶段之后,只能是一个最小时限未设定或>=10天的 "Cold"阶段。

最小年龄默认为0,这使得ILM在当前阶段的所有操作完成后,立即将指数转移到下一个阶段。

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

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

阶段的执行

ILM控制一个阶段中的行动的执行顺序,以及执行哪些步骤来为每个行动执行必要的索引操作。

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

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

生命周期中的操作

  1. Set Priority
  2. Unfollow
  3. Rollover
  4. Read-Only
  5. Shrink
  6. Force Merge
  7. Searchable Snapshot
  8. Downsample
  9. Allocate
  10. Migrate
  11. Wait For Snapshot
  12. Delete

ILM在每个阶段都支持以下操作。ILM按照列出的顺序执行这些操作。

HOTWarmColdFrozenDelete
Set Priority
Unfollow
Rollover
Read-Only
Shrink
Force Merge
Searchable Snapshot
Downsample
Allocate
Migrate
Wait For Snapshot
Delete

生命周期策略

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

当你创建一个索引时,你可以手动应用一个生命周期策略。对于时间序列索引,你需要将生命周期策略与用于在该系列中创建新索引的索引模板联系起来。当一个索引翻转时,手动应用的策略不会自动应用到新的索引上。

如果你使用Elasticsearch的安全功能,ILM会以最后更新策略的用户身份执行操作。ILM只拥有在最后一次策略更新时分配给用户的角色。

索引翻滚

当对像日志或指标这样的时间序列数据进行索引时,你不能无限期地写到一个索引。为了满足你的索引和搜索性能要求并管理资源的使用,你向一个索引写入,直到达到某个阈值,然后创建一个新的索引并开始向它写入。使用滚动索引使你能够。

  • 优化活动索引,以便在高性能的节点上实现高摄入率。
  • 优化节点上的搜索性能。
  • 将旧的、不经常访问的数据转移到成本较低的节点上。
  • 根据你的保留政策,通过删除整个索引来删除数据。

我们建议使用data streams来管理时间序列数据。数据流自动跟踪写索引,同时将配置保持在最低水平。

每个数据流需要一个索引模板,其中包含。

  • 数据流的名称或通配符(*)模式。
  • 数据流的时间戳字段。这个字段必须被映射为datedate_nanos字段的数据类型,并且必须包含在每个索引到数据流的文档中。
  • 创建时应用于每个支持索引的映射和设置。

数据流是为仅有的附加数据而设计的,数据流名称可以作为操作(读、写、翻转、收缩等)目标。如果你的用例要求数据就地更新,你可以改用index aliases管理你的时间序列数据。然而,还有一些配置步骤和概念。

  • 一个索引模板,指定了系列中每个新索引的设置。你要优化这个配置,以便摄取,通常使用与你有热节点一样多的分片。
  • 一个索引别名,引用整个索引集。
  • 一个被指定为写索引的单一索引。这是处理所有写入请求的活动索引。在每次翻转时,新的索引会成为写入索引。
自动翻转

ILM使你能够根据索引大小、文件数或年龄等条件,自动翻转到一个新的索引。当翻转被触发时,一个新的索引被创建,写别名被更新以指向新的索引,并且所有后续的更新都被写入新的索引中。

基于大小、文档数量或时长的翻转到一个新的索引比基于时间的翻转更可取。在一个任意的时间翻转往往会导致许多小的索引,这可能会对性能和资源的使用产生负面影响。

生命周期策略配置

为了让ILM管理一个索引,必须在index.lifecycle.name索引设置中指定一个有效的策略。

要为滚动索引配置一个生命周期策略,你要创建策略并将其添加到索引模板中。

要使用策略来管理一个不滚动的索引,你可以在创建索引时指定一个生命周期策略,或者直接将策略应用到一个现有的索引。

ILM策略被存储在全局集群状态中,并且可以通过在拍摄快照时将include_global_state设置为true来包含在快照中。当快照被恢复时,全局状态下的所有策略被恢复,任何具有相同名称的本地策略被覆盖。

当你为Beats或Logstash Elasticsearch输出插件启用索引生命周期管理时,必要的策略和配置变化会自动应用。你可以修改默认策略,但你不需要明确配置策略或引导初始索引。

策略API

创建或者更新策略

新建一个名称为policy_1的策略。

PUT _ilm/policy/policy_1
{
  "policy": {
    "_meta": {
      "description": "主要使用说明",
      "project": {
        "name": "系统或项目名称",
        "department": "所属部门"
      }
    },
    "phases": {
      "warm": {
        "min_age": "10d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  • _meta参数是可选的,Elasticsearch不会自动生成或使用。要取消_meta,请替换策略,不要指定一个。要检查_meta,你可以使用Get lifecycle policy API。从版本7.14开始明确支持此参数。

查询策略

# 查询所有的策略
GET _ilm/policy
# 查询名称为policy_1的策略
PUT _ilm/policy/policy_1

结果

{
  "policy_1": {
    "version": 1, 
    "modified_date": 82392349, 
    "policy": {
      "phases": {
        "warm": {
          "min_age": "10d",
          "actions": {
            "forcemerge": {
              "max_num_segments": 1
            }
          }
        },
        "delete": {
          "min_age": "30d",
          "actions": {
            "delete": {
              "delete_searchable_snapshot": true
            }
          }
        }
      }
    },
    "in_use_by" : { 
      "indices" : [],
      "data_streams" : [],
      "composable_templates" : []
    }
  }
}
  • version代表策略的版本号
  • in_use_by,代表策略应用到哪些地方了。从版本7.14开始明确支持此参数。

移除策略

POST my-index-000001/_ilm/remove

删除策略

DELETE _ilm/policy/policy_1

应用策略

将策略应用到索引模板

PUT _index_template/my_template
{
  "index_patterns": ["test-*"], 
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1,
      "index.lifecycle.name": "my_policy", 
      "index.lifecycle.rollover_alias": "test-alias" 
    }
  }
}
  • index.lifecycle.rollover_alias:定义一个索引别名,用于引用my_policy管理的索引。
创建一个初始管理的索引

当你为自己的滚动索引设置策略时,你需要手动创建第一个由策略管理的索引,并将其指定为写索引。

索引的名称必须符合索引模板中定义的模式,并以数字结尾。这个数字会被递增,以生成由滚动动作创建的索引的名称。

例如,下面这个请求创建了test-00001索引。因为它与my_template中指定的索引模式相匹配,Elasticsearch自动应用该模板中的设置。

PUT test-000001
{
  "aliases": {
    "test-alias":{
      "is_write_index": true 
    }
  }
}

现在你可以开始向生命周期策略中指定的滚动别名索引数据了。在my_policy策略样本中,一旦初始索引超过25GB,就会触发翻转动作。然后ILM创建一个新的索引,成为测试别名的写索引。

手动应用生命周期策略

不要手动应用使用翻转动作的策略。使用翻转的策略必须由索引模板应用。否则,当翻转动作创建一个新的索引时,该策略不会被转发。

创建式

PUT test-index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "my_policy" 
  }
}

更新式

PUT mylogs-pre-ilm*/_settings 
{
  "index": {
    "lifecycle": {
      "name": "mylogs_policy_existing"
    }
  }
}

更改策略

你可以通过修改当前策略或切换到不同的策略来改变索引或滚动索引集合的生命周期的管理方式。

为了确保策略更新不会使索引进入不能退出当前阶段的状态,当它进入阶段时,阶段定义被缓存在索引元数据中。如果变化可以被安全地应用,ILM会更新缓存的阶段定义。如果不能,则使用缓存的定义继续执行阶段。

当索引进入下一个阶段时,它使用更新后的策略中的阶段定义。

要切换一个索引的生命周期策略,请遵循这些步骤:

  1. 使用移除策略API移除现有策略。针对一个数据流或别名,删除其所有索引的策略。

    POST logs-my_app-default/_ilm/remove
    
  2. 删除策略API会从索引中删除所有ILM元数据,并且不考虑索引的生命周期状态。这可能会使索引处于一个不希望的状态。

    例如,Forcemerge动作在重新打开一个索引之前暂时关闭了它。在forcemerge过程中移除索引的ILM策略会使索引无限期地关闭。

    在策略移除之后,使用get index API来检查一个索引的状态。以一个数据流或别名为目标,获取其所有索引的状态。

    GET logs-my_app-default
    

    然后你可以根据需要改变索引。例如,你可以使用打开索引API重新打开任何关闭的索引。

    POST logs-my_app-default/_open
    
  3. 使用更新设置API分配一个新的策略。以一个数据流或别名为目标,为其所有索引分配一个策略。

    PUT logs-my_app-default/_settings
    {
      "index": {
        "lifecycle": {
          "name": "new-lifecycle-policy"
        }
      }
    }
    

    不要在没有删除现有策略的情况下分配一个新的策略。这可能导致阶段性执行失败。

更改是如何应用的

当一个策略最初应用于一个索引时,该索引会得到该策略的最新版本。如果你更新策略,策略的版本会被撞开,ILM可以检测到索引正在使用一个需要更新的早期版本。

min_age的改变不会传播到缓存的定义。改变一个阶段的min_age不会影响当前正在执行该阶段的索引。

例如,如果你创建的策略有一个热阶段,但没有指定min_age,当策略被应用时,指数立即进入热阶段。如果你更新策略,指定热阶段的 "最小时限"为1天,这对已经处于热阶段的指数没有影响。在政策更新后创建的指数直到一天后才会进入热阶段。

如何应用新策略

当你将不同的策略应用于被管理的索引时,该索引使用先前策略的缓存定义完成当前阶段的工作。当索引进入下一阶段时,它开始使用新的策略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AzureRT:一款能够实现各种Azure红队技战术的PowerShell模块

关于AzureRT AzureRT是一款能够实现各种Azure红队技战术的PowerShell模块,在AzureRT的帮助下,广大研究人员可以从攻击者的角度来与Azure和Azure AD进行交互,以此来测试目标环境的安全性。 AzureRT可以帮助广大研究人员测试和处理基于访问令…

【工具】操作PDF推荐的java依赖

Apache PDFBox |一个 Java PDF 库 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>2.0.27</version></dependency> Apache PDFBox - A Java PDF Library Apache PDFBox 库…

超详解线段树(浅显易懂)

一&#xff0c;什么是线段树&#xff1f;线段树是怎样的树形结构?线段树是一种二叉搜索树&#xff0c;而二叉搜索树&#xff0c;首先满足二叉树&#xff0c;即每个结点最多有两颗子树&#xff0c;并且是一颗搜索树&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了…

用于在过程工业中参数化配置现场设备的移动式解决方案

EndressHauser提供了一个组合套件&#xff08;包含Field Xpert和Softing的mobiLink通信工具&#xff09;&#xff0c;可用于参数化配置和现场调试。 &#xff08;将Softing的mobiLink通信工具与EndressHauser的Field Xpert SMT70或SMT77平板电脑相结合使用&#xff0c;可为用户…

再见 Matplotlib 和 Seaborn ,Python 画图建议用这个

本文主要介绍 Python 中用来替代 Matplotlib 和 Seaborn 的可视化工具 plotly&#xff0c;并结合实例讲解了 plotly 的优点和用法&#xff0c;满足了可视化绘图的交互需求。 数据可视化是人脑有效理解各种信息的最舒适、最直观的方式。对于需要处理数据的人来说&#xff0c;能…

谈思生物直播课|辛格迪副总裁“细胞治疗数字化解决方案”

近年来&#xff0c;细胞基因治疗在全球范围内得到了快速的发展。因为细胞基因治疗药物的特殊性&#xff08;从人体中采得活细胞&#xff0c;经过特别的处理技术后再输入人体&#xff09;&#xff0c;其安全性也被监管机构和药企高度关注&#xff1b;同时&#xff0c;也由于其制…

Laravel笔记-使用composer搭建Laravel环境(开发工具phpStorm)

以前写过一个&#xff0c;但没这个composer直接搭建的方便。在此记录下。 使用国内的 Composer 加速镜像 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 新建一个名为MyRestfulTest的项目&#xff1a; composer create-project larave…

测试go test

目录go test工具单元测试测试代码go test -run跳过某些测试用例子测试表格驱动测试并行测试报告方法测试覆盖率基准测试demo性能比较函数计时方法并行测试TestMainSetup与Teardownhttptest简单的 Web 应用测试Go 语言从开发初期就注意了测试用例的编写。特别是静态语言&#xf…

【java入门系列六】java基础-面向对象进阶**

学习记录&#x1f914;IDE快捷键包访问修饰符封装结合构造器进行封装继承-代码的复用性继承的构造器继承的本质super关键字方法的重写override多态**难点多态trickinstanceof动态绑定**多态数组多态参数object类trickObject类创建对象流程讨论总结谢谢点赞交流&#xff01;(❁◡…

MDK的格式化代码工具及添加快捷方式

文章目录Astyle介绍插件安装参数设置格式化整个工程参数说明快捷键设置参考Astyle介绍 Astyle 即Artistic Style&#xff0c;是一个可用于C, C, C/CLI, Objective‑C, C# 和Java编程语言格式化开源工具。 官网&#xff1a;Artistic Style - Index 插件安装 不用安装&#xf…

年前花2个月面过阿里测开岗,拿个27K也不过分吧?

背景介绍 美本计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实…

23.1.29 make menuconfig执行过程

1、将uboot源码拷贝ubuntu中 1.在家目录创建一 -个demo文件夹 2.将en. SOURCES - stm32mp1- openstlinux-5.10- dunfell- mp1-21- 11-17_ tar_ v3.1.0. xz文件夹拷贝到~/ demo文件夹下面 3.进入~/demo目录下&#xff0c;对en . SOURCES- stm32mp1 - openstlinux-5. 10- dunfell…

第02天-Java数据结构和算法

目录 021_单链表新浪面试题 单链表面试题&#xff08;新浪、百度、腾讯&#xff09; 代码实现 022_单链表腾讯面试题 图解 代码实现 023_单链表百度面试题 图解 代码实现 024_双向链表增删改查分析图解 双向链表应用实例 图解 代码实现 026_双向链表功能测试和小结 …

10个方法教你解决虚幻4运行崩溃问题

“多年来我一直在我的电脑上使用不同版本的虚幻引擎 4&#xff0c;但最近它突然在启动时崩溃。我最初认为这是一个项目相关的问题&#xff0c;但后来注意到即使是从桌面图标或 Epic Games Launcher执行Unreal Engine 4&#xff0c;也是闪了几秒就直接闪退了。这个问题真是让我很…

Nginx从入门到精通(从安装到实践,持续更新中)

一&#xff0c;安装从官网下载相应的tar包http://nginx.org/通过命令tar zxvf tar包名 -c 解压路径 解压到指定的目录下在解压的nginx包下有一个confuture文件&#xff0c;可通过./confuture判断是否符合安装条件&#xff08;./configure --prefix/usr/local/nginx即可指定一会…

H3CMSR 系列路由器限速配置

1 配置需求或说明 1.1 适用产品系列 本手册适用于如下产品&#xff1a;MSR 全系列路由器 1.2 配置需求及实现的效果 MSR路由器G0/0接口连接公网&#xff0c;G0/1接口连接内网&#xff0c;内网网关地址为MSR路由器VLAN1虚接口地址192.168.1.1/24&#xff0c;需要实现对内网I…

1605_Git版本管理概念图解_git_for_computer_scientists阅读

全部学习汇总&#xff1a; GitHub - GreyZhang/g_unix: some basic learning about unix operating system. 目前没有很好的笔记分类放置这一份学习笔记&#xff0c;因为我的工具箱分类并不适合它。我之前的工具箱笔记主要还是简洁扼要来列出工具使用的参考&#xff0c;而这个其…

超导量子计算机

1.超导量子计算机发展状况 2018年3月5日美国物理学会年会上&#xff0c;谷歌展示了其正在测试的72量子位超导量子芯片Bristlecone。谷歌物理学家朱利安凯利表示&#xff0c;研讨团队希望初次运用更大的量子芯片来展现霸权&#xff0c;并完成传统计算机不能够完成的计算。芯片之…

React学习教程

React学习教程git地址React基础知识点1.什么是React &#xff08;★★★&#xff09;特点2.React脚手架2.1 使用React脚手架初始化项目2.2 项目目录说明调整JSX基础1. JSX介绍2. JSX中使用js表达式3. JSX列表渲染4. JSX条件渲染5. JSX样式处理6. JSX注意事项React组件1.React组…

监控系统的基本架构(Metric monitoring)

前言 最近准备做一个监控系统&#xff0c;正好看到了这篇文章&#xff0c;这篇文章很简单&#xff0c;但很清晰&#xff0c;结合原文的图片&#xff0c;我进行一下翻译。 原文地址 ByteByteGo 原文 A well-designed metric monitoring and alerting system plays a key rol…