什么是es索引的生命周期?有啥用?可以怎么用?用了有什么好处呢?

在现实的生产环境中有没有觉得自己刚开始设计的索引的分片数刚刚好,但是随着时间的增长,数据量增大,增长速度增大的情况下,你的es索引的设计是否还合理呢?

在现实的生产存储中,有没有一些数据时间长了就没价值了,没必要浪费存储了,就可以删除了,有些数据变得不再重要了,可以存放在低性能的磁盘上,节约公司的机器硬件成本呢?

es生产环境,有没有经历过通过人工去管理索引的中部分数据的删除呢,知道es删除数据原理的都知道,这样对性能有很大的影响,刚开始并没有真正的删除数据。

这篇文章纯属于个人通过别人的博客和官网的学习,结合自己公司业务场景的一个思考,有些是没有实际验证的。本篇也是基于elasticsearch7.8.1的一个版本的知识点。

一、引发思考的背景

1、首先业务场景,es的业务场景是真的广泛,目前我们只是用来做搜索查询,虽然现在在研究elk,对日志的进行索引,但是肯能还只是用到es的一点点的功能

2、在es安装的时候,如何设计节点,如何根据现有的机器做es的集群,配置好集群后,怎么设计索引,一般都会有一个时间的字段,根据数据量的大小和增长速度可以根据天,月,年等时间间隔切分索引,使用别名管理,那么多索引,但是又如何去管理这些索引呢,还要根据自己公司的业务场景,而不是纯粹的设计理论,我觉的符合公司情况,符合业务场景的设计才是最好的设计吧,但是不是一味的强耦合的只考虑单个业务,应该考虑多个,能够做到模板化,这样就能很好的做扩展了,以及要考虑对未来的规划和数据增长的容忍度吧

3、当然我们目前没有巨量的数据,但是很多事情也必须考虑进去,根据公司业务,比如数据只有一年的经常使用,后面的数据基本不用,三年前的数据可以删除,机器设备性能,有些机器磁盘性能好ssd,有些一般吧机械硬盘,还有cpu,内存的因素都要考虑。

4、公司管理人员少,怎么去管理这些呢,也没这个精力去开发索引的管理界面,很多因素都要考虑进去

二、冷热架构

冷热架构就是有冷的有热的(这是玩笑话),就是经常需要使用(热)和不经常使用的数据(冷),有了这样的却别,存储方面肯定也要区别对待吧,把热数据存放在性能好的机器上,把冷的数据存放在性能较差的机器上,这个就是所谓的合理利用资源,节约公司硬件成本,也就是在硬件成本一定的条件下,提升集群的性能。但是描述是这么描述了,怎么实现热数据就存在好的机器上,冷数据就存在差点的机器上呢,可以映射呀,打标签呀,方法很多嘛,es就是打标签。----如上描述都是个人理解(这里只说个人的)

好,接下来就给每个es集群的节点打标签咯,说A集群性能好,用来存热数据,说B机器性能差一些,用来存冷数据,在他们每个机器上挂个牌牌,方便数据根据自己的冷热程度对号入座。es是这么打标签的:

在elasticsearch.yml文件中增加

node.attr.{attribute}: {value}

比如可以给机器配置冷热的标签:

node.attr.temperature: hot //热节点
node.attr.temperature: warm //冷节点

现在是机器的标签打好了,那索引数据怎么打标签,并且一一对应呢?就是对索引有如下的设置(_settings)就可以对应好啦:

index.routing.allocation.include.{attribute}   //表示索引可以分配在包含多个值中其中一个的节点上。
index.routing.allocation.require.{attribute}   //表示索引要分配在包含索引指定值的节点上(通常一般设置一个值)。
index.routing.allocation.exclude.{attribute}   //表示索引只能分配在不包含所有指定值的节点上。

详细的部署这里不说了,大概只聊聊思想,部署可以参考下其他博主的博客:

