ES滚动索引机制

简介: ES滚动索引机制

一、为什么需要滚动索引


当索引时间序列数据(如日志或指标)时,您不能无限期地写入单个索引。为了满足索引和搜索性能要求并管理资源使用,您可以写入一个索引,直到达到某个阈值,然后创建一个新的索引并开始写入该索引。


滚动索引的作用:


在高性能热节点上优化高摄取率的活动指标。

优化暖节点的搜索性能

将较旧、较少访问的数据转移到较便宜的冷节点

通过删除整个索引来根据保留策略删除数据。


二、如何使用滚动索引


ILM 使您能够根据索引大小、文档数量或年龄自动转移到新的索引。触发滚动时,创建一个新索引,更新写别名以指向新索引,并将所有后续更新写入新索引。


通常建议使用数据流来管理时间序列数据,数据流自动跟踪写索引,同时将配置保持在最低限度。


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


数据流的名称或通配符(*)模式。

数据流的时间戳字段

映射mappings和设置settings

ILM 允许您根据索引大小、文档数量或年龄自动转移到新的索引。触发滚动时,创建一个新索引,更新写别名以指向新索引,并将所有后续更新写入新索引。


滚动的触发条件:

“max_primary_shard_size”: “50GB” 依据主分片大小

“max_age”: “30d” 依据索引数据年龄

“max_docs”:3 索引记录数

“max_size”: “5gb” 索引大小


TIP:

滚动到基于索引大小、文档数量或年龄的新索引比基于时间的滚动更可取。在任意时间滚动通常会导致许多小的索引,这可能会对性能和资源使用产生负面影响。


为了创建一个滚动索引,你需要:


创建生命周期策略

创建一个索引模板

验证索引生命周期阶段的转变

官网说明文档: Rollover


三、实战


1、创建生命周期策略

方式一:通过Kibana定义


通过 Kibana 或使用 create 或 update policy API 创建策略。要从 Kibana 创建策略,打开菜单,进入堆栈管理 > 索引生命周期策略。点击创建策略。

100.png



方式二:通过API定义

说明:定义一个包含两个阶段的索引生命周期管理策略 timeseries_policy。

1、在hot阶段,定义了翻转动作,该阶段指定当索引的主分片的最大存储容量到达50g 或者最大年龄到达30天进行滚动。

2、delete阶段,定义滚动后90天删除索引。

PUT _ilm/policy/timeseries_policy
{
  "policy": {
    "phases": {
      "hot": {                                
        "actions": {
          "rollover": {
            "max_primary_shard_size": "50GB", 
            "max_age": "30d"
          }
        }
      },
      "delete": {
        "min_age": "90d",                     
        "actions": {
          "delete": {}                        
        }
      }
    }
  }
}


参数介绍:

1、rollover 设置索引滚动的触发条件

2、max_primary_shard_size 最大主分片数

3、max_age 索引最多保留多少时间

4、min_age多长时间后,进入下一个阶段

5、actions滚动到该阶段后需要执行的动作


注意⚠️:

1、滚动动作只有在hot阶段才能配置。

2、min_age时间是从执行滚动后开始算起,而不是创建索引开始算起。


例如,下列策略在索引滚动一天后删除该索引。它不会在创建索引后一天删除索引。

PUT /_ilm/policy/rollover_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50G"
          }
        }
      },
      "delete": {
        "min_age": "1d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}


2、创建索引模板

要设置数据流,首先创建一个索引模板来指定生命周期策略。因为模板是用于数据流的,所以它还必须包含数据流定义。


例如,您可以创建一个 timeseries _ template,用于将来名为 timeseries 的数据流。


为了使 ILM 能够管理数据流,模板配置了一个 ILM 设置:


指定要应用于数据流的生命周期策略的名称

方式一:通过Kibana创建索引模板

您可以使用 Kibana Create 模板向导添加模板。从 Kibana 打开菜单,进入 Stack Management > Index Management。在 Index Templates 选项卡中,单击 Create template。

99.png


方式二:通过API创建索引模板


PUT _index_template/timeseries_template
{
  "index_patterns": ["timeseries"],                   
  "data_stream": { },
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1,
      "index.lifecycle.name": "timeseries_policy"     
    }
  }
}


