Elasticsearch无需外部脚本按索引生命周期自动调整副本数的方法
解决方案
你可以直接使用Elasticsearch原生的**索引生命周期管理(ILM)**功能实现需求,无需依赖任何外部工具,操作步骤如下:
1. 创建ILM生命周期策略
先创建针对日志索引的ILM策略,配置不同生命周期阶段的副本数规则:
PUT _ilm/policy/logs_ilm_policy { "policy": { "phases": { "hot": { "min_age": "0ms", "actions": { "set_number_of_replicas": { "number_of_replicas": 1 } } }, "warm": { "min_age": "1d", "actions": { "set_number_of_replicas": { "number_of_replicas": 0 } } } } } }
该策略逻辑为:索引刚创建时处于hot阶段,保留1个副本保证数据可靠性;当索引创建时间满1天后自动进入warm阶段,将副本数调整为0节省存储空间。
2. 更新现有索引模板关联ILM策略
修改你已有的template_1索引模板,新增ILM策略绑定配置,后续所有新创建的logs*前缀索引会自动应用该策略:
PUT _index_template/template_1 { "index_patterns": ["logs*"], "template": { "settings": { "number_of_shards": 6, "number_of_replicas": 1, "index.lifecycle.name": "logs_ilm_policy" } } }
3. 为存量日志索引批量应用策略
上述模板修改仅对后续新建的索引生效,已经存在的历史日志索引需要手动批量绑定ILM策略:
PUT logs*/_settings { "index.lifecycle.name": "logs_ilm_policy" }
绑定后ILM会自动识别每个存量索引的创建时间,符合1天以上要求的会自动调整副本数为0。
补充说明
ILM默认每10分钟检查一次所有索引的状态,判断是否满足阶段过渡条件,你也可以根据需求调整检查间隔,示例调整为5分钟检查一次:
PUT _cluster/settings { "persistent": { "indices.lifecycle.poll_interval": "5m" } }
内容的提问来源于stack exchange,提问作者noze_potato
相关产品推荐
相关产品推荐

