ILM(Index Lifecycle Management)

目录

概念概述

ILM触发行为

Rollover

Shrink

Force merge

Freeze

Delete

索引生命周期

阶段概念

阶段执行

索引生命周期行为

Allocate

Delete

Force merge

Freeze

Megrate

Read Only

Rollover

Searchable snapshot

Set priority

Shrink

Unfollow

Wait for snapshot

实践


概念概述

ILM触发行为

ILM有几个触发行为:rollover、shrink、force merge、freeze、delete

Rollover

当索引中文档数量/文档实际存储大小/索引创建时间,这三个条件满足任意一点,索引会发生滚动,滚动的新索引会根据索引别名或一个数据流创建新的索引。

Shrink

将多个主分片合并为一个索引,减少碎片

Force merge

手动触发合并以减少索引的每个分片中的段数,并释放已删除文档所使用的空间。

Freeze

将索引设为只读,并最大程度地减少其内存占用量。

Delete

永久删除索引,包括其所有数据和元数据。

索引生命周期

索引的生命周期:Hot、Warm、Cold、Delete

阶段概念

Hot:索引处于活跃状态,可update可query

Warm:索引处于温暖状态,此时的索引不可update可query

Cold:索引处于冷却状态,此时索引不可update可query,但相较于Warm状态,此时的query很慢。此状态可类比cos

Delete:索引处于删除状态,不再需要该索引,可删除。

阶段执行

ILM会定时扫描索引并对索引的当前阶段所设置的阈值,并进行相应操作。ILM的扫描周期可配置,参数:indices.lifecycle.poll_interval,参数需要根据实际场景进行配置。当系统qps、tps过大或阶段滚动时间阈值过小时,需要适当减小该参数的值。顺便说一下,es支持的单位:

时间单位 含义
d Days
h Hours
m Minutes
s Seconds
ms Milliseconds
micros Microseconds
nanos Nanoseconds

 

字节大小单位 含义
b Bytes
kb Kilobytes
mb Megabytes
gb Gigabytes
tb Terabytes
pb Petabytes

索引生命周期行为

Allocate

行为作用阶段:warm,cold

修改索引设置用以改变节点索引分片以及副本数

该阶段操作配置:

  • number_of_replicas:分配给索引的副本数
  • include:为具有至少一个制定自定义属性的节点分配索引
  • exclude:为没有制定自定义属性的节点分配索引
  • require:为具有所有制定的自定义属性的节点分配索引

Delete

行为作用阶段:delete

删除索引

该阶段操作配置:

  • delete_searchable_snapshot:删除在冷阶段创建的可搜索快照,缺省true。

Force merge

行为作用阶段:hot,warm

强制将索引合并到指定的最大分片中,该行为使得索引变为只读状态

该阶段操作配置:

  • max_num_segments:将多个段合并到一起,合并所有索引为一个索引
  • index_codec:用于压缩文档存储的编解码器。唯一接受的值是 best_compression,使用DEFLATE会得到更好的压缩率,但存储字段的性能会降低。缺省压缩算法为LZ4。

Freeze

行为作用阶段:cold

冻结索引以最大程度地减少其内存占用量。

Megrate

行为作用阶段:warm,cold

字面意思,数据迁移

该阶段操作配置:

  • enabled:控制ILM自动迁移索引,缺省为true

Read Only

行为作用阶段:hot,warm

使索引变为只读,禁止写入

需要注意的是,在hot阶段有几个状态,只有索引为rollover状态时,才可以使用readonly行为,否则ILM会拒绝该策略

该阶段操作无配置项

Rollover

行为作用阶段:hot

已存在的索引达到滚动阈值后将滚动到一个新的目标索引

  • 索引名称需要满足正则:^.*-\d+$ 可通过该正则校验索引名称规范
  • 必须配置索引别用用以滚动:index.lifecycle.rollover_alias
  • 索引别名必须配置为可写入

 

PUT my-index-000001
{
  "settings": {
    "index.lifecycle.name": "my_policy",
    "index.lifecycle.rollover_alias": "my_data"
  },
  "aliases": {
    "my_data": {
      "is_write_index": true
    }
  }
}

 

