根据索引策略对elasticsearch中的索引进行管理(附带图文教程)

news2025/1/10 22:27:40

前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。
作者:神的孩子都在歌唱

一. 索引生命周期简介

想要了解更多可以看 : 索引生命周期

1.1 索引生命周期五种阶段

(1)Hot:正在积极更新和查询索引。

(2)Warm:索引不再更新,但仍在查询中。

(3)Cold:索引不再更新,很少被查询。信息仍然需要可搜索,但如果查询速度较慢。

(4)Frozen: 索引不再更新并且是查询操作很少。信息还需要可搜索的,但查询速度较慢。

(5)Delete:不再需要索引,可以安全地删除。

1.2 阶段如何执行

ILM 控制每个阶段中策略的执行顺序

官方解释:

  1. 当索引进入某个阶段时,ILM 会在索引元数据中缓存阶段定义。这避免策略更新的时候影响到索引变成永远无法退出该阶段的状态。如果可以安全地应用更改,ILM 会更新缓存的阶段定义。如果不能,阶段执行将继续使用缓存的定义

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

我的理解:

  1. 索引中会缓存下当前阶段定义的策略,如果更新策略,并且索引恰好到达了该阶段,那么当前索引就不会使用最新的策略。
  2. ILM是定期运行的,默认10分钟执行一次的,我们可以通过indices.lifecycle.poll_interval去设置他的时间,如果在执行的过程中某个阶段受到阻碍,就会停止运行,下次执行时候才会从停止处继续执行。所以ILM完整的执行一次可能需要20分钟或者更多。

二. 需求和问题

您可以配置索引生命周期管理 (ILM) 策略,以根据您的性能、弹性和保留要求自动管理索引。

问题:

  • 我们在使用es存储数据的时候,随着时间推移,数据量比较久远的数据就想删除掉,因此我们就想要定期的清除这些历史数据,所以我们可以通过es的策略去管理索引的生命周期。

需求:

  • 当索引达到100kb时启动新索引
  • 删除满足上面条件并且过了1小时后的旧索引

Elasticsearch 有这些内置 ILM 策略:logs ,metrics,synthetics

我做了以下设计:

image-20240307105728834

三. 使用别名去管理索引

使用索引别名来管理索引并定期rollover到新索引。

image-20240307110349259

3.1 创建生命周期策略

关于策略的api操作

生命周期策略用来指定索引生命周期每个阶段要执行的操作。

根据我上面的需求创建以下策略

PUT _ilm/policy/test_policy
{
  "policy": {
    "phases": {
      "hot": {                                
        "actions": {
          "rollover": {
            "max_primary_shard_size": "100kb", 
          }
        }
      },
      "delete": {
        "min_age": "1h",                     
        "actions": {
          "delete": {}                        
        }
      }
    }
  }
}

查看创建的策略

GET _ilm/policy/test_policy

image-20240305135154535

3.2 创建索引模板

我们需要在移动到新索引(rollover)时候自动将生命周期策略应用到新的索引 上,需要在创建新索引索引模板指定策略

如下,我创建了一个test_template模板,并应用到名称用 test- 开头的新索引。

为了启用自动翻转,模板配置了两个 ILM 设置:

  • index.lifecycle.name:指定生命周期策略的名称。
  • index.lifecycle.rollover_alias:指定索引的别名。
PUT _index_template/test_template
{
  "template": {
    "settings": {
      "number_of_shards": 1, 
      "number_of_replicas": 1,
      "index.lifecycle.name": "test_policy",  // 应用到每个新索引的生命周期策略的名称。
      "index.lifecycle.rollover_alias": "test"  // 用于引用这些索引的别名的名称。使用移动操作的策略是必需的。
    }
  },
  "index_patterns": [
    "test-*"  // 如果新索引的名称以 test- 开头,则将模板应用到新索引。
  ]
}

查看创建的模板

GET /_index_template/test_template

image-20240305140516878

3.3 创建一个带有数字结尾索引

如下,创建一个名为 的索引test-000001 ,将 test-000001 索引指定为别名test的写入索引。

