elasticsearch-索引生命周期管理
索引生命周期分为4个阶段:hot、warm、cold、delete
其中hot阶段主要负责对索引进行滚动更新操作,warm、cold、delete阶段主要负责进一步处理滚动更新后的数据
阶段 | 介绍 |
---|---|
hot | 热数据阶段,主要处理时序数据的实时写入。可根据索引的文档数、大小、时长决定是否调用rollover API来滚动更新索引 |
warm | 冷数据阶段,索引不再写入,主要用来提供查询 |
cold | 冷数据阶段,索引不再更新,查询很少,查询速度会变慢 |
delete | 删除数据阶段,索引将被删除 |
添加生命周期管理方式
-
通过索引模板添加生命周期管理策略
将策略应用到整个别名覆盖的索引下
-
为单个索引添加生命周期管理策略
只能覆盖当前索引,新滚动的索引不再受策略影响
生命周期操作
参数 | 说明 |
---|---|
rollover | 当写入索引达到了一定的大小,文档数量或创建时间时,rollover可创建一个新的写入索引,将旧的写入索引的别名去掉,并把别名赋给新的写入索引。所以便可以通过切换别名 控制写入的索引是谁。它可用于Hot 阶段 |
shrink | 减少一个索引的主分片数,可用于Warm 阶段。需要注意的是当shink完成后索引名会由原来的<origin-index-name> 变为shrink-<origin-index-name> |
force merge | 可触发一个索引分片的segment merge,同时释放掉被删除文档的占用空间。用于Warm 阶段 |
allocate | 可指定一个索引的副本数,用于warm, cold 阶段 |
delete | 删除索引,用户delete阶段 |
配置索引生命周期
- 第一步:配置lifecycle检测时间;
- 第二步:创建一个索引策略;
- 第三步:创建一个索引模版,指定使用的索引策略;
- 第四步:创建一个符合上述索引模版的索引;
- 第五步:向索引中写入数据,使索引触发滚动更新策略;
- 第六步:查看索引所处阶段
1.配置lifecycle检测时间
PUT /_cluster/settings
{
"transient": {
"indices.lifecycle.poll_interval": "1s"
}
}
2.创建一个索引策略
PUT /_ilm/policy/lfc_test
{
"policy": {
//阶段设置
"phases": {
"hot": {
"actions": {
"rollover": {
"max_docs": "5"
}
}
},
"warm": {
"min_age": "10s",
"actions": {
"allocate": {
"number_of_replicas": 0
}
}
},
"delete": {
"min_age": "20s",
"actions": {
"delete": {}
}
}
}
}
}
3.创建一个索引模版,指定使用的索引策略
PUT _template/leefs_ilm_template
{
"index_patterns": ["lfc-log-*"],
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "lfc_test",
"index.lifecycle.rollover_alias": "lfc-log"
}
}
4.创建索引模版的索引
DELETE lfc-log*
PUT lfc-log-000001
{
"aliases": {
"lfc-log": {
"is_write_index":true
}
}
}
POST lfc-log/_doc?refresh
{
"name":"test-log"
}
GET /lfc-log/_search
查看索引
GET _alias/lfc-log
{
"lfc-log-000004": {
"aliases": {
"lfc-log": {
"is_write_index": false
}
}
},
"lfc-log-000005": {
"aliases": {
"lfc-log": {
"is_write_index": true
}
}
}
}
查看索引生命周期
GET lfc-log-*/_ilm/explain
生命周期状态管理
查看生命周期状态
GET _ilm/status
{
"operation_mode": "RUNNING"
}
生命周期停止
POST _ilm/stop
{
"operation_mode": "STOPPED"
}
启动生命周期
POST _ilm/start
{
"operation_mode": "RUNNING"
}