使用Ceph S3/Swift创建Bucket时遇416错误的解决方法咨询
解决Ceph Luminous中创建S3/Swift Bucket时出现的416 InvalidRange错误
我帮你分析下这个在Ceph Luminous 12.2.2版本里创建Bucket时遇到的416 InvalidRange错误,结合你的集群状态、日志和操作命令,给你几个针对性的解决方案:
1. 调整RGW的严格Range请求检查配置
在Ceph Luminous版本中,rgw_req_strict_range参数默认是开启的(true),这会让RGW严格校验客户端发送的Range请求头。而旧版的S3/Swift客户端(比如你用的boto 2.38.0)在创建Bucket时,可能会发送不符合规范的Range头,触发这个416错误。
解决步骤:
- 编辑你的
ceph.conf配置文件,在所有RGW客户端的配置段(比如[client.rgw.ceph-2]、[client.rgw.ceph-4],或者直接用[client.rgw.*]统一定义)添加:rgw_req_strict_range = false - 重启所有RGW服务(根据你的系统服务命名调整命令):
sudo systemctl restart ceph-radosgw@rgw.*
2. 升级S3客户端(boto)版本
你当前使用的boto 2.38.0版本比较老旧,和Ceph Luminous的S3兼容性存在一些问题。建议升级到较新的版本,或者切换到更推荐的boto3:
升级boto2
pip install --upgrade boto
切换到boto3(推荐)
如果换成boto3,创建Bucket的示例代码可以改成这样:
import boto3 # 初始化S3客户端 s3 = boto3.client( 's3', endpoint_url='http://ceph-4:7480', aws_access_key_id='你的测试用户Access Key', aws_secret_access_key='你的测试用户Secret Key' ) # 创建Bucket s3.create_bucket(Bucket='mybucket')
3. 修正Swift客户端的操作流程
你的Swift命令尝试在创建容器的同时上传对象,但容器创建失败后导致对象上传报404。建议先单独创建容器,再上传对象:
第一步:创建容器
swift -A http://ceph-4:7480/auth/1.0 -U testuser:swift -K 'BKtVrq1...' post testas
第二步:上传对象
swift -A http://ceph-4:7480/auth/1.0 -U testuser:swift -K 'BKtVrq1...' upload testas testas
4. 验证RGW前端配置
检查ceph.conf中的rgw_frontends配置,确保RGW监听的端口和你使用的端点一致:
rgw_frontends = civetweb port=7480
如果配置有问题,修改后同样需要重启RGW服务。
后续验证
完成上述调整后,重新测试创建Bucket的操作。如果仍然遇到错误,建议查看RGW的日志文件(比如/var/log/ceph/ceph-radosgw@rgw.ceph-4.log),里面会包含更详细的请求处理细节,能帮你进一步定位问题。
内容的提问来源于stack exchange,提问作者Dikobraz
相关产品推荐
相关产品推荐