注意:该索引的名称必须与模板的索引模式匹配并以数字结尾,满足策略的条件后,该值会增加1变成 test-000002 索引 。

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

image-20240226105836993

当满足翻转条件后:

  • 创建一个名为 test-000002 的新索引。这与test-*模式匹配,因此设置test_template将应用于test-000002
  • test-000002 新索引指定为写入索引并使test-000001索引变为只读

每次满足策略的条件时都会重复此过程。

四. 测试

4.1 当索引达到100kb时启动新索引

我们往里面添加文档

PUT  /test/_bulk?refresh
{"index":{}}
{"name": "小狗", "leg": 4, "iswing": false}
{"index":{}}
{"name": "小鸡", "leg": 2, "iswing": true}
{"index":{}}
{"name": "小猫", "leg": 4, "iswing": false}

满足条件后,我们可以通过别名去查看对应的索引

GET _alias/test

image-20240305143916288

通过查询的结果可以发现,他已经自己创建了新索引test-000002

4.2 删除过了1小时后的索引以执行数据保留标准

过了一小时后,索引test-000001就被删除了

image-20240305150927590

注意:索引生命周期管理(ILM)中有个设置是**indices.lifecycle.poll_interval** ,这是 ILM 检查 索引是否满足策略标准 的频率,默认为十分钟。所以ILM每十分钟才会去检查索引是否符合策略标准,比如我们设定超过100kb就rollover,但是这个过程不是立即实现的。

作者:神的孩子都在歌唱
本人博客:https://blog.csdn.net/weixin_46654114
转载说明:务必注明来源,附带本人博客连接。

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

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

相关文章

C++开发基础——类模板

一,基础定义 类模板是用来生成类的蓝图,是一种创建类的方式,同一套类模板可以生成很多种不同的类。 编译器基于类模板生成的每个类被称为类模板的实例。 第一次使用模板类型声明变量时,会创建类模板的一个实例, 以后…

YOLOv5改进 | 注意力篇 | 利用YOLO-Face提出的SEAM注意力机制优化物体遮挡检测(附代码 + 修改教程)

一、本文介绍 本文给大家带来的改进机制是由YOLO-Face提出能够改善物体遮挡检测的注意力机制SEAM,SEAM(Spatially Enhanced Attention Module)注意力网络模块旨在补偿被遮挡面部的响应损失,通过增强未遮挡面部的响应来实现这一目…

el-Switch 开关二次确认

前言 最近在做毕设,有个需求是点击按钮控制用户的状态是否禁用,就看到element有个switch组件可以改造一下,就上网看了一下,结果为了这个效果忙活了很久。。。所以说记录一下,让大家少踩坑。 前置条件 先看完我的需求再…

Eclipse安装springboot

Eclipse免费,套件丰富,代码开源,功能强大…推荐! 1 下载eclipse: https://www.eclipse.org/downloads/download.php?file/technology/epp/downloads/release/2023-12/R/eclipse-jee-2023-12-R-win32-x86_64.zip 2 安装Spring框…

图论(蓝桥杯 C++ 题目 代码 注解)

