欢迎光临
我们一直在努力

如何利用 Index Lifecycle Management 实现自动化的索引生命周期管理

索引生命周期管理(Index Lifecycle Management, ILM)是 Elasticsearch 提供的一个强大功能,用于自动化管理索引从创建到删除的整个生命周期。合理使用 ILM 可以帮助我们节约存储成本、提高搜索性能,并确保数据合规性。

本文将通过一个实操案例,演示如何配置一个包含 Hot(热)、Warm(温)和 Delete(删除)三个阶段的 ILM 策略,并将其应用到索引模板上。

1. 理解 ILM 阶段

ILM 策略通常包含以下几个阶段:

阶段 描述 主要操作
Hot (热) 索引正在积极写入和读取。性能要求最高。 写入数据、Rollover(索引轮转)。
Warm (温) 索引不再写入,但仍频繁读取。 设为只读、降低副本数。
Cold (冷) 索引极少访问,但需保留。 迁移到廉价存储、强制合并段。
Delete (删除) 数据已过期或不再需要。 彻底删除索引。

2. 步骤实操

我们以一个日志索引为例,要求数据写入 1 分钟后轮转,10 分钟后进入 Warm 阶段,20 分钟后删除。

步骤 2.1:创建 ILM 策略

我们创建一个名为 log_data_ilm_policy 的策略。为了方便测试轮转(Rollover),我们将 Hot 阶段的轮转条件设置为:索引大小达到 50MB 包含至少 1 个文档 经过 1 分钟。

PUT _ilm/policy/log_data_ilm_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "1m", 
            "max_size": "50mb", 
            "max_docs": 1
          }
        }
      },
      "warm": {
        "min_age": "10m", 
        "actions": {
          "set_priority": {
            "priority": 0
          },
          "readonly": {}
        }
      },
      "delete": {
        "min_age": "20m", 
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

步骤 2.2:创建索引模板

接下来,我们需要创建一个索引模板,将该策略应用于所有匹配 logs-*** 模式的新索引。同时,我们需要定义一个 **rollover_alias,这是 ILM 自动轮转的关键。

PUT _index_template/log_data_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "index.lifecycle.name": "log_data_ilm_policy", 
      "index.lifecycle.rollover_alias": "logs_write", 
      "index.number_of_shards": 1,
      "index.number_of_replicas": 1
    }
  },
  "priority": 500
}

核心要点: index.lifecycle.name 指定了 ILM 策略,index.lifecycle.rollover_alias 定义了写入别名。

步骤 2.3:创建初始索引(Bootstrap Index)

索引模板并不会自动创建索引。我们需要手动创建一个起始索引,并将其命名为别名加上起始数字后缀 000001

PUT logs-000001
{
  "aliases": {
    "logs_write": {
      "is_write_index": true 
    }
  }
}

核心要点: logs_write 是写入别名,is_write_index: true 告诉 Elasticsearch 当前索引是该别名下唯一接受写入的索引。

步骤 2.4:写入数据验证 Rollover

现在,所有数据都应该通过别名 logs_write 写入。

我们写入一个文档,由于我们在 Hot 阶段设置了 “max_docs”: 1,索引应该在极短时间内触发轮转。

# 写入一个文档到别名
POST logs_write/_doc
{
  "timestamp": "2023-10-27T10:00:00Z",
  "message": "Test document for ILM rollover"
}

# 稍等片刻(大约 30 秒到 1 分钟)

# 查看索引列表,可以看到新的索引已经创建
GET _cat/indices/logs-*

预期结果: 当 ILM 触发后,logs-000001 索引会被关闭写入,并创建一个新的索引 logs-000002。别名 logs_write 会自动指向 logs-000002 进行写入。

步骤 2.5:监控生命周期

你可以使用以下 API 来检查索引当前处于哪个 ILM 阶段,以及何时会进入下一个阶段:

GET logs-*/_ilm/explain

观察结果,logs-000001 索引在 Rollover 后,将进入 Hot 阶段的 Post-Rollover 状态,等待达到 10 分钟后自动进入 Warm 阶段,并在 20 分钟后被删除,实现了完全的自动化管理。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » 如何利用 Index Lifecycle Management 实现自动化的索引生命周期管理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址