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

简介: 索引生命周期管理(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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
349 5
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
659 8
|
存储 缓存 监控
优化Elasticsearch 索引设计
优化Elasticsearch 索引设计
333 5
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
384 4
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
277 8
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
963 3
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
962 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
12月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
2006 64
|
11月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
5440 0
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
602 5

热门文章

最新文章

相关产品

  • 检索分析服务 Elasticsearch版