目录 迪杰斯特拉模板(用来求一个点出发到其它点的最短距离): 克鲁斯卡尔模板(用来求最小生成树): 题目一(蓝桥王国): 题目二(随机数据下的最短路径&#…

Hadoop学习2:完全分布集群搭建

文章目录 Fully-Distributed Operation(完全分布模式) 重点机器环境同步集群规划配置文件修改以及同步步骤0:下面其他步骤涉及修改配置以这里为准(要不然部署使用过程会有很多问题)通用配置(三台节点机器&a…

社交革命的引领者:探索Facebook如何改变我们的生活方式

1.数字社交的兴起 随着互联网的普及,社交媒体成为我们日常生活的重要组成部分。Facebook作为其中的先驱,从最初的社交网络演变成了一个拥有数十亿用户的全球化平台。它不仅改变了我们与世界互动的方式,还深刻影响了我们的社交习惯、人际关系以…

华为机考:HJ102 字符统计

华为机考&#xff1a;HJ102 字符统计 描述 方法1 先将所有字符计算数量&#xff0c;在对比其中字符的assic码 #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; bool cmp(pair<char, int> a,…

C++ std::list的merge()使用与分析

看到《C标准库第2版》对list::merge()的相关介绍&#xff0c;令我有点迷糊&#xff0c;特意敲代码验了一下不同情况的调用结果。 《C标准库第2版》对list::merge()的相关介绍 list::merge()定义 merge()的作用就是将两个list合并在一起&#xff0c;函数有2个版本&#xff1a;…

数字图像处理-空间滤波

空间滤波 空域滤波基础 – 离散卷积的边缘效应 平滑空间滤波器 # -*- coding: utf-8 -*- # Author: Huazhong Yang # Email: cjdxyhz163.com # Time : 2024/3/7 20:26import cv2 import numpy as np# 读取图像 image cv2.imread(a1.png)# 应用高斯滤波 # 第二个参数是高斯…

微信小程序开发系列(三十)·小程序本地存储API·同步和异步的区别

目录 1. 同步API 1.1 getStorageSync存储API 1.2 removeStorageSync获取数据API 1.3 removeStorageSync删除 1.4 clearStorageSync清空 2. 异步API 2.1 setStorage存储API 2.2 getStorage获取数据API 2.3 removeStorage删除API 2.4 clearStorage清空 3. …

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码

理解字符编码&#xff0c;请参考&#xff1a;unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 汉字&#xff08;或者说多字节字符&#xff09;的存放需求&#xff0c;是计算机中各种编码问题的最直接原因。如果程序不直接使用汉字&#xff0c;或间接在所有操作步骤中统一使…

Hilt

1.使用Hilt实现快速依赖注入 1.1 导入依赖 //hilt依赖//Hiltimplementation("com.google.dagger:hilt-android:2.44")annotationProcessor("com.google.dagger:hilt-android-compiler:2.44")1.2 在build.gradle(app)中加入插件 plugins {id("com.an…

大规模自动化重构框架--OpenRewrite浅析

目录 1. OpenRewrite是什么&#xff1f;定位&#xff1f; 2. OpenWrite具体如何做&#xff1f; 3. 核心概念释义 3.1 Lossless Semantic Trees (LST) 无损语义树 3.2 访问器&#xff08;Visitors&#xff09; 3.3 配方&#xff08;Recipes&#xff09; 4. 参考链接 Open…

SpringBlade error/list SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 框架后台 /api/blade-log/error/list路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数…

Redis应用缓存

目录 前言 关于“二八定律” 使用Redis作为缓存 为什么关系型数据库性能不高 为什么并发量高了就容易宕机 Redis就是一个用来作为数据库缓存的常见方案 缓存更新策略 定期生成 搜索引擎为例 实时生成 淘汰策略 FIFO(First In First Out) 先进先出 lRU(Least …

106. Dockerfile通过多阶段构建减小Golang镜像的大小

我们如何通过引入具有多阶段构建过程的Dockerfiles来减小Golang镜像的大小&#xff1f; 让我们从一个通用的Dockerfile开始&#xff0c;它负责处理基本的事务&#xff0c;如依赖项、构建二进制文件、声明暴露的端口等&#xff0c;以便为Go中的一个非常基础的REST API提供服务。…

YoloV8实战:YoloV8-World应用实战案例

摘要 YOLO-World模型确实是一个突破性的创新&#xff0c;它结合了YOLOv8框架的实时性能与开放式词汇检测的能力&#xff0c;为众多视觉应用提供了前所未有的解决方案。以下是对YOLO-World模型的进一步解读&#xff1a; 模型架构与功能 YOLO-World模型充分利用了YOLOv8框架的…

剑指offer面试题34:在二叉树中和为某一值的路径

面试题34&#xff1a;在二叉树中和为某一值的路径 题目&#xff1a; LCR 153. 二叉树中和为目标值的路径 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路…

C语言 - 各种自定义数据类型

1.结构体 把不同类型的数据组合成一个整体 所占内存长度是各成员所占内存的总和 typedef struct XXX { int a; char b; }txxx; txxx data; typedef struct XXX { int a:1; int b:1; …