结合ilm的方式实现滚动索引 (建议elasticsearch 7.0 以上版本使用)
ilm: 索引生命周期管理,把索引分为了Hot、Warm、Cold、delete阶段。
基本概念 | 描述 |
---|---|
policy | 索引生命周期中定义的策略 |
states | 描述索引当前所处的状态,例如热状态、冷状态 |
actions | 指策略进入某个状态时依次执行的动作 |
conditons | 指状态之间转移需要满足的条件 |
常用命令:
(华为es版本)
常用操作 | 命令 |
---|---|
查看policy_1策略的内容 | GET _opendistro/_ism/policies/policy_1 |
删除index_1索引的策略 | POST _opendistro/_ism/remove/index_1 |
修改index_1索引的策略 | POST _opendistro/_ism/change_policy/index_1 |
重试index_1中的close状态 | POST _opendistro/_ism/retry/index_1{"state": "close"} |
查看index_1索引中的策略的执行情况 | GET _opendistro/_ism/explain/index_1 |
删除policy_1策略 | DELETE _opendistro/_ism/policies/policy_1 |
核心步骤:
1、创建生命周期policy
完整的生命周期定义demo(华为实现方式):
代码语言:javascript复制PUT _opendistro/_ism/policies/default_policy
{
"policy":{
"description":"this polciy is for all action.",
"default_state":"hot",
"states":[
{
"name":"hot",
"actions":[
{
"index_priority":{
"priority":10
}
},
{
"rollover":{
"min_size":"1tb",
"min_doc_count":"1000000000",
"min_index_age":"1d"
}
}
],
"transitions":[
{
"state_name":"warm",
"conditions":{
"min_index_age":"15d"
}
}
]
},
{
"name":"warm",
"actions":[
{
"index_priority":{
"priority":5
}
},
{
"read_only":{
}
},
{
"allocation":{
"require":{
"temperature":"warm"
}
}
},
{
"force_merge":{
"max_num_segments":1
}
}
],
"transitions":[
{
"state_name":"cold",
"conditions":{
"min_index_age":"60d"
}
}
]
},
{
"name":"cold",
"actions":[
{
"index_priority":{
"priority":1
}
},
{
"freeze_index":{
}
},
{
"shrink":{
"number_of_shards":10
}
}
],
"transitions":[
{
"state_name":"close",
"conditions":{
"min_index_age":"90d"
}
}
]
},
{
"name":"close",
"actions":[
{
"close":{
}
}
]
}
]
}
}
若不需要分冷热阶段, 则可以只规定Hot阶段来实现自动rollover,以下policy规定了索引满足”大小1tb“或”总数1w条“或”时间过一天“,则触发一次滚动索引, 请根据具体需求按需改造:
代码语言:javascript复制PUT _opendistro/_ism/policies/default_policy
{
"policy":{
"description":"this polciy is for all action.",
"default_state":"hot",
"states":[
{
"name":"hot",
"actions":[
{
"index_priority":{
"priority":100
}
},
{
"rollover":{
"min_size":"1tb",
"min_doc_count":"1000000",
"min_index_age":"1d"
}
}
]
}
]
}
}
2、创建索引模板,模板中关联policy和别名
(华为实现方式)
代码语言:javascript复制PUT _template/<template_name>
{
"index_patterns": ["index_name-*"],
"settings": {
"index.opendistro.index_state_management.policy_id": "default_policy",
"index.opendistro.index_state_management.rollover_alias":"index_name"
}
}
3、创建符合模板的起始索引 ,并指定别名 (索引名应该符合index_patterns定义的正则,别名应与模板的index.opendistro.index_state_management.rollover_alias配置相同)
代码语言:javascript复制PUT index_name-00001
"aliases":{
"index_name":{
"is_write_index": true
}
}
注: 第一次插入的索引需要满足^.*-d $的正则,后续的滚动索引会根据当前索引 1 的形式创建。 如: 第一次创建的索引是index_name-00001,则后续的滚动索引为 index_name-00002、index_name-00003、index_name-00004.....
接下来就可以通过相应的别名(如index_name)进行索引的读写了。
1、创建后会有一个滚动索引初始化过程, 大概20分钟
2、ilm实际上也是一个定时任务, 默认会隔10及分钟判断索引是否满足滚动索引条件。满足后才触发滚动索引,并不是一满足调节就触发滚动索引。
可通过GET _opendistro/_ism/explain/index_1着看相关的执行情况。
PS:索引生命周期管理需要加强对三个概念的认知:
- 横向——Phrase 阶段:Hot、Warm、Cold、Delete 等对应索引的生、老、病、死。
- 纵向——Actions 阶段:各个阶段的动作。
- 横向纵向整合的Policy:实际是阶段和动作的综合体。