前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ES三周年】结合ilm的方式实现滚动索引

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

原创
作者头像
勤奋树苗
发布2023-02-07 10:46:06
1.1K0
发布2023-02-07 10:46:06
举报
文章被收录于专栏:勤奋树苗的专栏

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 结合ilm的方式实现滚动索引 (建议elasticsearch 7.0+ 以上版本使用)
    • 常用命令:
      • 核心步骤:
        • 1、创建生命周期policy
        • 2、创建索引模板,模板中关联policy和别名
        • 3、创建符合模板的起始索引 ,并指定别名 (索引名应该符合index_patterns定义的正则,别名应与模板的index.opendistro.index_state_management.rollover_alias配置相同)
    相关产品与服务
    Elasticsearch Service
    腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档