首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于reindex并对索引进行rollover的两种方式

基于reindex并对索引进行rollover的两种方式

原创
作者头像
空洞的盒子
发布2025-05-27 10:38:00
发布2025-05-27 10:38:00
20600
代码可运行
举报
文章被收录于专栏:JD的专栏JD的专栏
运行总次数:0
代码可运行

在Elasticsearch中,在针对一些大索引拆分成若干小索引,或者使用reindex迁移原有索引至扩展主分片后的索引时,我们想对目标索引进行rollover滚动切分时,可以使用以下两种方式。

场景:

从logs-2025索引迁移数据到一个支持 rollover的写入别名:

  • 源索引:logs-2025
  • 目标别名(写入用):logs-write
  • 初始索引:logs-000001

方式1:手动rollover触发


步骤1:创建rollover支持的目标索引与别名

必须先手动创建第一个实际索引(如 logs-000001),并配置write alias(写入别名)和rollover规则。

代码语言:javascript
代码运行次数:0
运行
复制
PUT logs-000001
{
  "aliases": {
    "logs-write": {
      "is_write_index": true
    }
  }
}

步骤2:执行Reindex,对目标索引进行数据写入

代码语言:javascript
代码运行次数:0
运行
复制
POST _reindex
{
  "source": {
    "index": "logs-2025"
  },
  "dest": {
    "index": "logs-write"
  }
}

注意事项:这里目标索引写的是 "logs-write",实际上Elasticsearch实际会将数据写入它所指向的 is_write_index: true的实际索引(如 logs-000001)。


步骤3:手动触发rollover条件,对索引进行切分

手动执行以下rollover触发条件:

代码语言:javascript
代码运行次数:0
运行
复制
POST /logs-write/_rollover
{
  "conditions": {
    "max_docs": 1000000,
    "max_age": "7d"
  }
}

这将自动生成 logs-000002 并更新别名指向它。


方式2:设置rollover条件,使用ILM自动托管索引


这里我们使用ILM生命周期策略对索引进行自动托管:

步骤1:创建生命周期策略

代码语言:sh
复制
PUT _ilm/policy/logs_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "7d",
            "max_size": "30gb"
          }
        }
      }
    }
  }
}

步骤2:创建索引模板绑定策略

代码语言:javascript
代码运行次数:0
运行
复制
PUT _index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "index.lifecycle.name": "logs_policy",
      "index.lifecycle.rollover_alias": "logs-write"
    }
  }
}

步骤3:手动创建初始化第一个索引

logs-000001

ILM 要求第一个索引 必须你手动创建并设置写别名 is_write_index: true

代码语言:javascript
代码运行次数:0
运行
复制
PUT logs-000001
{
  "aliases": {
    "logs-write": {
      "is_write_index": true
    }
  }
}

第一个索引我们需要手动初始化,否则 ILM 无法接管。

步骤4:使用 Reindex 将旧数据写入

代码语言:javascript
代码运行次数:0
运行
复制
POST _reindex
{
  "source": {
    "index": "logs-2025"
  },
  "dest": {
    "index": "logs-write"
  }
}

Elasticsearch 会将数据写入 logs-write 指向的 logs-000001。


步骤5: ILM自动控制Rollover

只要logs-write的目标索引达到设置的:

  • max_age(如7天)
  • max_size(如30GB)

ILM就会自动rollover,创建logs-000002,并把logs-write指向新索引。

可以通过以下语句检查生命周期进度:

代码语言:javascript
代码运行次数:0
运行
复制
GET logs-000001/_ilm/explain

注意事项

  • Rollover 必须由别名驱动,不能直接对 logs-000001 用_rollover
  • 如果目标索引没有is_write_index的别名,reindex会失败。
  • reindex 只是迁移数据,不会自动创建滚动策略,我们在进行索引切分时必须手动或通过 ILM 实现。

在 Elasticsearch 中,使用 reindex 将数据迁移到一个新索引,并希望目标索引启用 ILM(Index Lifecycle Management)策略并自动rollover,需要正确配置索引、别名、ILM 策略和模板,让ILM能识别并控制滚动行为。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方式1:手动rollover触发
    • 步骤1:创建rollover支持的目标索引与别名
    • 步骤2:执行Reindex,对目标索引进行数据写入
    • 步骤3:手动触发rollover条件,对索引进行切分
  • 方式2:设置rollover条件,使用ILM自动托管索引
    • 步骤3:手动创建初始化第一个索引
    • logs-000001
    • 步骤4:使用 Reindex 将旧数据写入
    • 步骤5: ILM自动控制Rollover
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档