• elasticsearch生命周期管理


    一、参考

    使用索引生命周期管理实现热温冷架构

    官方文档

    Elasticsearch 集群从 3 节点扩容到温热架构的搭建攻略

    二、概览

    2.1 目标

    (1) 当索引达到约定大小、索引文档数量达到约定数量,自动创建新的索引

    (2) 安装指定周期(1 天,1 周,1 个月)创建索引,将之前的索引存档

    (3) 强制删除过期的索引,以达到保留一定日期范围的数据

    2.2 生命周期策略

    一个生命周期策略定义了:

    (1) 适用于哪些阶段

    (2) 每个适用阶段中有哪些行为

    (3) 什么时候,由当前阶段进入下一个阶段

    三、生命周期的四个阶段

    3.1 热数据阶段

    定义: 索引正在频繁写入和查询

    行为: Set Priority, Unfollow, Force Merge, Rollover

    3.2 温数据阶段

    定义: 索引只能查询,无法写入

    行为: Set Priority, Unfollow, Read-Only, Allocate, Shrink, Force Merge

    3.3 冷数据阶段

    定义: 索引相对较少查询,无法写入

    行为: Set Priority, Unfollow, Allocate, Freeze, Searchable Snapshot

    3.4 删除阶段

    定义: 索引可以被彻底删除

    行为: Wait For Snapshot, Delete

    3.5 阶段何时转移

    由阶段 A 进入阶段 B,需要:

    (1) 阶段 A 中所有行为完成

    (2) 索引的 age 必须大于阶段 B 中定义的最小时间

    示例:

    四、生命周期策略

    4.1 创建策略

    # 创建策略
    PUT _ilm/policy/yztest_policy
    {
      "policy": {
        "phases": {
          "hot": {
            "actions": {
              "rollover": {
                "max_size": "50GB",
                "max_age": "10s",
                "max_docs": 3
              }
            }
          },
          "delete": {
            "min_age": "90d",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
    
    # 创建索引模版,应用上面的策略
    PUT _template/yztest_template
    {
      "index_patterns": [
        "yztest-*"
      ],
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0,
        "index.lifecycle.name": "yztest_policy",
        "index.lifecycle.rollover_alias": "yztest"
      }
    }
    
    
    # 创建索引
    PUT yztest-000001
    {
      "aliases": {
        "yztest": {
          "is_write_index": true
        }
      }
    }
    
    
    

    4.1 策略的缓存

    当一个索引进入一个新的阶段,将会首先缓存新的阶段的定义到索引 metadata 中

    4.2 策略的更新

    五、actions 列表

    5.1 rollover 滚动

    5.2 shrink 分片缩小

    5.3 force merge 分片中分段合并

    5.4 freeze 冻结分片,只读

    5.5 delete 删除分片

    六、ilm api 列表

    6.1 更新策略检查间隔

    # 将时间间隔更新为10s,默认是10m
    PUT _cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": "10s"
      }
    }
    
    

    七、注意和问题

    7.1 如何保证生命周期策略适用于所有索引(包含以后会生成的索引)?

    一般做法是, 先创建一个生命周期策略、一个索引模版,将生命周期策略应用于索引模版上,所有符合模版的索引都会使用相同的生命周期策略

    如果只是对于当前索引(按照时间滚动),指定一个生命周期策略,则滚动后创建的新索引不会使用之前的生命周期策略

    7.2 集群状态为 yellow 时候,生命周期策略会有影响吗?

    即使集群状态是 yellow, 具体索引仍然会按照生命周期策略中定义,正常进行阶段转移,

    但是,因为集群非 green 状态,会有一些清理任务无法完成,所以可能会产生负作用

  • 相关阅读:
    观点 | 为什么说云主机比物理机故障率更低?
    7 天玩转 ASP.NET MVC — 第 7 天
    浅谈 OneAPM 在 express 项目中的实践
    Swift 2.0 到底「新」在哪?
    DevOps:怎么实现源代码注释和系统文档的自动化更新?
    JavaScript学习之路-为什么要学习JavaScript语法
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    AndroidStudio制作登录和注册功能的实现,界面的布局介绍
  • 原文地址:https://www.cnblogs.com/thewindyz/p/14169313.html
Copyright © 2020-2023  润新知