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

适用版本: 6.8-8.9

1. 错误异常的基本描述 #

Glacier storage class is not supported 表示 Elasticsearch 在解析 S3 仓库配置中的 storage_class 时,发现它被设置成了 Glacier,于是直接拒绝该配置。

这是明确的产品限制,不是暂时性故障。原因是快照仓库要求对象可以被及时读取,而 Glacier 属于归档型存储,恢复延迟无法满足仓库读写要求。

常见现象 #

  • 创建或更新 S3 仓库时立即报错。
  • 即使 AWS 侧桶本身可用,仓库仍无法通过配置校验。
  • 常见于从通用对象存储策略模板直接套用到 Elasticsearch 快照仓库。

2. 为什么会发生这个错误 #

源码在把 storage_class 转成 AWS StorageClass 枚举后,会显式判断是否等于 Glacier;如果是,就直接抛出 BlobStoreException

常见原因包括:

  • 为了降低成本,把仓库对象默认存储类配置成 Glacier。
  • 复用了面向归档数据的 S3 生命周期或对象模板。
  • 自动化模板把不适用于 Elasticsearch 的存储类填进了仓库配置。

3. 如何排查和解决这个异常和解决这个异常 #

  1. 查看仓库配置中的 storage_class 实际值。
  2. 确认桶默认策略或自动化模板是否强制写入 Glacier。
  3. 检查是否存在对象生命周期策略,会在上传后快速迁移到 Glacier 或 Deep Archive。
  4. 用支持即时读取的存储类重新创建或更新仓库后再执行验证。

排查时要注意 #

  • 这个错误发生在配置阶段,和网络、权限、桶不存在无关。
  • 即使初始创建成功,若后续生命周期策略把对象迁到 Glacier,也会影响快照仓库可用性。
  • Elasticsearch 快照仓库更适合 Standard、Standard-IA 等可直接读取的存储类,具体仍以版本文档为准。

4. 如何解决这个错误 #

常用修复思路 #

  • storage_class 改为 Elasticsearch 支持且可即时读取的 S3 存储类。
  • 调整桶生命周期策略,避免把快照仓库对象迁移到 Glacier。
  • 如果有成本优化需求,优先通过快照保留策略控制数据量,而不是使用归档型存储类。

预防建议 #

  • 为快照仓库单独维护 S3 模板,不要复用通用归档模板。
  • 在 IaC 或配置中心中对 storage_class 做白名单校验。
  • 每次调整 S3 生命周期策略后,都执行一次仓库验证和快照恢复演练。

5. 小结 #

Glacier storage class is not supported 说明当前仓库配置与 Elasticsearch 快照仓库的访问模型不兼容。要解决问题,必须改用可立即读取的存储类,并避免后续生命周期策略把快照对象转入 Glacier。

相关错误 #

附:日志上下文 #

}
    try {
        final StorageClass _storageClass = StorageClass.fromValue(storageClass.toUpperCase(Locale.ENGLISH));
        if (_storageClass.equals(StorageClass.Glacier)) {
            throw new BlobStoreException("Glacier storage class is not supported");
        }
        return _storageClass;
    } catch (final IllegalArgumentException illegalArgumentException) {
        throw new BlobStoreException("`" + storageClass + "` is not a valid S3 Storage Class.");