【最佳实践】阿里云 Elasticsearch 索引数据生命周期管理

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 索引生命周期管理(ILM)是指:ES数据索引从设置,创建,打开,关闭,删除的全生命周期过程的管理;为了降低索引存储成本,提升集群性能和执行效率,我们可以通过对存储在阿里云 Elasticsearch 的数据做生命周期管理。

索引生命周期管理(ILM)是指:ES数据索引从设置,创建,打开,关闭,删除的全生命周期过程的管理;为了降低索引存储成本,提升集群性能和执行效率,我们可以通过对存储在阿里云 Elasticsearch 的数据做生命周期管理。

本文作者:阿里云 Elasticsearch团队—Lettie

阿里云 Elasticsearch (>=6.6) 提供 ILM 功能,同时将索引生命周期分为 Hot,Warm、Cold、Delete 4个阶段。

阶段 描述
Hot 主要处理时序数据的实时写入,根据索引的文档数大小时长决定是否调用 Rollover API 来滚动索引。
Warm 主要用来提供查询,索引不再写入。
Cold 查询较少,查询速度变慢,索引不再被更新。
Delete 删除数据

说明:Rollover 配置归档,目前仅支持三种策略,分别是:max_docs、max_size、max_age,其中任何一个条件满足都会触发索引归档操作。

场景介绍


业务场景中存在大量 heartbeat-* 时序索引,且每天新增单个索引大小都在 4MB 左右.数据越多,导致 Shard 数越多,导致增加集群负载过高。为了有效避免该类情况,需要规划不同的 Rollover 策略,滚动 heartbeat-* 开头的历史监控索引,实现 Warm 阶段对索引进行分片收缩及合并段,Cold 阶段将数据从 Hot 节点移动到 Cold(Warm)节点,并定期删除索引数据。

操作说明


Heartbeat下配置ILM

为了使 Heartbeat 与 阿里云 Elasticsearch 的ILM无缝衔接,可在 Beat yml 配置中定义 ES ILM

详细配置参考Set up index lifecycle management

下载并解压 Heartbeat 安装包,通过以下命令编辑 Heartbeat.yml 配置分别定义 Heartbeat.monitors、setup.kibana、output.elasticsearch。

heartbeat.monitors:
- type: icmp
  schedule: '*/5 * * * * * *'
  hosts: ["47.111.169.233"]
setup.template.settings:
  index.number_of_shards: 3
  index.codec: best_compression
  index.routing.allocation.require.box_type: "hot"
setup.kibana:
  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  host: "https://es-cn-4591jumei000u1zp5.kibana.elasticsearch.aliyuncs.com:5601"
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["es-cn-4591jumei000u1zp5.elasticsearch.aliyuncs.com:9200"]
  ilm.enabled: true
  setup.template.overwrite: true
  ilm.rollover_alias: "heartbeat"
  ilm.pattern: "{now/d}-000001"
  # Enabled ilm (beta) to use index lifecycle management instead daily indices.
  #ilm.enabled: false
  # Optional protocol and basic auth credentials.
  #protocol: "https"
  username: "elastic"
  password: "Elastic@363"

ILM 及 Settings 配置说明:

1、index.number_of_shards:指定主分片数,默认是1。
2、index.routing.allocation.require.box_type:将索引数据写入hot节点。
3、ilm.enabled:设置为true,用来启用index lifecycle management。
4、setup.template.overwrite: 覆盖原template数据,如果以前已将此版本的索引模板加载到es中,则必须通过该配置重新覆盖。
5、ilm.rollover_alias:定义rollover 别名,默认是heartbeat-{beat.version},通过该参数可指定别名前缀。
6、ilm.pattern:定义滚动索引的pattern,这里支持date math,默认是{now/d}-000001,当触发条件后,新索引名称在最后一位数字上加1,比如第一次滚动产生的索引名称是heartbeat-2020.04.29-000001,当满足上述定义的rollover中的一项触发滚动后,创建新的索引,名称为heartbeat-2020.04.29-000002。

