引用
涉及的概念
- 索引生命周期
- 索引模板
- 索引别名
索引生命周期
phases.hot.min_age | 设置索引进入hot阶段所需的时间。 |
---|---|
phases.hot.actions.set_priority.priority | 设置hot阶段索引的优先级。 |
phases.warm.min_age | 设置索引进入warm阶段所需的时间。 |
phases.warm.actions.allocate.number_of_replicas | 设置warm阶段索引的副本数。 |
phases.warm.actions.allocate.require.box_type | 设置warm阶段索引分片分配的策略。例如将分片分配到warm节点。 |
phases.warm.actions.set_priority.priority | 设置warm阶段索引的优先级。 |
phases.cold.min_age | 设置索引进入cold阶段所需的时间。 |
phases.cold.actions.set_priority.priority | 设置cold阶段索引的优先级。 |
PUT /_ilm/policy/<索引生命周期名>
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "1d",
"max_size": "1gb",
"max_docs": 10000
},
"set_priority": {
"priority": 100
}
}
},
"warm": {
"min_age": "7d",
"actions": {
"allocate": {
"require": {
"box_type": "warm"
},
"forcemerge": {
"max_num_segments": 1
},
"shrink": {
"number_of_shards": 1
},
"set_priority": {
"priority": 50
}
}
},
"cold": {
"min_age": "30d",
"actions": {
"allocate": {
"require": {
"box_type": "cold"
}
},
"set_priority": {
"priority": 0
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
上面 json 的配置意思如下:
假设初始索引是-000001
,它当前位于 hot 阶段。(所有索引初始的时候都是 hot 阶段,因为phases.hot.min_age默认是0)
hot 阶段下,-000001
满足下列任一条件,滚动生成新索引-000002
:
- 存活1天
- 索引大于1GB
- 索引大于10000行
滚动更新后,当-000001
-
存活 7 天,就会进入warm 阶段,并开始强制合并和压缩,以及将
-000001
转移到warm
节点上。 🚨需要先存在
warm
角色的节点 -
存活 30 天,就会进入 cold 阶段,并将
-000001
转移到cold
节点上。 🚨需要先存在
cold
角色的节点 -
存活 90 天,就会进入 delete 阶段,将
-000001
索引删除。
索引模板
index_patterns | 匹配索引名的正则,凡是满足这个值的索引都会附加索引模板定义的属性 |
---|---|
number_of_shards | 分片数 |
index.lifecycle.name | 生命周期名 |
index.lifecycle.rollover_alias | 生命周期滚动更新的时候,需要的索引别名 |
PUT _template/<索引模板名>
{
"index_patterns": ["app-prod-*"],
"settings": {
"number_of_shards": 1,
"index.lifecycle.name": "app-prod",
"index.lifecycle.rollover_alias": "app-prod"
}
}
索引别名
生命周期滚动更新必须的东西。
因为要支持生命周期滚动更新,则索引初始名必须是xxx-000001
PUT /<索引名>/_alias/<索引别名>
logstash
output {
elasticsearch {
ilm_rollover_alias => "app-prod"
ilm_pattern => "{now/d}-00001"
ilm_policy => "app-prod"
}
}