💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 一、介绍 `Elastic Stack 6.6`版本后推出了新功能`Index Lifecycle Management(索引生命周期管理)`,支持针对索引的全生命周期托管管理,并且在`Kibana`上也提供了一套 UI 界面来配置策略。 ## 二、生命周期 ### 2.1. 阶段介绍 索引生命周期分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作。 > rollover:滚动更新创建的新索引将添加到索引别名,并被指定为写索引。 > 4个阶段中只有hot阶段是必须的 ![](https://img.kancloud.cn/8a/9c/8a9c9f53fe389056fdbc8e00b9d5f427_1636x600.png) 索引根据时间参数min\_age进入生命周期阶段,若未设置,默认是0ms。min\_age通常是从创建索引的时间开始计算,如果索引被设置为滚动索引,那么min\_age是从索引滚动开始计算。注意,在检查min\_age参数并进入下一个阶段前,当前阶段的操作必须完成。 ### 2.2. 阶段动作 | 阶段/action | 优先级设置 | 取消跟随 | 滚动索引 | 分片分配 | 只读 | 强制段合并 | 收缩索引 | 冻结索引 | 删除 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | hot | √ | √ | √ | × | × | × | × | × | × | | warm | √ | √ | × | √ | √ | √ | √ | × | × | | cold | √ | √ | × | √ | × | × | × | √ | × | | delete | × | × | × | × | × | × | × | × | √ | ### 2.3. 例子 下面以索引`syslog-2020.10.01`为例子,在索引创建 1 天后转为 Warm 阶段,30 天后转为 Cold 阶段,30 天后删除 | 日期 | 动作 | 阶段 | | --- | --- | --- | | 2020-10-01 | 创建索引`syslog-2020.10.01`,处理读写请求 | hot阶段 | | 2020-10-02 | `syslog-2020.10.01`改为只读 | warm阶段 | | 2020-11-01 | `syslog-2020.10.01`为只读,并迁移到冷节点储存 | cold阶段 | | 2020-12-01 | 删除索引`syslog-2020.10.01` | delete阶段 | ## 三、模拟过程 ### 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](http://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://$IP:9200/my-test-*/_ilm/explain ~~~ ### 3.4. 更新策略 1. 如果没有index应用这份策略,那么我们可以直接更新该策略。 2. 如果有index应用了这份策略,那么当前正在执行的阶段不会同步修改,当当前阶段结束后,会进入新版本策略的下个阶段。 3. 如果更换了策略,当前正在执行的阶段不会变化,在结束当前阶段后,将会由新的策略管理下一个生命周期。 ### 3.5. kibana图形化操作 上述的步骤,大部分都可以在`Kibana`中以图形化界面的方式进行操作 ![](https://img.kancloud.cn/72/06/7206aaf542448c60af806d414bc00491_1524x594.png) ![](https://img.kancloud.cn/9b/72/9b72f42d047742f28fce68c129e17e84_1329x882.png) > 注意:如果使用图形化界面来创建策略,删除阶段会缺失`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](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-status.html)来查看ILM的当前状态。 ~~~ GET _ilm/status ~~~ 如果请求没有遇到错误,您将收到以下结果: ~~~ { "operation_mode": "RUNNING" } ~~~ **ILM的操作模式**: | 阶段/action | 优先级设置 | | --- | --- | | 正在运行 | 正常运行,所有策略均正常执行 | | 停止 | ILM已收到停止请求,但仍在处理某些策略 | | 已停止 | 这表示没有执行任何策略的状态 | ### 5.1. 停止ILM 可以暂停ILM服务,以便使用[Stop API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-stop.html)不再执行其他步骤。 ~~~ POST _ilm/stop ~~~ 停止后,所有其他政策措施都将停止。这将反映在状态API中 ~~~ { "operation_mode": "STOPPING" } ~~~ 然后,ILM服务将异步地将所有策略运行到可以安全停止的位置。在ILM确认它是安全的之后,它将移至该`STOPPED`模式 ~~~ { "operation_mode": "STOPPED" } ~~~ ### 5.2. 启动ILM 要启动ILM并继续执行策略,请使用[Start API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-start.html)。 ~~~ POST _ilm/start ~~~ Start API将向ILM服务发送请求,以立即开始正常操作。 ~~~ { "operation_mode": "RUNNING" } ~~~ ## 六、API清单 您可以使用以下API来管理索引策略。有关更多信息,请参阅[管理索引生命周期](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/index-lifecycle-management.html)。 * 政策管理API * [创建生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-put-lifecycle.html) * [获取生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-lifecycle.html) * [删除生命周期策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-delete-lifecycle.html) * 索引管理API * [将索引移至步骤](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-move-to-step.html) * [重试索引策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-retry-policy.html) * [从索引中删除策略](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-remove-policy.html) * 运营管理API * [获取ILM操作模式](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-get-status.html) * [启动ILM](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-start.html) * [停止ILM](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-stop.html) * [解释API](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/ilm-explain-lifecycle.html)