📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

适用版本: 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. 如何排查和解决这个异常和解决这个异常 #

建议按下面的顺序排查:

  1. 从报错里提取具体缺失的 feature 名称。
  2. 对照当前 master 节点和整个目标集群的已安装模块、插件和功能开关。
  3. 检查源集群快照来自什么发行版和功能组合,确认目标环境是否具备对应能力。
  4. 如果只需要业务索引恢复,可以考虑不恢复这些 feature states。
  5. 功能补齐或调整恢复参数后,重新执行恢复请求。

排查时需要注意的问题 #

  • 这不是“快照里没有这些 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。

相关错误 #

附:日志上下文 #

下面保留当前页面中的源码或日志片段,便于继续结合异常调用栈定位问题:

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;
 }