目录
概念概述
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-<original-index-name>,即就是在原索引前加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中索引生命周期管理(ILM)的概念、触发行为及实践配置。涵盖rollover、shrink等关键行为及其配置参数,并提供一个实际使用的ILM策略模板。
754

被折叠的 条评论
为什么被折叠?



