【Elasticsearch】ILM(Index Lifecycle Management)策略详解

Elasticsearch 集群》系列,共包含以下文章:

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

在这里插入图片描述

1.什么是 ILM 策略?

ILMIndex Lifecycle Management索引生命周期管理)是 Elasticsearch 提供的一种自动化管理索引生命周期的机制。它允许用户根据预先定义的策略,自动执行索引的 滚动更新rollover)、分片分配冻结和删除 等操作,无需人工干预。

2.ILM 解决的核心业务问题

  • 自动化索引管理:减少人工维护成本。
  • 存储优化:自动将旧数据迁移到成本更低的存储层。
  • 性能优化:根据数据热度自动调整资源配置。
  • 数据保留合规:自动清理过期数据。
  • 资源利用率提升:合理分配集群资源。

3.ILM 生命周期阶段

ILM 策略包含四个可配置的阶段。
在这里插入图片描述

3.1 Hot(热阶段)

  • 索引正在被频繁写入和查询。
  • 需要高性能资源配置。
  • 通常配置滚动更新(rollover)条件。

3.2 Warm(温阶段)

  • 索引不再被写入,但仍被频繁查询。
  • 可以降低资源配置。
  • 可执行分片合并(forcemerge)、只读设置等。

3.3 Cold(冷阶段)

  • 索引很少被查询,但需要保留。
  • 可以转移到更经济的存储。
  • 可冻结索引(freeze)以减少资源占用。

3.4 Delete(删除阶段)

  • 索引达到保留期限。
  • 自动删除释放空间。

4.如何创建 ILM 策略

4.1 基本 ILM 策略示例

PUT /_ilm/policy/logs_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "30d",
            "max_docs": 10000000
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "warm": {
        "min_age": "7d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          },
          "allocate": {
            "number_of_replicas": 1,
            "require": {
              "data": "warm"
            }
          },
          "set_priority": {
            "priority": 50
          }
        }
      },
      "cold": {
        "min_age": "30d",
        "actions": {
          "allocate": {
            "require": {
              "data": "cold"
            }
          },
          "freeze": {},
          "set_priority": {
            "priority": 0
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

5.ILM 核心操作详解

5.1 Rollover(滚动更新)

作用:当索引达到指定条件时自动创建新索引。

常见触发条件

  • max_age:自索引创建后的最长时间。
  • max_docs:索引包含的最大文档数。
  • max_size:索引的最大主分片大小。

使用示例

PUT /_ilm/policy/my_rollover_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "7d",
            "max_size": "50GB"
          }
        }
      }
    }
  }
}

5.2 Shrink(收缩索引)

作用:减少主分片数量。

适用场景

  • 索引不再写入后。
  • 减少分片数以节省资源。

示例配置

"warm": {
  "actions": {
    "shrink": {
      "number_of_shards": 1
    }
  }
}

5.3 Force Merge(强制合并段)

作用:合并分段以减少资源占用和提高查询性能.

示例配置

"warm": {
  "actions": {
    "forcemerge": {
      "max_num_segments": 1
    }
  }
}

5.4 Freeze(冻结索引)

作用:将索引设为只读并减少内存占用。

示例配置

"cold": {
  "actions": {
    "freeze": {}
  }
}

6.实际应用案例

案例 1:日志管理系统

需求

  • 热数据保留 7 7 7 天,高性能存储。
  • 温数据保留 30 30 30 天,标准存储。
  • 冷数据保留 90 90 90 天,低成本存储。
  • 最终自动删除。

ILM 策略