该阶段操作配置:

  • max_age:索引在该阶段最大存活时间,当达到最大时间后会触发索引滚动,创建索引时开始计时,并于滚动后修改阶段状态并重新计时。
  • max_docs:索引在该阶段最大写入文档数,当达到阈值后会触发索引滚动。
  • max_size:索引在该阶段最大文档容量,该持久化字节大小为主分片大小,不包括副本

Searchable snapshot

行为作用阶段:hot,cold

为配置的存储库中的托管索引创建快照,并将其挂载为可搜索快照。如果托管索引是数据流,则索引将替换数据流中的原始索引。

需要注意的是,在hot阶段的几个状态中,必须为rollover状态方可配置搜索快照,否则ILM将拒绝该策略

该阶段操作配置:

  • snapshot_repository:存储快照空间
  • force_merge_index:强制合并托管索引到一个段中,缺省配置为true。

Set priority

行为作用阶段:hot,warm,cold

设置进入hot,warm或者cold阶段的索引的优先级。节点重启后,优先级高的索引优先恢复

该阶段操作配置:

  • priority:索引优先级。必须是0或者更大的数字(建议:0-200)。设置为null删除优先级。

Shrink

行为作用阶段:hot,warm

设置一个索引为只读且收缩该索引至一个新的更少主分片的索引中。新的索引名称模版为:shrink-,即就是在原索引前加shrink-前缀命名。

同样,在作用hot阶段时,只有rollover状态方可生效,否则ILM将拒绝该策略

该阶段操作配置:

  • number_of_shards:收缩后的分片数。必须为数字类型

Unfollow

行为作用阶段:hot,warm,cold

取消关注的索引会执行如下操作:

  • 暂停跟随者索引
  • 关闭关注着索引
  • 取消关注领导者索引
  • 打开跟随者索引

Wait for snapshot

行为作用阶段:delete

在移除索引之前等待SLM策略被执行。这个行为确保了已删除的索引快照可用。

该阶段操作配置:

  • policy:删除行为应该所要等待SLM策略的名称。

实践

用DBbrain公共平台做例,根据实际项目阐述ilm的使用配置,并给出一个完整的模版,cp即用

curl --location --request PUT 'localhost:9200/_ilm/policy/custom-policy?pretty' \
--header 'Content-Type: application/json' \
--data-raw '{
    "policy": {
        "phases": {
            "hot": {
                "actions": {
                    "rollover": {
                        "max_size": "40GB",
                        "max_age": "1d",
                        "max_docs": 20000000
                    },
                    "set_priority": {
                        "priority": 100
                    }
                }
            },
            "warm": {
                "min_age": "1d",
                "actions": {
                    "forcemerge": {
                        "max_num_segments": 1
                    },
                    "shrink": {
                        "number_of_shards": 1
                    },
                    "allocate": {
                        "number_of_replicas": 2
                    },
                    "set_priority": {
                        "priority": 50
                    }
                }
            },
            "delete": {
                "min_age": "2d",
                "actions": {
                    "delete": {}
                }
            }
        }
    }
}'

如上模版是目前实际使用的ILM策略。

绑定ILM策略生成索引模版

curl --location --request PUT 'http://localhost:9200/_index_template/metric_template_for_custom' \
--header 'Content-Type: application/json' \
--data-raw '{
    "index_patterns": [
        "metric*"
    ],
    "data_stream": {},
    "template": {
        "settings": {
            "index": {
                "number_of_shards": 1,
                "number_of_replicas": 1,
                "lifecycle.name": "custom-policy",
                "lifecycle.rollover_alias": "metric"
            }
        },
        "mappings": {
            "_source": {
                "enabled": true
            },
            "properties": {
                "instance_id": {
                    "ignore_above": 1024,
                    "type": "keyword"
                },
                "feature": {
                    "properties": {
                        "mem": {
                            "type": "float"
                        }
                    }
                }
            }
        }
    }
}'

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(大数据,#,Elasticsearch,elasticsearch,ILM)