说明:

创建名称为timeseries_template的索引模板。


index_patterns 用于设置索引名称的匹配模式,当索引名称与 timeseries 目标匹配时应用该模板

index.lifecycle.name 用于管理数据流的 ILM 策略的名称。

通过data_stream声明是一个数据流模板。


3、创建数据流

如果索引名称与索引模板的 index _ patterns 中定义的名称或通配符模式匹配,只要现有的数据流、索引或索引别名尚未使用该名称,索引请求就会自动创建带有单个后备索引的对应数据流。Elasticsearch 自动将请求的文档索引到这个支持索引中,该索引也充当流的写索引。


例如,下面的请求将创建 timeseries 数据流和名为. ds-timeseries-2099.03.08-00001的第一代支持索引。


POST timeseries/_doc
{
  "message": "logged the request",
  "@timestamp": "1591890611"
}


当满足生命周期策略中的滚动条件时,滚动操作:


创建名为 .ds-timeseries-2099.03.08-000002 的第二代后备索引。 因为它是 timeseries 数据流的后备索引,所以来自 timeseries_template 索引模板的配置将应用于新索引。

由于是timeseries数据流的最新一代索引,新创建的backing index .ds-timeseries-2099.03.08-000002成为数据流的写索引。

每次满足滚动条件时,这个过程都会重复。你可以搜索所有数据流的支持索引,这些索引由 timeseries_ policy 管理,并带有时间串数据流名称。写操作被路由到当前的写索引。读操作将由所有支持索引处理。


注意⚠️:

1、数据流是缩放和管理时间序列数据的一种方便方式,但是它们仅用于附加。很多场景下数据需要更新或删除的用例,而数据流不支持直接删除和更新请求,因此索引 api 将需要直接用于数据流的支持索引。

2、如果索引数据需要支持直接删除、更新那么就不能采用数据流了,这时可以使用索引别名来管理包含时间序列数据的索引,并定期转移到新的索引。


4、检索生命周期的进度

要获取托管索引的状态信息,可以使用 ILM 解释 API:


索引处于什么阶段以及何时进入这个阶段

当前操作和正在执行的步骤

如果发生任何错误或进度被阻塞

例如,下面的请求获取有关 timeseries 数据流的支持索引的信息:


GET .ds-timeseries-*/_ilm/explain


总结


1、滚动索引使用场景

2、如何使用滚动索引,配置策略(policy)、创建索引模版(template)、创建索引(index)

目录
相关文章
|
3月前
|
缓存 索引
kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
kibana上执行ES DSL语言查询数据并查看表结构与数据、删除索引、查看文件大小
105 0
|
5月前
|
JavaScript 前端开发 API
原生表格-滚动-合并功能
原生表格-滚动-合并功能
|
5月前
|
测试技术
【sgLazyTree】自定义组件:动态懒加载el-tree树节点数据,实现增删改、懒加载及局部数据刷新。
【sgLazyTree】自定义组件:动态懒加载el-tree树节点数据,实现增删改、懒加载及局部数据刷新。
|
12月前
|
索引
如何在已创建的 es 索引中增加分片
如何在已创建的 es 索引中增加分片
|
前端开发 数据格式
Descriptions组件渲染多条数据及带有图片时如何处理
Descriptions组件渲染多条数据及带有图片时如何处理
212 0
|
测试技术 索引
ES数据删除优化
分享一下ES数据删除优化的相关经历,根据业务需要一共优化了3次,包含了其中踩到的坑和一些花时间解决的问题.
1022 0
|
API
ES查询优化—Scroll API 滚动查询
ES查询优化—Scroll API 滚动查询
1140 1
ES查询优化—Scroll API 滚动查询
|
JavaScript
JS动态插入插件后,不能马上使用,必须刷新
JS动态插入插件后,不能马上使用,必须刷新
112 0
|
算法 关系型数据库 MySQL
索引合并机制详解
索引合并机制详解
741 0
索引合并机制详解