【ES三周年】结合ilm的方式实现滚动索引

2023-02-07 10:46:06 浏览数 (1)

结合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:实际是阶段和动作的综合体。

0 人点赞