【最佳实践】阿里云 Elasticsearch 索引数据生命周期管理 |
您所在的位置:网站首页 › 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 索引模板。 进入 index management 由于该索引默认关联的是 Beat 自带的策略,如默认策略没有生成,需要指定自定义的policy,点击Manage,需要先remove lifecycle policy。 再为该索引添加新策略 如下关联成功 过滤Hot阶段滚动索引。 过滤出处于 Warm 阶段的索引 过滤出 Cold 阶段索引 大家是否有观察到,策略中明明指定max_doc为100,为何 docs count 数达到100多后才滚动?由于索引生命周期策略默认是10分钟检查一次符合策略的索引,索引可能会超出指定的阈值。 可通过修改 indices.lifecycle.poll_interval 参数来控制检查频率。 慎重修改,避免时间间隔太短给节点造成不必要的负载,本测试中将其改成了1m PUT _cluster/settings { "transient": { "indices.lifecycle.poll_interval":"1m" } } 总结• 索引必须定义“模板”和“别名”两个条件才可以设置索引生命周期策略。• 索引添加生命周期策略有两种方式:1、在索引生命周期中添加管理的模板:可以将策略应用到整个别名覆盖的索引下。2、对单个索引添加索引生命周期策略:只能覆盖当前索引,新滚动的索引不再受周期策略影响。• 索引滚动中对策略做了修改,新策略将在下一个滚动索引生效。 【阿里云Elastic Stack】100%兼容开源ES,独有9大能力 相关活动更多折扣活动,请访问阿里云 Elasticsearch 官网 阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费阿里云 Logstash 2核4G首月免费 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |