elasticsearch的ILM(Index Lifecycle Management)操作详解

2023-11-10 11:03:44 浏览数 (3)

前言:在早期的elasticsearch集群中,集群管理者面对众多的集群索引只能通过手动操作的方式对索引进行管理。尽管可以通过脚本等定时任务的方式对索引进行创建,删除,扩张,收缩等操作,但在这个过程中仍然缺乏对索引所处步骤的监控。更多的仍然依赖人工对索引进行管理。所以在elasticsearch6.6版本中引入了ILM功能;

一.什么是ILM

Index lifecycle management(索引生命周期管理)是elasticsearch提供的一种用于自动管理索引的生命周期的功能。允许使用者定义索引的各个阶段,从创建至删除。并允许使用者在每个阶段定义索引需要执行的特定动作。这些动作包含索引创建,rollover滚动规则, shrink收缩索引,索引降冷,删除索引等动作。极大程度的降低了elasticsearch索引管理的成本。

二.ILM的应用

1.策略管理(Policy management)

代码语言:javascript复制
PUT _ilm/policy/<policy_id>

我们可以使用该API创建生命周期策略。如果策略存在,则会更新相应policy_id的策略。

代码语言:javascript复制
PUT _ilm/policy/my_policy
{
  "policy": {
    "_meta": {
      "description": "used for nginx log",
      "project": {
        "name": "myProject",
        "department": "myDepartment"
      }
    },
    "phases": {
      "warm": {
        "min_age": "10d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

例如:上述语句我们创建了一个名为my_policy的策略。策略中包含了两个步骤:第一步,当索引创建10天后开始进行降冷(将索引从热节点搬迁至冷节点的过程)。第二步,当索引创建30天后进行删除动作。这个简单的策略就完成了索引从降冷到删除的整个过程。在整个链路中不会再依赖人为干预。

同样的,我们也可以借助Kibana工具进行生命周期策略的创建,具体步骤为:

1.1 打开索引管理页面,选中index lifecycle policies;

1.2 选择Create policy进行策略的创建

1.3 创建策略

在hot阶段我们可以看到ILM提供了rollover,forcemerge,shrink三个动作。我们将对这三个步骤分别进行说明。

rollover:索引处于hot阶段时,我们通过设置rollover规则,让hot阶段的索引始终按照我们设置的条件进行滚动,这样当索引满足滚动条件后,就会滚动出新索引,此时写入请求也会将数据写入至新索引中。合理的索引大小便于我们对索引进行管理,同样有利于ILM进行后续步骤。

forcemerge:当我们开启Force merge data后,可以设置segments的数量,elasticsearch会根据我们设置的segments的数量来对当前阶段的索引进行merge操作。

shrink:在hot阶段,我们也可以对索引进行收缩。通过设置收缩后索引的主分片数,elasticsearch会对相应索引进行收缩。减少索引的主分片数。

在warm阶段(降冷阶段):我们可以在右上角设置索引的降冷时间,提供的操作时间粒度从天到纳秒。

在降冷阶段,elasticsearch在策略中提供了replicas,shrink,Forcemerge,read only,data allocation几个步骤。当我们点击右上角的"垃圾桶"按钮时,就会打开索引的删除步骤,我们将对这几个步骤分别进行说明。

replicas:在降冷阶段中我们可以设置索引的副本数,当索引在降冷时就会根据我们设置的副本数在索引降冷时,对相关索引的副本数进行配置。如果我们不设置副本数时,将会保持索引原有的副本数配置。

shrink:如前文所说,在降冷阶段,我们仍然可以对索引的主分片数进行收缩,以便节省集群资源。

force merge:当我们打开该动作时,在索引降冷阶段我们仍然可以设置merge时segments的数量。然后elasticsearch会自动对降冷索引进行merge操作。

read only:当我们打开该动作后,索引在进行完前置动作后,就会被置为只读。此时索引将无法再写入,且元数据将不会在变更。

data allocation:数据分配,通过选择不同的操作项,我们可以控制数据在节点上的分配。

在delete阶段,我们可以在右上角设置索引删除时间,时间粒度从天至纳秒。索引在被降冷后,到达约定时间,elasticsearch回自动对索引进行删除。

在生命周期策略中。每一个阶段中的每一个步骤均为自上而下执行。

2.关联模板并启动索引

在策略创建完成后,并不会自动关联至索引。也就是此时我们策略并未对集群中的索引进行管理。在策略列表中,我们可以看到关联的索引为0个。此时我们的策略并未配置完全。

在策略创建完成后,我们仍需要对策略绑定模板,只有在我们绑定模板后,基于该模板创建的后续索引才会自动被策略所管理。

我们在这里选择需要绑定的模板;

在绑定模板后,基于该模板创建的索引在创建完成后,在索引的settings中我们就可以看到对应的lifecycle。此时我们的索引才正式被ILM策略所托管。

需要注意的是:索引生命周期策略只能管理策略创建完成并绑定模板后,基于该模板创建出的相关索引,对于存量索引仍需手动操作。

当我们在Kibana页面发现配置的策略不生效时,我们可以通过使用API的方式进行策略创建与模板关联。语句如下:

代码语言:javascript复制
PUT _ilm/policy/ilm_name
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "rollover": {
            "max_size": "100gb",
            "max_age": "5d",
            "max_docs": 9999999
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "delete": {
        "min_age": "5d",
        "actions": {
          "delete" : { }
        }
      }
    }
  }
}

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