You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Radosgw未应用Lua存储类分层脚本问题求助(Ceph)

Radosgw Lua脚本未正确设置S3对象存储类的排查与解决

问题概述

使用s3cmd put ti s3://totodash上传1024字节的对象时,Lua脚本逻辑应将其存储类设为DEEP_ARCHIVE,但实际对象存储类为STANDARD。日志显示存在IAM策略隐式拒绝,且Lua后台缓存命中负条目。

排查与解决方案

1. 修复IAM策略的隐式拒绝

日志中的s3:put_obj evaluate_iam_policies: implicit deny from identity-based policy表明当前用户的IAM策略可能阻止了存储类的设置:

  • 执行radosgw-admin policy get --uid=<你的用户UID>查看身份策略
  • 确保策略允许s3:PutObject操作,并包含指定目标存储类的权限,示例策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::totodash/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-storage-class": ["STANDARD", "STANDARD_IA", "DEEP_ARCHIVE"]
        }
      }
    }
  ]
}
  • 若策略存在隐式拒绝(比如未明确允许存储类设置),更新后执行radosgw-admin policy put --uid=<你的用户UID> --policy-file=updated-policy.json生效。

2. 确认Lua脚本的执行类型

日志中的lua background: cache get: name=rdc.rgw.log++script.background. : hit (negative entry)说明脚本可能被配置为后台异步脚本,这类脚本无法修改当前请求的参数:

  • 检查ceph.conf中的配置:
    • 确保使用rgw_lua_script = /path/to/your/script.lua(请求阶段执行,可修改Request)
    • 避免使用rgw_lua_background_script(后台脚本,仅用于异步任务)
  • 修改配置后重载Radosgw服务:systemctl reload ceph-radosgw@<你的实例名>

3. 验证脚本中文件大小的获取逻辑

脚本依赖Request.ContentLength判断大小,若该值未正确获取会导致逻辑分支错误:

  • 在脚本中添加调试日志,确认大小值:
-- 在判断大小前添加
RGWDebugLog("Request ContentLength: " .. tostring(Request.ContentLength))
RGWDebugLog("Request Object Size: " .. tostring(Request.Object.Size))
  • 上传对象后查看Radosgw日志,若Request.ContentLength为nil或错误值,改用Request.Object.Size作为判断依据(部分场景下该值更可靠)。

4. 确认集群支持目标存储类

若Radosgw未配置对应存储类的placement,设置会失败并回退到STANDARD:

  • 执行radosgw-admin zone get查看zone配置
  • 确保storage_classes中包含DEEP_ARCHIVE和STANDARD_IA,示例配置:
"storage_classes": {
  "STANDARD": {
    "placement": "default-placement"
  },
  "STANDARD_IA": {
    "placement": "ia-placement"
  },
  "DEEP_ARCHIVE": {
    "placement": "deep-archive-placement"
  }
}
  • 若缺少配置,执行radosgw-admin zone modify --zone=<你的zone> --storage-class-mapping='{"DEEP_ARCHIVE": "deep-archive-placement", "STANDARD_IA": "ia-placement"}',然后更新zone map:radosgw-admin zone map update,最后重启Radosgw服务。

5. 验证脚本是否被执行

在脚本开头添加日志,确认脚本是否被触发:

RGWDebugLog("Lua script executed for op: " .. tostring(Request.RGWOp))

上传对象后若未在日志中看到该条目,检查脚本路径是否正确、文件权限是否允许Radosgw读取,并重载服务。


内容的提问来源于stack exchange,提问作者koni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:13:14