其他分享
首页 > 其他分享> > 【ElasticSearch】索引生命周期管理(三) 避坑指南

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

作者:互联网

背景

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

问题

  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