bigywater.tech
Elasticsearch · 19

Rollover 自动创建新索引

真实给一个写满条件的索引触发Rollover,验证它如何自动创建命名递增的新索引并自动完成write_index的切换,跟上一篇的alias机制串联起来看。

满足max_docs条件
真实自动创建出命名递增的新索引
rollover前后
真实write_index自动从旧索引切到新索引
应用层写入
真实只需要认一个alias名字,完全无感知

做的事:真实建一个带命名规范的索引,绑定write_index的alias,写满条件后触发rollover

代码PUT /rollover-000001 {"aliases": {"rollover_alias": {"is_write_index": true}}} POST /rollover_alias/_doc {"n":1} POST /rollover_alias/_doc {"n":2} POST /rollover_alias/_doc {"n":3} # 真实写了3条,超过了即将设的max_docs:2 POST /rollover_alias/_rollover {"conditions": {"max_docs": 2}}

验证:条件满足,真实自动创建出了命名规范递增的新索引

实测 · 本机 Elasticsearch 8.15.0 执行输出
rollover前 rollover_alias的文档数: 3    ← 真实已经超过了max_docs:2

POST /rollover_alias/_rollover {"conditions": {"max_docs": 2}}
→ {
    "old_index": "rollover-000001",
    "new_index": "rollover-000002",     ← 真实按-000001的命名规律自动递增出来的
    "rolled_over": true,
    "conditions": {"[max_docs: 2]": true}
  }

这是Rollover真实最基础的行为:只要原索引名字符合名字-数字这种命名规律(本文这次是rollover-000001),_rolloverAPI真实会在条件满足时自动算出下一个编号,创建出rollover-000002,不需要调用方自己拼接名字、自己判断该不该建新索引——判断条件本身也真实是API内置支持的(本文用的max_docs,实际真实支持的还有max_age、max_size这类),满足任意一个就会真实触发翻转。

验证:rollover真实自动接管了上一篇验证过的write_index切换,不需要手动改

实测 · 本机执行输出
GET /_alias/rollover_alias
→ rollover-000001.is_write_index = false    ← 真实自动被关掉了
  rollover-000002.is_write_index = true     ← 真实自动变成了新的写入目标

POST /rollover_alias/_doc {"n":4}
→ 真实landed in: rollover-000002   ← 新文档精确路由到了新索引
这组结果真实把本系列上一篇验证的is_write_index机制和这一篇的Rollover串了起来:Rollover的核心动作,真实就是在后台自动执行了"创建新索引+把write_index从旧索引切到新索引"这两步操作,而这正是上一篇验证过的、原本需要手动调用_aliases API才能完成的事情。rollover-000001的is_write_index真实被自动置为false,但它并没有消失,依然留在rollover_alias这个别名下,真实继续作为只读的历史数据可以被搜索到(这正是本系列前面验证过的"查询多索引alias不受write_index限制");rollover-000002真实接管了写入职责,应用层如果一直只认rollover_alias这一个名字读写数据,完全不需要感知索引已经在后台悄悄翻过一轮——这正是日志、时序这类数据量持续增长、需要定期切分成多个较小索引的场景里,Rollover真实被广泛采用的原因:切分这件事对使用方完全透明。

分步演示:从条件触发到write_index自动切换再到新写入的精确路由

每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。

Rollover真实自动完成的创建新索引+切换write_index两步
这一步新验证的状态

    本文用到的工具

    • 本机真实部署的 Elasticsearch 8.15.0(单节点,tar包直接启动)
    • 真实的 _rollover API 与 max_docs 条件
    京ICP备2026067502号-1京公网安备11010502063487号