【Elasticsearch】Rollover 操作与Skip Rollover

news/2025/3/6 19:37:21/

Elasticsearch 的 Rollover 操作是索引生命周期管理(ILM)中的一个重要功能,用于在索引达到预设条件时自动将写入操作切换到一个新的索引,从而避免单个索引变得过大或过旧,影响性能和管理效率。

Rollover 操作的核心概念

1. 滚动条件(Rollover Conditions)

Rollover 操作基于预设的条件触发,这些条件可以包括:

• `max_age`:索引的年龄达到指定时间(如 30 天)。

• `max_size`:索引的大小达到指定值(如 50GB)。

• `max_docs`:索引中的文档数量达到指定值(如 1 亿个文档)。

• `max_primary_shard_size`和`max_primary_shard_docs`:主分片的大小或文档数量达到指定值。

2. 滚动目标(Rollover Target)

Rollover 的目标可以是一个数据流(Data Stream)或索引别名(Index Alias)。当目标是别名时,需要满足特定的命名规则(如`my-index-000001`),并且必须配置`index.lifecycle.rollover_alias`。

3. 滚动行为(Rollover Behavior)

满足条件时,Elasticsearch 会自动创建一个新索引(如`my-index-000002`),并将别名指向新索引。旧索引保留,但不再接收新的写入操作。

配置 Rollover 操作

1.创建生命周期策略(ILM Policy)

定义索引的生命周期规则,包括滚动条件。例如:

```json

PUT _ilm/policy/my_policy

{

  "policy": {

    "phases": {

      "hot": {

        "actions": {

          "rollover": {

            "max_size": "50GB",

            "max_age": "30d",

            "max_docs": 100000000

          }

        }

      }

    }

  }

}

```

在这个策略中,索引会在大小达到 50GB、年龄达到 30 天或文档数量达到 1 亿时触发滚动。

2.创建索引模板(Index Template)

将生命周期策略应用到新索引,并定义滚动时使用的别名:

```json

PUT _index_template/my_template

{

  "index_patterns": ["my_index-*"],

  "template": {

    "settings": {

      "index.lifecycle.name": "my_policy",

      "index.lifecycle.rollover_alias": "my_index"

    }

  }

}

```

这个模板确保所有匹配`my_index-*`的索引都会使用`my_policy`策略。

3.创建初始索引

手动创建第一个索引,并将其标记为写入索引:

```json

PUT my_index-000001

{

  "aliases": {

    "my_index": {

      "is_write_index": true

    }

  }

}

```

这个初始索引将作为滚动操作的起点。

Rollover 的优势

1. 优化性能:通过限制索引大小和文档数量,避免单个索引变得过大,从而影响查询性能。

2. 节省资源:通过自动滚动和删除旧索引,合理管理存储资源。

3. 简化管理:通过生命周期策略,自动化索引的滚动和清理过程。

注意事项

• 默认情况下,空索引不会触发滚动,除非显式配置`min_docs: 0`。

• 滚动操作完成后,索引的年龄会更新为滚动时间,而不是原始创建时间。

• 滚动操作可以手动触发,也可以通过 ILM 策略自动触发。

通过合理配置 Rollover 策略,可以有效管理索引的生命周期,优化 Elasticsearch 集群的性能和资源使用。

在Elasticsearch中,Skip Rollover是索引生命周期管理(ILM)的一个特性,用于在某些情况下跳过索引的滚动操作。以下是关于该特性的详细说明:

1.`index.lifecycle.indexing_complete`的作用

当索引的`index.lifecycle.indexing_complete`设置为`true`时,ILM 不会对该索引执行滚动操作,即使它满足滚动条件。此设置通常由 ILM 在滚动操作成功完成后自动设置,但也可以手动设置,以便在某些情况下跳过滚动。

2.手动设置`index.lifecycle.indexing_complete`

如果需要对正常的生命周期策略进行例外处理,例如强制更新别名以切换到新的索引,但希望 ILM 继续管理旧索引,可以通过手动设置`index.lifecycle.indexing_complete`来实现。具体步骤如下:

• 创建一个新索引模板,使用相同的生命周期策略。

• 初始化一个新的初始索引。

• 使用别名 API 将写入索引切换到新初始化的索引。

• 在旧索引上将`index.lifecycle.indexing_complete`设置为`true`,表明该索引不需要滚动。

