ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【ElasticSearch】索引生命周期管理(三) 避坑指南

2022-08-26 01:30:09  阅读:227  来源: 互联网

标签:audit index 生命周期 policy 避坑 索引 ElasticSearch test delete


背景

  主要是针对在使用索引生命周期的去管理索引的过程中,记录所踩到坑,避免同样的问题再次发生

问题

  1. 索引生命周期中设置各个阶段的市场以及索引rollover的时间不合理,导致整个索引数据被删除
   例如需求如下:
   业务需求:
      数据至少保存半年,删除半年前的数据
   生命周期设计:
      hot阶段--->delete阶段 即 180天后,当前索引文件的生命周期由hot阶段变为delete阶段,变为delete阶段的文件将被删除
      生命周期实现(错误)示范

PUT  _ilm/policy/test_ilm_policy
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_age" : "30d"
            },
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : {
          "min_age" : "180d",
          "actions" : {
            "delete" : { }
          }
        }
      }
    }
  }

      生命周期错误原因: 
      rollerover粒度过大,导致索引进入delete阶段会删除整个30天的索引的数据
      分析如下:
      当处于hot阶段的例如:索引A-0001经历了30天后,进行了rollover,意味着旧索引在过150天后,索引A-0001即将进入delete阶段,但是在索引A-0001中包含有第1天-第30天的数据,理论上只要删除第一天的数据即可,因此需要修改roller的时间粒度
   修改后的生命周期配置如下:(rollover粒度修改为1天)

PUT  _ilm/policy/test_ilm_policy_v2
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_age" : "1d"
            },
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : {
          "min_age" : "180d",
          "actions" : {
            "delete" : { }
          }
        }
      }
    }
  }

  2. 初始索引设置失败,导致索引被应用到生命周期和索引模板时,出现异常 The write index may be explicitly disabled using is_write_index=false
      索引模板如下:

PUT _template/test_template
{
    "order" : 0,
    "index_patterns" : [
      "text-audit*"
    ],
    "settings" : {
      "index" : {
        "lifecycle" : {
          "name" : "text_audit_ilm_policy_3",
          "rollover_alias" : "text-audit"
        },
        "number_of_shards" : "1",
        "number_of_replicas" : "0"
      }
    },
    "mappings" : {
      "text_audit_type" : {
        "_source" : {
          "enabled" : true
        },
        "properties" : {
          "bizType" : {
            "type" : "keyword"
          },
      .....省略
          }
        }
      }
    },
    "aliases" : { 
    
      }
    }
  }

    索引生命周期如下:

PUT  _ilm/policy/test_ilm_policy_v2
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_age" : "1d"
            },
            "set_priority" : {
              "priority" : 100
            }
          }
        },
        "delete" : {
          "min_age" : "180d",
          "actions" : {
            "delete" : { }
          }
        }
      }
    }
  }

    设置初始索引(错误)

PUT text-audit-0001
{
  "aliases": {
    "text-audit": {

    }
  }
}

    配置完成后整个逻辑应该
      创建索引test-audit-0001,且设置别名为test-audit,由于指定了索引模板test_template,因此这个索引会套用模板去设置对应的字段和设置,以及生命周期配置
      但是
      当索引进行rollover时,新索引为test-audit-0002,此时 test-audit-0002和test-audit-0001都拥有相同的别名 test-audit ,项目中也是使用别名操作,
      如果一个索引别名被应用到了多个索引,则必须制定有且一个索引的属性is_write_index=true,如果没制定该属性或指定多个相同别名的索引is_write_index=true ,则会出现异常
      The write index may be explicitly disabled using is_write_index=false
    正确的设置初始索引

PUT text-audit-0001
{
  "aliases": {
    "text-audit": {
       "is_write_index":true
    }
  }
}    

    分析:
      正确的设置初始索引test-audit-0001,test-audit-0001 进行rollerover为test-audit-0002时,索引将会应用到别名,并且将is_write_index=true传递给test-audit-0002,同时test-audit-0001索引中的is_write_index=true将会变为false


    

  

标签:audit,index,生命周期,policy,避坑,索引,ElasticSearch,test,delete
来源: https://www.cnblogs.com/july-sunny/p/16626312.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有