前言
正文
ILM定义了四个生命周期阶段:
Hot:正在积极地更新和查询索引。
Warm:不再更新索引,但仍在查询。
cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。
Delete:不再需要该索引,可以安全地将其删除。
ILM定期运行(indices.lifecycle.poll_interval),默认是10分钟,检查索引是否符合策略标准,并执行所需的任何步骤。
为了避免争用情况,ILM可能需要运行多次以执行完成一项动作所需的所有步骤。所以,即使indices.lifecycle.poll_interval设置为10分钟并且索引符合rollover,也可能需要20分钟才能完成rollover。
举例:比如我们设定超过10篇文档就rollover,但是因为这个过程不是立即实现的,可能第11,12篇还在落在之前的索引上,直到rollover成功后,新建的文档才会落在新的索引上。
注意:
为确保策略更新不会将索引置于无法退出当前阶段的状态,进入阶段时,阶段定义会缓存在索引元数据中。此缓存的定义用于完成该阶段。
当索引前进到下一阶段时,它将使用更新策略中的阶段定义。
ilm默认是启动的,状态为running,可以使用下面的api操作一下。
# 查看状态
GET _ilm/status
# 启动
POST _ilm/start
# 停止
POST _ilm/stop
rollover
这个是比较常用的,单独拿出来。
rollover可以基于大小,文档数或使用期限创建新的索引去保存数据。
操作体验下:
1.创建一条策略
# 创建一条策略(这里设置超过3条数据就rollover)
PUT _ilm/policy/test-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": 3
},
"set_priority": {
"priority": 100
}
}
},
"delete": {
"min_age": "220d",
"actions": {
"delete": {
}
}
}
}
}
}
# 顺带列一下其它的api,如下:
# 查询
GET _ilm/policy
GET _ilm/policy/<policy_id>
# 删除策略
DELETE _ilm/policy/<policy_id>
# 从index中移除策略
POST <index>/_ilm/remove
# 查看索引当前所在生命周期状态
GET <index>/_ilm/explain
# 重试,一般通过explain查看策略状态,如果是error,则按照错误信息更新策略,然后可以执行retry进行重试
POST <index>/_ilm/retry
2. 创建index template应用策略:
# 创建index模板
PUT _index_template/test-template
{
"index_patterns": ["test-*"],
"template":{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"index.lifecycle.name": "test-policy",
"index.lifecycle.rollover_alias": "test-index"