3.索引生命周期管理(ILM)的滚动操作

ILM 的滚动操作(Rollover)是索引生命周期管理中的一个重要阶段,通常在索引达到一定大小、文档数量或时间限制时触发。例如:

• 当索引大小达到 50GB。

• 索引中的文档数量达到 1000。

• 索引的年龄超过 1 天。

4.跳过滚动的场景

跳过滚动操作通常用于以下场景:

• 当需要更改新索引的命名模式,但希望保留旧索引中的数据。

• 当需要手动干预索引滚动过程,但希望 ILM 继续管理索引。

5.生命周期策略的配置

生命周期策略(Policy)定义了索引在不同阶段(如 Hot、Warm、Cold、Delete)的行为。例如:

• 在 Hot 阶段,可以配置滚动操作的触发条件。

• 在 Delete 阶段,可以配置索引的删除条件。

6.与滚动 API 的关系

如果使用滚动 API(Rollover API)手动触发滚动操作,则无需手动配置`index.lifecycle.indexing_complete`。ILM 会自动管理该设置。

7.生命周期策略的更新

如果需要更新生命周期策略,可以通过 PUT 请求重新定义策略。例如:

```json

PUT _ilm/policy/my_policy

{

  "policy": {

    "phases": {

      "hot": {

        "actions": {

          "rollover": {

            "max_age": "30d",

            "max_size": "50GB"

          }

        }

      },

      "delete": {

        "min_age": "90d",

        "actions": {

          "delete": {}

        }

      }

    }

  }

}

```

总结

Skip Rollover是 Elasticsearch ILM 中的一个重要特性,允许用户在某些情况下跳过索引的滚动操作,同时继续利用 ILM 的生命周期管理功能。通过手动设置`index.lifecycle.indexing_complete`,用户可以灵活地控制索引的滚动行为,以满足特定的业务需求。

 


http://www.ppmy.cn/news/1577150.html

相关文章

国内支持Stable Diffusion模型的平台

国内支持Stable Diffusion模型的平台 截至2025年3月,国内支持SD模型的平台主要包括以下六类,覆盖不同用户需求和技术层级: 一、模型分享与下载平台 Liblib.ai 描述:国内最大SD原创模型社区,提供海量基础模型、Lora…

Spring统一格式返回

目录 一:统一结果返回 1:统一结果返回写法 2:String类型报错问题 解决方法 二:统一异常返回 统一异常返回写法 三:总结 同志们,今天咱来讲一讲统一格式返回啊,也是好久没有讲过统一格式返…

java环境部署

java环境部署 一、准备工作 jrejdkeclipse jdk下载:21和1.8-----官网:Oracle:Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装:IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…

DifyでOracle Base Database Service(23ai)を利用する設定手順

[TOC](DifyでOracle Base Database Service(23ai)を利用する設定手順) はじめに 本記事では、DifyプラットフォームとOracle Base Database Service(23aiエディション)を連携させる方法を解説します。クラウド環境における大規模データ処理を想定した設…

⭐算法OJ⭐跳跃游戏【贪心算法】(C++实现)Jump Game 系列 I,II

既股票买卖系列之后的第二组贪心算法题目:跳跃游戏系列。这一篇介绍的两个问题,其输入均为一个数组,每个元素表示在该位置可以跳跃的最大长度。 55. Jump Game You are given an integer array nums. You are initially positioned at the …

从零开始构建高效Spring Boot应用:实战案例与最佳实践

摘要 本文旨在为初学者及有一定基础的开发者提供一份详尽的指南,以帮助大家深入理解并掌握如何使用Spring Boot框架来快速开发企业级应用程序。通过实际案例分析、代码示例以及架构设计思路分享,读者不仅能够学习到理论知识,还能获得宝贵的实…

网络原理---HTTP/HTTPS

通过之前的网络编程,我们已经初步了解UDP和TCP的基本实现方法,接下来我们对其进一步的学习。 在网络编程中: 1.读和写数据通过Socket,通过Socket内置的InputStream和OutputStream(读写的基本单位都是字节)。2.当在编…

游戏引擎学习第135天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 game_asset.cpp 的创建 在开发过程中,不使用任何现成的游戏引擎或第三方库,而是直接基于 Windows 进行开发,因为 Windows 目前仍然是游戏的标准平台,因此首先在这个环境中进行…