PUT /_ilm/policy/logs_management_policy_v2
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",           # 明确从索引创建开始
        "actions": {
          "rollover": {
            "max_age": "7d",        # 更合理的rollover周期
            "max_size": "50GB",
            "max_docs": 10000000
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "warm": {
        "min_age": "7d",            # 从索引创建后7天进入warm
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          },
          "allocate": {
            "number_of_replicas": 1,
            "require": {
              "data": "warm"        # 明确要求warm节点
            }
          },
          "set_priority": {
            "priority": 50
          }
        }
      },
      "cold": {
        "min_age": "30d",           # 从创建后30天进入cold
        "actions": {
          "allocate": {
            "require": {
              "data": "cold"       # 明确要求cold节点
            }
          },
          "freeze": {},             # 冻结索引节省资源
          "set_priority": {
            "priority": 0
          }
        }
      },
      "delete": {
        "min_age": "90d",           # 从创建后90天删除
        "actions": {
          "delete": {
            "delete_searchable_snapshot": true  # 可选:删除前检查快照
          }
        }
      }
    }
  }
}

配套的索引模板示例

PUT /_index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "number_of_shards": 3,
      "number_of_replicas": 1,
      "index.lifecycle.name": "logs_management_policy_v2",
      "index.lifecycle.rollover_alias": "logs"
    },
    "mappings": {
      "properties": {
        "@timestamp": { "type": "date" },
        "log_level": { "type": "keyword" },
        "message": { "type": "text" }
      }
    }
  }
}

案例 2:电商订单数据

需求

  • 热阶段:处理当前订单(高优先级)。
  • 温阶段:近期订单可查询(优化存储)。
  • 冷阶段:归档订单(低成本存储)。
  • 3 3 3 年后自动删除。

ILM 策略

PUT /_ilm/policy/orders_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_age": "7d"
          },
          "set_priority": {
            "priority": 100
          }
        }
      },
      "warm": {
        "min_age": "30d",
        "actions": {
          "allocate": {
            "require": {
              "data": "warm"
            }
          }
        }
      },
      "cold": {
        "min_age": "365d",
        "actions": {
          "allocate": {
            "require": {
              "data": "cold"
            }
          }
        }
      },
      "delete": {
        "min_age": "1095d",  // 3"actions": {
          "delete": {}
        }
      }
    }
  }
}

7.使用注意事项

7.1 节点属性配置

  • 需要为温冷数据节点配置属性
# 在elasticsearch.yml中
node.attr.data: warm
# 或
node.attr.data: cold

7.2 监控 ILM 执行

GET /_ilm/status
GET /_ilm/policy/logs_policy
GET logs-*/_ilm/explain

7.3 常见问题处理

  • 策略不生效:检查 min_age 设置(默认是上次 rollover 后时间)。
  • 阶段卡住:使用 GET _ilm/explain 诊断。
  • 权限问题:确保用户有足够权限。

7.4 性能考虑

  • Force merge 操作资源消耗大,应在低峰期执行。
  • 避免过于频繁的 rollover(会产生大量小索引)。

7.5 与索引模板结合

PUT /_index_template/logs_template
{
  "index_patterns": ["logs-*"],
  "template": {
    "settings": {
      "index.lifecycle.name": "logs_policy",
      "index.lifecycle.rollover_alias": "logs"
    }
  }
}

7.6 测试策略

POST /_ilm/move/logs-000001
{
  "current_step": {
    "phase": "new",
    "action": "complete",
    "name": "complete"
  },
  "next_step": {
    "phase": "hot",
    "action": "rollover",
    "name": "attempt-rollover"
  }
}

8.最佳实践

8.1 合理设置阶段过渡时间

  • 根据业务访问模式设置 min_age
  • 热 → 温:通常 1 − 7 1-7 17 天。
  • 温 → 冷: 7 − 30 7-30 730天。

8.2 优先级设置

"set_priority": {
  "priority": 100  // 热阶段最高
}

8.3 结合快照备份

  • 重要数据在删除前应考虑备份。
  • 可以使用 SLM(Snapshot Lifecycle Management)。

8.4 容量规划

  • 根据 rollover 条件预估索引数量。
  • 监控各阶段存储使用情况。

8.5 版本兼容性

  • ILM 在 Elasticsearch 6.6 + 6.6+ 6.6+ 可用。
  • 7. x 7.x 7.x 后功能更完善。

通过合理配置 ILM 策略,可以实现索引的全生命周期自动化管理,显著降低运维成本,同时优化存储和查询性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据与AI实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值