首页 > 其他分享 >Elasticsearch 入门实战(6)--索引生命周期管理

Elasticsearch 入门实战(6)--索引生命周期管理

时间:2022-12-19 13:33:15浏览次数:45  
标签:index 生命周期 -- age 索引 Elasticsearch 阶段 test rollover

索引生命周期管理 (Index cycle management: ILM) 是在 Elasticsearch 6.7 版正式推出的一项功能,它是 Elasticsearch 的一部分,主要用来帮助管理索引。

1、简介

如果你要处理时间序列数据,则不想将所有内容连续转储到单个索引中。 取而代之的是,你可以定期将数据滚动到新索引,以防止数据过大而又缓慢又昂贵。 随着索引的老化和查询频率的降低,你可能会将其转移到价格较低的硬件上,并减少分片和副本的数量。

要在索引的生命周期内自动移动索引,可以创建策略来定义随着索引的老化对索引执行的操作,这样可以确保所有索引具有相似的大小。

ILM 由一些策略(policies)组成,而这些策略可以触发一些 actions。这些 actions 可以为:

 Action

Description 

 rollover

 创建一个新的索引,基于数据的时间跨度,大小及文档的多少

 shrink

 减少 primary shards 的数目

 force merge

 合并 shard 的 segments

 freeze

 针对鲜少使用的索引进行冻结以节省内存

delete

永久地删除一个索引

索引生命周期由五个阶段(phases)组成:hot,warm,cold,frozen 及 delete。每个阶段有一组可用的 actions。这些 actions 由上面的 actions 中的一些组成。把这些阶段和相应的 actions 一起组合起来就形成了一个策略(policy)。我们可以通过 API 的形式或者直接在 Kibana 中使用 UI 的形式来创建这些 policies。

ILM 策略实例:

在 hot 阶段,你可能 rollover 一个 alias 从而每两个星期就生成一个新的索引,避免太大的索引数据。在这个阶段你可以做导入数据,并允许繁重的搜索。
在 warm 阶段,你可能把索引变成 read-only,并把索引保留于这个阶段一个星期。在这个阶段,不可以导入数据,但是可以进行适度的搜索。
在 cold 阶段,你可能 freeze 索引,并减少 replica 的数量,并保留于这个阶段三个星期。在这个阶段,不可以导入数据,但是可以进行极其少量的搜索,
在 delete 阶段,只有一个动作可以选择。比如你可以删除超过 6 个星期的索引数据以节省成本。

索引在 Elasticsearch 中的生命周期:

Elasticsearch 入门实战(6)--索引生命周期管理_analyzer

 针对一个超大规模的集群:

Elasticsearch 入门实战(6)--索引生命周期管理_analyzer_02

 各节点职责:

Elasticsearch 入门实战(6)--索引生命周期管理_搜索引擎_03

2、生命周期管理演示

2.1、启动 Elasticsearch 集群

启动三个节点(10.49.196.10、10.49.196.11、10.49.196.12)的集群,其中两个为 hot 节点(存放 hot 阶段的数据),一个为 warm 节点(存放 warm 阶段的数据)。

在 10.49.196.10、10.49.196.11 上运行:

bin/elasticsearch -d -E node.attr.data=hot

在 10.49.196.12 上运行:

bin/elasticsearch -d -E node.attr.data=warm

查看 node 属性信息:

GET _cat/nodeattrs?v

Elasticsearch 入门实战(6)--索引生命周期管理_analyzer_04

2.2、创建 ILM policy

PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "10mb",
"max_age": "1d",
"max_docs": 5
}
}
},
"warm": {
"min_age": "5m",
"actions": {
"shrink": {
"number_of_shards": 1
},
"allocate": {
"number_of_replicas": 0,
"require": {
"data": "warm"
}
}
}
},
"delete": {
"min_age": "10m",
"actions": {
"delete": {}
}
}
}
}
}

这里定义的 policy 意思为:

热阶段

索引创建 1 天后、索引大小达到 10MB  或 索引文档数达到 5(符合任何一个即可),该索引将滚动更新,系统将创建一个新索引。该新索引将重新启动策略,而当前的索引(刚刚滚动更新的索引)将在滚动更新后等待 5 分钟进入温阶段。

温阶段

索引进入温阶段后,ILM 会将索引收缩到 1 个分片 0 个副本,通过分配操作将索引移动到温节点。完成该操作后,索引将再等待 5 分钟 (时间都是从滚动跟新算起,10 - 5 = 5)后进入删除阶段。

删除阶段

删除阶段具有用于删除索引的删除操作。在删除阶段,您将始终需要有一个 ​​min_age​​ 条件,以允许索引在给定时段内待在热、温或冷阶段。

2.3、创建 Index template

