zoukankan      html  css  js  c++  java
  • Elasticsearch索引生命周期管理方案

    一、前言

    在 Elasticsearch 的日常中,有很多如存储 「系统日志」、「行为数据」等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长 索引 的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对 索引 进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能;

    在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套 UI 界面来配置策略。本文主要介绍 Elasticsearch 索引生命周期管理如何配置和使用。

    二、生命周期

    2.1. 阶段介绍

    索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作。
    rollover:滚动更新创建的新索引将添加到索引别名,并被指定为写索引。

    • 4个阶段中只有hot阶段是必须的
      yaVv80.md.jpg

    索引根据时间参数min_age进入生命周期阶段,若未设置,默认是0ms。min_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min_age是从索引滚动开始计算。注意,在检查min_age参数并进入下一个阶段前,当前阶段的操作必须完成。

    2.2. 阶段动作

    yaZCb4.png

    2.3. 例子

    下面以索引 syslog-2020.10.01 为例子,在索引创建 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除
    yaZV8x.png

    三、模拟过程

    3.1. 创建索引生命周期策略

    假设 Policy 设定如下:

    • 索引以每10个文档做一次 Rollover
    • Rollover 后 5 秒转为 Warm 阶段
    • Rollover 后 20 秒转为 Cold 阶段
    • Rollover 后 40 秒删除
    curl -XPUT "http://$IP:9200/_ilm/policy/my_ilm_policy" 
        -H 'Content-Type: application/json' 
        -u elastic:changeme 
        -d '{
          "policy": {
            "phases": {
              "hot": {
                "actions": {
                  "rollover": {
                    "max_docs": "10"
                  }
                }
              },
              "warm": {
                "min_age": "5s",
                "actions": {
                  "allocate": {
                    "include": {
                      "box_type": "warm"
                    }
                  }
                }
              },
              "cold": {
                "min_age": "20s",
                "actions": {
                  "allocate": {
                    "include": {
                      "box_type": "cold"
                    }
                  }
                }
              },
              "delete": {
                "min_age": "40s",
                "actions": {
                  "delete": {}
                }
              }
            }
          }
        }'
    
    • ip、用户名和密码按实际情况修改

    3.2. 关联策略

    关联策略有两种方式,分别是使用索引模板关联和索引直接关联

    3.2.1. 索引模板关联

    索引模板来创建所需的索引,并关联ilm策略

    curl -XPUT "http://$IP:9200/_template/my_test_template" 
        -H 'Content-Type: application/json' 
        -u elastic:changeme 
        -d '{
            "index_patterns": ["my-test-*"], 
            "settings": {
                "number_of_shards": 1,
                "number_of_replicas": 0,
                "index.lifecycle.name": "my_ilm_policy", 
                "index.lifecycle.rollover_alias": "my-test",
                "index.routing.allocation.include.box_type": "hot"
            }
        }'
    
    • ip、用户名和密码按实际情况修改
    • index.lifecycle.name:指明该索引应用的 ILM Policy index.lifecycle.rollover_alias:指明在 Rollover 的时候使用的 alias index.routing.allocation.include.box_type:指明新建的索引都分配在 hot 节点上

    3.2.2. 索引直接关联

    为现有的索引单独关联策略

    curl -XPUT "http://$IP:9200/my-test-*/_settings" 
        -H 'Content-Type: application/json' 
        -u elastic:changeme 
        -d '{
          "index": {
            "lifecycle": {
              "name": "my_ilm_policy"
            }
          }
        }'
    
    • ip、用户名和密码按实际情况修改

    ```

    3.3. 查看索引所处阶段

    http://:9200$IP/my-test-*/_ilm/explai

    http://$IP:9200/my-test-*/_ilm/explain
    

    3.4. 更新策略

    • 如果没有index应用这份策略,那么我们可以直接更新该策略。
    • 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。
    • 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。

    3.5. kibana图形化操作

    上述的步骤,大部分都可以在 Kibana 中以图形化界面的方式进行操作
    yaZBIs.md.jpg
    yaZrin.md.jpg

    • 「注意」:如果使用图形化界面来创建策略,删除阶段会缺失 actions 内容而导致无法删除

    四、修改轮询间隔(可选)

    ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了测试更快地看到效果,可将其修改为1秒。

    curl -XPUT "http://$IP:9200/_cluster/settings" 
        -H 'Content-Type: application/json' 
        -u elastic:changeme 
        -d '{
            "persistent": {
              "indices.lifecycle.poll_interval":"1s"
            }
        }'
    
    • ip、用户名和密码按实际情况修改

    五、启动和停止索引生命周期管理

    • ILM 默认开启
    • 由ILM管理的所有索引将继续执行其策略。有时可能不需要某些索引,甚至集群中的所有索引都不需要。例如,当需要集群拓扑更改时,可能会有计划的维护窗口,这可能会影响正在运行的ILM操作。因此,ILM有两种禁用操作的方法。
    • 停止ILM时,快照生命周期管理操作也会停止,这意味着不会创建计划的快照(当前正在进行的快照不受影响)。
      通常,ILM将默认运行。要查看ILM的当前运行状态,请使用Get Status API 来查看ILM的当前状态。
    GET  _ilm/status
    

    如果请求没有遇到错误,您将收到以下结果:

    {
        "operation_mode": "RUNNING"
    }
    

    「ILM的操作模式」:
    yaZIiR.png

    5.1. 停止ILM

    可以暂停ILM服务,以便使用Stop API不再执行其他步骤。

    POST  _ilm/stop
    

    停止后,所有其他政策措施都将停止。这将反映在状态API中

    {
        "operation_mode": "STOPPING"
    }
    

    然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该STOPPED模式

    {
        "operation_mode": "STOPPED"
    }
    

    5.2. 启动ILM

    要启动ILM并继续执行策略,请使用Start API。

    POST  _ilm/start
    

    Start API将向ILM服务发送请求,以立即开始正常操作。

    {
      "operation_mode": "RUNNING"
    }
    
  • 相关阅读:
    The Worm Turns
    Equations
    Snail’s trouble
    WuKong
    Codeforces 369 C Valera and Elections
    POJ 2186 Popular Cows
    Codefroces 366 D Dima and Trap Graph (最短路)
    Codefroces 366 C Dima and Salad(dp)
    Codefroces 374 B Inna and Sequence (树状数组 || 线段树)
    Codeforces 374 C Inna and Dima (DFS)
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/14391340.html
Copyright © 2011-2022 走看看