https://www.elastic.co/guide/en/elasticsearch/reference/7.8/shard-allocation-filtering.html

https://zhuanlan.zhihu.com/p/97098781

https://www.cnblogs.com/caoweixiong/p/11988457.html

三、生命周期

聊了背景,说了冷热架构,那我们怎么怎么自动的管理呢?这样生命周期就派上用处了,比如一个索引的数据经过10天就从热数据转为了冷数据,这样可以通过一系列的action和设置进行操作,自动根据时间把冷数据转移到性能较差的机器上。这样岂不是很方便,接下来我们就了解下索引的生命周期,以及怎么使用。

二话不说,上官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/index-lifecycle-management.html

可以配置索引生命周期管理(ILM)策略,以根据您的性能、弹性和保留需求自动管理索引。比如当索引达到一定大小或文档数量时,旋转新索引,每天、每周或每月创建一个新索引,并归档以前的索引,删除过时的索引以执行数据保留标准。可以通过API配置和kibana配置进行生命周期的管理。

ES索引生命周期管理分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作,warm、cold、delete分别对rollover后的数据进一步处理(前提是配置了hot)

阶段

描述

hot

主要处理时序数据的实时写入

warm

索引不再被更新,但仍在被查询

cold

索引不再被更新,并且很少被查询。这些信息仍然需要可搜索

delete

索引不再需要,可以安全地删除

那这些索引是根据什么条件去从一个阶段转到另一个阶段的呢?比如可以根据时间呀,文档数据呀,索引大小呀作为判断条件转到下一个阶段。

1、当索引达到50GB时,将鼠标移至新索引。
2、将旧索引移至热阶段,将其标记为只读,然后将其缩小为单个碎片。
3、7天后,将索引移至冷阶段,然后将其移至较便宜的硬件上。
4、达到所需的30天保留期后,删除索引

那我们在索引的每一个阶段可以做什么样的操作呢,比如增加索引的设置,修改副本数量等。

阶段

操作(action)

Hot

Set Priority,Unfollow,Rollover

Warm

Set Priority,Unfollow,Read-Only,Allocate,Shrink,Force Merge

Cold

Set Priority,Unfollow,Allocate,Freeze

Delete

Wait For Snapshot,Delete

具体如上的每一个动作(action)是什么,大家参考官网https://www.elastic.co/guide/en/elasticsearch/reference/7.8/ilm-actions.html

我们知道索引生命的周期的阶段,也知道根据什么条件从一个周期跳转到另一个阶段,也知道在每一个阶段可以做什么操作了,那么就成了呀,更具自己的业务场景设计索引的生命周期吧!!!接下来就看看什么实用呢?

来,官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/set-up-lifecycle-policy.html

https://www.elastic.co/guide/en/elasticsearch/reference/7.8/getting-started-index-lifecycle-management.html

通过索引生命周期策略管理索引的基本步骤如下:
1. 创建定义适当阶段和操作的生命周期策略
2. 创建索引模板,将策略应用于每个新索引
3. 引导一个索引作为初始写索引
4. 验证索引按预期在生命周期阶段中移动

如上四个步骤根据官网来一步一步操作很简单,如果要结合冷热架构的话,可以在某一个阶段根据自己的需求通过索引的设置(_settings)指定打好标签机器的标签就好了

当然索引的生命周期还可以通过kibana进行配置:

根据图一步一步的操作很简单的!

生命周期管理策略真的是一个很好管理索引的技术,很灵活,能够减少人工的介入。都可以根据公司的业务场景好好使用,本文的冷热架构这里没有实践过,但是索引的生命周期还是实践过,挺好用的,特别是一些日志数据,保留7天或者一个月就够了,可以通过生命周期策略配置自动删除满足条件的数据,这样集群的数据也不会无限的增长,也不需要人工管理。

愿每一个努力的人都积极思考,而不是知识的搬运工