PUT _template/my_template
{
"index_patterns": ["test-*"],
"settings": {
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "test-alias",
"index.routing.allocation.require.data": "hot",
"index": {
"number_of_shards": 2,
"number_of_replicas": 1
}
},
"mappings": {
"properties": {
"age": {
"type": "integer"
},
"name": {
"type": "keyword"
},
"poems": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"about": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"success": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}

所有以 test- 开头的 index 都需要遵循这个规律。这里定义了 rollover 的 alias 为 “test-alias”。需要注意的是 "index.routing.allocation.require.data": "hot",这定义了我们需要 indexing 的 node 的 data 属性是 hot。

2.4、定义 Index alias

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

这里定义了一个叫做 test-alias 的 alias,它指向 test-00001 索引。注意这里的 is_write_index 为 true。如果有 rollover 发生时,这个alias会自动指向最新 rollover 的 index。

使用 elasticsearch-head 查看该索引:

Elasticsearch 入门实战(6)--索引生命周期管理_数据_05

2.5、新增数据

POST test-alias/_bulk
{"index":{"_id":"1"}}
{"age": 30,"name": "李白1","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}
{"index":{"_id":"2"}}
{"age": 30,"name": "李白2","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}
{"index":{"_id":"3"}}
{"age": 30,"name": "李白3","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}
{"index":{"_id":"4"}}
{"age": 30,"name": "李白4","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}
{"index":{"_id":"5"}}
{"age": 30,"name": "李白5","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}
{"index":{"_id":"6"}}
{"age": 30,"name": "李白6","poems": "静夜思","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"}

2.5、rollover

已经有超过 5 个文档了,将会 rollover;rollover 扫描间隔默认时 10 分钟,可以通过修改 indices.lifecycle.poll_interval 参数来改变默认的间隔时间。

PUT _cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval": "30s"
}
}

rollover 后会生成新的索引:

Elasticsearch 入门实战(6)--索引生命周期管理_analyzer_06

2.6、进入 warm 阶段

rollover 后,索引 test-000001 等待 5 分钟左右后将会进入 warm 阶段。

rollover 后的情况:

Elasticsearch 入门实战(6)--索引生命周期管理_搜索引擎_07

 rollover 后等待 5 分钟左右后,索引 test-000001 已被重命名为 shrink-so7u-test-000001:

Elasticsearch 入门实战(6)--索引生命周期管理_Elastic_08

Elasticsearch 入门实战(6)--索引生命周期管理_搜索引擎_09

2.7、进入 delete 阶段

在 warm 阶段再等待 5 分钟(10m - 5m)左右后, shrink-so7u-test-000001 进入 delete 阶段,索引将被删除。


 

 

 


 



标签:index,生命周期,--,age,索引,Elasticsearch,阶段,test,rollover
From: https://blog.51cto.com/wuyongyin/5951955

相关文章

  • Node.js
    下载安装node.jshttps://nodejs.org/zh-cn/download/npm安装yarn安装npminstall-gyarn切换淘宝镜像yarnconfigsetregistryhttps://registry.npm.taobao.orgy......
  • git拉取远程分支(本地不存在的分支)
    git拉取本地不存在但是远程git仓库存在的别人创建的分支,步骤如下:gitfetch--all      拉取所有git仓库里的分支名字gitcheckoutremote_brach_name  ......
  • 嵌入式:堆栈寻址、相对寻址与ARM指令总结
    堆栈寻址堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针(SP)的专用寄存器(R13)指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最......
  • 在VMD上可视化hdf5格式的分子轨迹文件
    相比于明文存储和传统的一些数据存储方法,HDF5格式的文件非常适合用于存储分子动力学模拟过程中产生的庞大轨迹文件,不仅有良好的可读性,还有非常优秀的压缩率,使得存......
  • linux回炉第三天
    /etc/passwd/etc/shadow/etc/group/etc/gshadowchage-lwanguseradduseradd-Guseradd-guseradd-uuseradd-duseradd-suseradd-Museradd-cuseradd-ruseradd-D#......
  • 【实践】高性能PHP应用容器workerman快速入门
    前言workerman--极简、稳定、高性能、分布式workerman是什么workerman是一款开源高性能PHP应用容器,它大大突破了传统PHP应用范围,被广泛的用于互联网、即时通讯、APP开发、硬......
  • Spring CredHub 教程学习
    SpringCredHub提供客户端支持,用于从CloudFoundry​平台中运行的CredHub服务器存储,检索和删除凭据。CredHub提供了一个HTTPAPI,用于安全地存储,生成,检索和删除各种类型的凭......
  • Nagios安装
    实验环境   操作系统:RedHatEnterpriseLinuxServerrelease6.0(Santiago)  64bit。   注意,Nagios只能安装在Linux或Unix平台,不支持Windows平台,当然,它可以......
  • mysql学习------二进制日志管理
    MySQL二进制日志(BinaryLog) a、它包含的内容及作用如下:   包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)   包含关于每个更新数......
  • 【算法实践】有始有终,雨露均沾--手把手带你手撸选择排序
    前言选择排序是一个非常经典且简单直观的排序算法,无论什么数据进去都是O(n^2)的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间......