注意:如果在加载索引模板后修改rollover_alias 或 pattern,必须设置setup.template.overwrite为true,重写template。

自定义ILM策略


heartbeat支持通过 ./heartbeat setup --ilm-policy 命令,可加载默认的策略写进 Elasticsearch,默认策略可通过 ./heartbeat export ilm-policy 命令打印在stdout,可以对该命令进行修改,实现手动创建策略。

以下主要介绍如何手动创建策略。

索引生命周期策略支持通过 API 或 Kibana 配置,下面示例是通过 ilm policy API 创建 hearbeat-policy 。

提示:通过 kibana --> management-->index lifecycle policies 配置索引生命周期策略。

PUT /_ilm/policy/hearbeat-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "5mb",
            "max_age": "1d",
            "max_docs": 100
          }
        }
      },
      "warm": {
        "min_age": "60s",
        "actions": {
          "forcemerge": {
                "max_num_segments":1
              },
          "shrink": {
                "number_of_shards":1
              }
        }
      },
      "cold": {
        "min_age": "3m",
        "actions": {
          "allocate": {
            "include": {
              "box_type": "warm"
            }
          }
        }
      },
      "delete": {
        "min_age": "1h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

Hot:

该策略将在写入达到 5MB 、使用超过1天、doc数超过100时,只要满足任一条件,都会触发 Rollover,系统将创建一个新索引,该索引将重新启动策略,而当前的索引将在滚动更新后等待 60s 后进入 Warm 阶段。

Warm:

索引进入 Warm 阶段后,ILM 会将索引收缩到 1 个分片,将索引强制合并为 1 个段,完成该操作后,索引将等待 3M (从滚动更新时算起)后进入 Cold 阶段。

Cold:

索引进入 Cold 阶段后,ILM将索引从 Hot 节点移动到冷数据(warm)节点,完成操作后,将等待1小时进入删除阶段。

Delete:

索引进入delete阶段,将在1小时后删除。

各个阶段支持不同种类的 Action,详细说明 请参考Action。

kibana 管理滚动索引


完成以上准备工作后,使用下面命令启动 Heartbeat 服务。

# sudo ./heartbeat -e

ILM关联模板

进入kibana Index lifecycle policies,为自定义的策略关联 Heartbeat 索引模板。

image.png

索引关联ILM

进入 index management

image.png

由于该索引默认关联的是 Beat 自带的策略,如默认策略没有生成,需要指定自定义的policy,点击Manage,需要先remove lifecycle policy。

image.png

再为该索引添加新策略

image.png

如下关联成功

image.png

过滤各阶段索引

过滤Hot阶段滚动索引。

image.png

过滤出处于 Warm 阶段的索引

image.png

过滤出 Cold 阶段索引

image.png

ILM策略周期


大家是否有观察到,策略中明明指定max_doc为100,为何 docs count 数达到100多后才滚动?
由于索引生命周期策略默认是10分钟检查一次符合策略的索引,索引可能会超出指定的阈值。 可通过修改 indices.lifecycle.poll_interval 参数来控制检查频率。

慎重修改,避免时间间隔太短给节点造成不必要的负载,本测试中将其改成了1m

PUT _cluster/settings
{
  "transient": {
    "indices.lifecycle.poll_interval":"1m"
  }
}

总结


• 索引必须定义“模板”和“别名”两个条件才可以设置索引生命周期策略。
• 索引添加生命周期策略有两种方式:
1、在索引生命周期中添加管理的模板:可以将策略应用到整个别名覆盖的索引下。
2、对单个索引添加索引生命周期策略:只能覆盖当前索引,新滚动的索引不再受周期策略影响。
• 索引滚动中对策略做了修改,新策略将在下一个滚动索引生效。


image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费


image.png

image.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
21天前
|
存储 自然语言处理 关系型数据库
ElasticSearch索引 和MySQL索引那个更高效实用那个更合适
ElasticSearch索引 和MySQL索引那个更高效实用那个更合适
35 0
|
1月前
|
关系型数据库 MySQL 数据挖掘
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
DTS 作为阿里云核心的数据交互引擎,以其高效的实时数据流处理能力和广泛的数据源兼容性,为用户构建了一个安全可靠、可扩展、高可用的数据架构桥梁。阿里云数据库 SelectDB 通过与 DTS 联合,为用户提供了简单、实时、极速且低成本的事务数据分析方案。用户可以通过 DTS 数据传输服务,一键将自建 MySQL / RDS MySQL / PolarDB for MySQL 数据库,迁移或同步至阿里云数据库 SelectDB 的实例中,帮助企业在短时间内完成数据迁移或同步,并即时获得深度洞察。
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
|
1月前
|
SQL 人工智能 数据挖掘
阿里云DMS,身边的智能化数据分析助手
生成式AI颠覆了人机交互的传统范式,赋予每个人利用AI进行低门槛数据分析的能力。Data Fabric与生成式AI的强强联合,不仅能够实现敏捷数据交付,还有效降低了数据分析门槛,让人人都能数据分析成为可能!阿里云DMS作为阿里云统一的用数平台,在2021年初就开始探索使用Data Fabric理念构建逻辑数仓来加速企业数据价值的交付,2023年推出基于大模型构建的Data Copilot,降低用数门槛,近期我们将Notebook(分析窗口)、逻辑数仓(Data Fabric)、Data Copilot(生成式AI)进行有机组合,端到端的解决用数难题,给用户带来全新的分析体验。
110091 118
阿里云DMS,身边的智能化数据分析助手
|
2月前
|
存储 数据可视化 数据管理
基于阿里云服务的数据平台架构实践
本文主要介绍基于阿里云大数据组件服务,对企业进行大数据平台建设的架构实践。
701 0
|
1月前
|
JSON 监控 数据管理
【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据
Elasticsearch的ILM功能允许用户定义策略,自动管理索引从创建到删除的生命周期。用户可以设置策略,根据索引年龄或大小自动删除旧数据,节省存储空间。通过应用ILM策略于索引模板,新索引将遵循预定义的生命周期。用户还可以监控ILM状态,确保策略按预期执行。使用ILM,用户可以高效地管理数据,确保旧数据及时删除,同时保持数据完整性和安全性。
|
2月前
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么?
正向索引根据文档ID直接查找文档内容,适用于精确匹配场景;而倒排索引则基于文档内容构建,通过关键词快速定位相关文档,适用于全文搜索,显著提高查询效率,是搜索引擎的核心技术。
|
17天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
1月前
|
消息中间件 编解码 运维
阿里云 Serverless 异步任务处理系统在数据分析领域的应用
本文主要介绍异步任务处理系统中的数据分析,函数计算异步任务最佳实践-Kafka ETL,函数计算异步任务最佳实践-音视频处理等。
175296 348
|
1月前
|
自然语言处理 算法 关系型数据库
阿里云PAI大模型RAG对话系统最佳实践
本文为大模型RAG对话系统最佳实践,旨在指引AI开发人员如何有效地结合LLM大语言模型的推理能力和外部知识库检索增强技术,从而显著提升对话系统的性能,使其能更加灵活地返回用户查询的内容。适用于问答、摘要生成和其他依赖外部知识的自然语言处理任务。通过该实践,您可以掌握构建一个大模型RAG对话系统的完整开发链路。
|
1月前
|
存储 数据采集 Apache
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍
随着业务在金融、保险和商城领域的不断扩展,众安保险建设 CDP 平台以提供自动化营销数据支持。早期 CDP 平台依赖于 Spark + Impala + Hbase + Nebula 复杂的技术组合,这不仅导致数据分析形成数据孤岛,还带来高昂的管理及维护成本。为解决该问题,众安保险引入 Apache Doris,替换了早期复杂的技术组合,不仅降低了系统的复杂性,打破了数据孤岛,更提升了数据处理的效率。
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍

相关产品

  • 检索分析服务 Elasticsearch版