对Elasticsearch生命周期的思考的更多相关文章

  1. ElasticSearch生命周期管理-索引策略配置与操作

    概述 本文是在本人学习研究ElasticSearch的生命周期管理策略时,发现官方未提供中文文档,有的也是零零散散,此文主要是翻译官方文档Policy phases and actions模块. 注: ...

  2. Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

    本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...

  3. API经济时代的思考(转载目的:为之后写API-first模式的生命周期治理做准备)

    原文地址:API经济时代的思考    感觉这篇博客还不错,个人赞同其大部分的内容,借鉴参考一下,懒得自己写了(关键是不一定能轻松写得更好,嘿嘿,偷懒啦) 接下来会写关于API经济的概念下,如何进行AP ...

  4. ElasticSearch——索引生命周期管理

    从ES6.6开始,Elasticsearch提供索引生命周期管理功能,索引生命周期管理可以通过API或者kibana界面配置,详情参考[index-lifecycle-management] 本文仅通 ...

  5. Elasticsearch索引生命周期管理方案

    一.前言 在 Elasticsearch 的日常中,有很多如存储 系统日志.行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长 索引 的数量也会持续增长,然而这些场景基本上只有 ...

  6. Elasticsearch 索引生命周期管理 ILM 实战指南

    文章转载自:https://mp.weixin.qq.com/s/7VQd5sKt_PH56PFnCrUOHQ 1.什么是索引生命周期 在基于日志.指标.实时时间序列的大型系统中,集群的索引也具备类似 ...

  7. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  8. Elasticsearch:Index生命周期管理入门

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

  9. Elasticsearch索引生命周期管理探索

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484130&idx=1&sn=454f199 ...

随机推荐

  1. webpack(从上篇博客中拿出来的)

    插件配置: emmet: vscode内置了这个,但是没有开启,要在设置里面"emmet.triggerExpansionOnTab": true, vscoed-icons插件: ...

  2. vue中页面卡顿,使用懒加载

    为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...

  3. vue 中PDF实现在线浏览,禁止下载,打印

    需求:在线浏览pdf文件,并且禁止掉用户下载打印的效果. 分析:普通的iframe.embed标签都只能实现在线浏览pdf的功能,无法禁止掉工具栏的下载打印功能.只能尝试使用插件,pdfobject. ...

  4. django学习(三)

    1.单表操作和测试环境的准备 我们先对单表查询做一个总结和回顾,并进行进一步的学习和交流.我们在我们的应用的models.py文件下面书写user类.如下所示,然后用数据库迁移,在mysql数据库中生 ...

  5. 小程序开发-Canvas画布组件

    Canvas画布 基本使用方法: 在wxml中添加canvas组件 <canvas canvas-id='canvasDemo' class='demo'></canvas> ...

  6. Java8 ParallelStream

    ParallelStream 并行流就是一个把内容拆分成多个数据块,用不同线程分别处理每个数据块的流.对收集源调用parallelStream方法就能将集合转换为并行流. 并行流 并行流和顺序流转换 ...

  7. 跟着兄弟连系统学习Linux-【day07】

    day07-20200604 p25.vim常用操作 vim需要经常练习,一般用于修改配置文件.

  8. IDEA 2020 集成 Activity插件

    我按照教程打开settings-plugins,搜索actiBPM搜索不到, 于是我就去下载插件,然后再安装,具体步骤如下: 下载插件: 到http://plugins.jetbrains.com/, ...

  9. SpringBoot简单(登录/显示/登出)工程下载 使用Thymeleaf输出页面文字

    下载地址:https://files.cnblogs.com/files/xiandedanteng/SessionShare20191226.zip 测试用,画面如下: SpringMVC入门弟子也 ...

  10. mysql与redis区别

     编号   mysql redis 1 类型 关系型数据库 缓存数据库 2 作用 主要用于存放持久化数据,是将数据存储在硬盘中,读取时速度较慢,而且频繁访问也会导致数据库负载过高. 用于存储使用频繁的 ...