来源:互联网 更新时间:2026-08-23 07:30
Elasticsearch上海Meetup中ebay工程师提了索引生命周期管理的概念。的确,在Demo级别的验证阶段我们数据量比较小,不太需要关注索引的生命周期,一个或几个索引基本就能满足需要。所以,这也会产生一种假象,认为:“Elasticsearch不就是增删改查,毛毛雨啦”的荒诞的假象。
但是,在实战开发的生产环境中,索引的动态模板设置、索引Mapping设置、索引分片数/副本数设置、索引创建、打开、关闭、删除的全生命周期的管理必须高度关注,做好提前知识储备,
否则,会在开发后期出现由于数据激增暴露架构设计不合理问题,甚至引发分片/节点数据丢失、集群宕机等严重问题。

Elasticsearch索引生命周期管理指:Elasticsearch从设置、创建、打开、关闭、删除的全生命周期过程的管理。
Elasticsearch生产环境中一般采用多索引结合基于时间、基于空间的横向扩展的方式存储数据,随着数据量的增多,不用修改索引的底层架构逻辑。
索引管理决定Elasticsearch鲁棒性、高可用性。
索引管理和搜索、插入性能也密切相关。
实际场景例子:100节点的集群中某一个节点数据丢失后,GET /_cat/nodes?v 接口的返回时延时延非常大,接近5-8s。搜索、聚合的性能更不必说。
原因:节点丢失后,ES会自动复制分片到新的节点中去,但是该丢失节点的shard非常大(几百个GB甚至上TB),集群当时的写入压力也非常大。这么大量级的数据拷贝和实时写入,最终导致延时会非常大。
1)索引管理需要ES专业知识和业务知识的结合。
业务数据多少结合业务场景,有突发情况。
2)涉及生产环境的操作。
3)用户使用有突发情况。
比如:参数设置错误,分片数和副本数弄反了,路由设置错误。
4)索引操作的时候可能会失败。
5)高可用性挑战。
Ebay的分享里提到,他们内部已经做了索引管理系统,后续会择期对外分享;截至20180805,github上还没有开源,值得继续关注。
索引生命周期管理这件事,关键就在于把索引早期阶段的规则先定义清楚。前面的设计考虑得越充分,后续整套架构跑起来才越高效,也越稳定。
实际上,从Elasticsearch 5.X之后的版本开始,官方已经推出了一个新能力:新增了Rollover API。它主要解决的是以日期作为索引名称时,索引大小容易分布不均的问题。
medcl的介绍是这样的:Rollover API对日志类数据尤其有用。通常这类数据会按天拆分索引(如果数据量更大,还可以继续细分),而在没有Rollover之前,往往需要在程序里预先配置一个自动生成索引的模板,
而和这种模板方式相比,Rollover API显然更简洁,也更直接。
当现有索引被认为太大或太旧时,滚动索引API将别名滚动到新索引。该API接受一个别名和一个条件列表。别名必须只指向一个索引。如果索引满足指定条件,则创建一个新索引,并将别名切换到指向新索引的位置。
6.XRollover支持的三种条件是:
5.X版本不支持”max_size”: “5gb”磁盘大小的方式。
分片的大小并不是一个可靠的测量标准,因为正在进行中的合并会产生大量的临时分片大小增长,而当合并结束后这些增长会消失掉。五个主分片,每个都在合并到一个 5GB 分片的过程中,那么此时索引大小会临时增多 25GB!而对于文档数量来说,它的增长则是可以预测的。
这个特性对于存放日志数据的场景、索引非常大、索引实时导入数据的场景是极为友好的。
你也可以先在索引模板里面设置索引的setting、mapping等参数, 然后设定好_rollover 规则,剩下的es会自动帮你处理。
步骤1:创建索引(注意序号)
PUT /logs-000001 {"aliases": {"logs_write": {}}} 步骤2:指定RollOver规则。
POST /logs_write/_rollover {"conditions": {"max_age": "7d","max_docs":2,"max_size":"5gb"}} 步骤3:批量插入数据。
POST logs_write/log/_bulk{ "create": {"_id":1}}{ "text": "111"}{ "create": {"_id":2}}{ "text": "222" }{ "create": {"_id":3}}{ "text": "333"}{ "create": {"_id":4}}{ "text": "4444"} 注意啦,理论上:_id=3和_id=4的数据会滚动到logs-000002的索引,实际并没有。
这个问题困扰我一上午。
实践验证发现,然并卵。
步骤4:重复步骤2。
查看返回结果如下:
{"old_index": "logs-000001","new_index": "logs-000002","rolled_over": true,"dry_run": false,"acknowledged": true,"shards_acknowledged": true,"conditions": {"[max_docs: 2]": true,"[max_age: 7d]": false,"[max_size: 5gb]": false}} 这样以后,后续插入的数据索引就自动变为logs-000002,logs-000003…..logs-00000N。
步骤1:创建基于日期的索引。
#PUT / with URI encoding:PUT / {"aliases": {"logs_write": {}}} URI 编码工具:http://tool.oschina.net/encode?type=4
输入:
输出:
步骤2:插入一条数据。
PUT logs_write/_doc/1{"message": "a dummy log"} 步骤3:指定RollOver规则。
POST /logs_write/_rollover {"conditions": {"max_docs": "1"}} 返回结果:
{"old_index": "logs-2018.08.05-1","new_index": "logs-2018.08.05-000002","rolled_over": true,"dry_run": false,"acknowledged": true,"shards_acknowledged": true,"conditions": {"[max_docs: 1]": true}} 关于这一点,ES 官网博客里其实讲得更透彻:https://www.elastic.co/blog/managing-time-based-indices-efficiently。
对应的翻译版本在这里:https://juejin.im/post/5a990cdbf265da239b40de65。
如果说 RollOver 滚动索引解决的是基础层面的管理问题,那么再进一步,把冷数据和热数据分开处理,才更贴近真实业务里的常见需求。
冷热分离与滚动模式结合后的整体工作流程,大致如下:
步骤1:有一个用于写入的索引别名,其指向活跃索引(热数据); 步骤2:另外一个用于读取(搜索)的索引别名,指向不活跃索引(冷数据); 步骤3:活跃索引具有和热节点数量一样多的分片,可以充分发挥昂贵硬件的索引写入能力; 步骤4:当活跃索引太满或者太老的时候,它就会滚动:新建一个索引并且索引别名自动从老索引切换到新索引; 步骤5:移动老索引到冷节点上并且缩小为一个分片,之后可以强制合并和压缩。 具体实现,官方博客已经做了具体的说明。
注意:
"routing.allocation.include.box_type": "hot","routing.allocation.total_shards_per_node": 2 单节点执行上述操作会导致失败,具体原因待进一步验证。
Rollover API大大简化了基于时间的索引的管理。但是,仍然需要以一种重复的方式调用_rollover API接口,可以手动调用,也可以通过基于crontab的工具(如director)调用。
但是,如果翻转过程是隐式的并在内部进行管理,则会简单得多。其思想是在创建索引时(或在索引模板中相等地)在别名中指定滚动条件。
PUT /{"mappings": {...},"aliases" : {"logs-search" : {},"logs-write" : {"rollover" : {"conditions": {"max_age": "1d","max_docs":100000}}}}} github提出的改进建议如下:
https://github.com/elastic/elasticsearch/issues/26092
截止:20180805这种方式没有实现。
Elasticsearch索引生命周期管理是件大事,无论你是开发还是运维人员,千万不要轻视。
Rollover的出现能相对缓解分片、索引、集群的压力,相对高效的管理索引的生命周期。
结合curator的定时删除机制会更高效。
参考:
https://elasticsearch.cn/slides/120
腾讯ima怎么把微信内容一键导入知识库?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
腾讯ima怎么创建共享知识库?
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
WorkBuddy微信版怎么获得积分?
比特币 2025 年价格预测:BTC 的未来走势
车载冰箱重置到出厂设置几步?
5000元起的鼠标哪个最值得入手?
管线机怎么接云米净水器
短剧《史上最强洪荒修为》剧情介绍
结婚家电首选:Leader懒人三筒Ultra热泵洗烘一体
kimi提示词专家使用方法新手指南
Aptos(APT)2026-2032年价格预测与历史走势梳理
笔记本移动电源推荐哪款?
短剧《仙人跳获透视,古玩玉器我全拿捏》剧情介绍
腾讯ima知识库怎么分类管理?
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc