适用版本: 7.12-7.13
1. 错误异常的基本描述 #
requested feature states [...] are present in snapshot but those features are not installed on the current master node 表示快照里确实包含了你请求恢复的 feature states,但当前 master 节点并没有安装或启用这些 feature 对应的系统功能。源码会先根据 snapshot 元数据构造 featureStatesToRestore,再与 systemIndices.getFeatures() 做比对;凡是当前 master 不认识的 feature,都会导致 SnapshotRestoreException。
常见现象 #
- 目标快照中存在某些 feature states,但当前集群恢复时缺少相应功能模块或插件。
- 报错通常发生在当前 master 节点执行恢复前置校验时。
- 常见于跨环境恢复:源集群启用了某些 X-Pack 功能,目标集群未安装或未启用。
典型报错与异常栈 #
常见日志形态类似下面这样:
SnapshotRestoreException[[repo:snap-20260401] requested feature states [security, ilm] are present in snapshot but those features are not installed on the current master node]
2. 为什么会发生这个错误 #
feature states 恢复不仅要求快照里有这些 feature,还要求目标集群当前 master 节点认识并支持它们。否则即使快照里有对应系统索引和元数据,目标集群也无法安全恢复这些内容。
常见触发场景包括:
- 目标集群没有安装源集群使用的插件或模块。
- 目标环境关闭了源快照中涉及的系统功能。
- 跨版本/跨发行版恢复时,feature 可见性不一致。
- 当前 master 节点与其他节点配置不一致,导致 feature 注册表不完整。
3. 如何排查和解决这个异常和解决这个异常 #
建议按下面的顺序排查:
- 从报错里提取具体缺失的 feature 名称。
- 对照当前 master 节点和整个目标集群的已安装模块、插件和功能开关。
- 检查源集群快照来自什么发行版和功能组合,确认目标环境是否具备对应能力。
- 如果只需要业务索引恢复,可以考虑不恢复这些 feature states。
- 功能补齐或调整恢复参数后,重新执行恢复请求。
排查时需要注意的问题 #
- 这不是“快照里没有这些 feature”,而是“目标节点不支持这些 feature”。
- 关键判断点在当前 master 节点,因为该节点负责执行恢复前置校验。
- 如果目标环境本来就不需要这些功能,直接排除对应 feature states 往往比补齐整套功能更稳妥。
4. 如何解决这个错误 #
常用修复思路 #
- 在目标集群安装/启用缺失功能后再恢复相关 feature states。
- 如果只恢复业务数据,去掉不需要的 feature states。
- 保证当前 master 节点与其他节点功能集一致。
- 在跨环境恢复前做一次“源快照 feature 列表”和“目标集群功能列表”的预比对。
后续注意事项与推荐建议 #
- 对跨环境恢复建立功能兼容矩阵,而不只看版本号。
- 让恢复平台在提交前自动检测目标集群是否具备所需 feature。
- 对可选 feature states 提供显式白名单配置,避免默认全恢复。
借助 INFINI 产品提升排障效率 #
- INFINI Console 适合查看集群健康度、节点指标、索引状态、错误趋势和请求画像,帮助快速判断异常是局部问题还是系统性问题。
- INFINI Gateway 适合部署在 Elasticsearch 前面做请求观测、限流、熔断、缓存和流量治理,尤其适合定位高频错误请求、异常重试和不合理 DSL。
- 如果需要长期治理,建议把异常日志、慢查询、调用来源和变更记录统一接入监控面板,缩短从“发现问题”到“定位根因”的时间。
5. 小结 #
这条错误说明快照里有这些 feature,但目标 master 节点并不支持它们。解决方向要么是补齐功能,要么是不要恢复这些 feature states。
相关错误 #
- 请求的功能状态 – 如何解决此 Elasticsearch 异常
- feature-states-值错误 - 如何解决此 Elasticsearch 异常
- cannot-restore-incompatible-snapshot-如何解决此Elasticsearch异常
附:日志上下文 #
下面保留当前页面中的源码或日志片段,便于继续结合异常调用栈定位问题:
final ListfeaturesNotOnThisNode = featureStatesToRestore.keySet().stream()
.filter(featureName -> systemIndices.getFeatures().containsKey(featureName) == false)
.collect(Collectors.toList());
if (featuresNotOnThisNode.isEmpty() == false) {
throw new SnapshotRestoreException(snapshot; "requested feature states " + featuresNotOnThisNode + " are present in " +
"snapshot but those features are not installed on the current master node");
}
return featureStatesToRestore;
}





