索引状态管理问题:索引迁移至UltraWarm存储后设置副本数为0失败
解决AWS Elasticsearch UltraWarm迁移后调整副本数失败的问题
问题根源
你遇到的TOO_MANY_REQUESTS/12/index read-only / allow delete (api)错误,其实和速率限制无关——核心原因是UltraWarm存储上的索引是只读状态。一旦索引完成warm_migration迁移到UltraWarm节点,AWS ES会自动将其标记为只读,这时候任何修改索引配置(包括调整副本数)的操作都会被拒绝,因为UltraWarm的架构是基于S3快照挂载的,只支持查询,不支持写入或配置变更。
你的ISM策略里先执行迁移、再调整副本数的顺序刚好搞反了,导致迁移后索引变只读,无法修改副本数。
正确的解决步骤
调整ISM策略中warm状态下的操作顺序:先把副本数设为0,再执行warm_migration迁移操作。因为在热节点上索引还是可读写、可修改配置的,这时候能顺利完成副本数调整,之后再迁移到UltraWarm就不会有问题了。
修改后的完整ISM策略如下:
{ "policy_id": "hot_warm_workflow", "description": "hot-warm workflow - Indices stay hot storage for 8 days and then move to warm storage", "last_updated_time": 1632847870167, "schema_version": 1, "error_notification": null, "default_state": "hot", "states": [ { "name": "hot", "actions": [], "transitions": [ { "state_name": "warm", "conditions": { "min_index_age": "8d" } } ] }, { "name": "warm", "actions": [ { "retry": { "count": 5, "backoff": "exponential", "delay": "1h" }, "replica_count": { "number_of_replicas": 0 } }, { "retry": { "count": 5, "backoff": "exponential", "delay": "1h" }, "warm_migration": {} } ], "transitions": [] } ], "ism_template": null }
额外补充说明
- UltraWarm的设计定位是冷数据存储,底层依赖S3的多AZ冗余保证数据可用性,所以官方建议不需要副本——这也是为什么要在热节点阶段就把副本数降到0,既节省热节点的资源,也避免迁移后无法修改的尴尬。
- 对于已经迁移到UltraWarm且出现错误的索引,你可以手动将它恢复到热存储,修改副本数后再重新迁移到UltraWarm;后续新索引按照调整后的策略执行即可。
内容的提问来源于stack exchange,提问作者Dónal Tuohy
相关产品推荐
相关产品推荐

