单次上传:
最大值 18446744073709552046
有一个参数更改:
rgw_max_put_size
默认值 5G 类型 L版本 Option::TYPE_UINT 实际指的是 uint64_t 所以它的最大值是上文那么大 (swift 上传最大数量也是这个限制)
而在最新master 分支 这个值最终被定义为size_t 来为了兼容不同架构。
注意:
s3cmd 单次上传限制有两种检测机制。
1.本身客户端检测:
s3cmd put 6g s3://bucket1/6g --multipart-chunk-size-mb=6144 类似与这样的,是成功不了的,因为--multipart-chunk-size-mb 这个值对它有限制最大5024 就是最大值
2. 发送rgw网关,网关在上传之前进行parm 比对,来进行是否上传,详见,rgw上传日志记录。
s3cmd put T53 s3://bucket1/8g --disable-multipart
分片上传:
有两个因素中决定,在ceph里面是rgw_multipart_min_part_size 和 rgw_multipart_part_upload_limit
rgw_multipart_min_part_size 分片的最小大小,默认是5m 类型是TYPE_INT 指int64_t
rgw_multipart_part_upload_limit 分片的限制,默认10000 类型是TYPE_INT 指int64_t 这两者决定了对象的最终大小
注意:
s3cmd 默认下是开启分片上传,分片上传的默认值是15m。可以进行修改然后分片上传
配额的支持:
三种支持:user 容量 每个bucket容量 单个bucket容量
radosgw-admin quota enable --quota-scope=user --uid=test1 --max-size=20971520 对一个用户的object容量做限制
radosgw-admin quota enable --quota-scope=bucket --uid=test1 --max-size=20971520 给每个bucket 容量做限制
radosgw-admin quota enable --quota-scope=bucket --uid=test1 --bucket=quota1 --max-size=31457280 指定某一bucket 的容量30m(不受上述bucket级别容量 的限制,但受user级别容量的限制)
分片上传失败残留文件的解决办法:
https://github.com/ceph/ceph/pull/13622
分片上传的过程是:上传分片上传的过程是每片上传的大小+已有容量的大小 < 配额容量 成功上传,失败返回超出配额的错误
可以通过s3brower去实现设置lifecycle 设置lifecycle的日志
https://s3browser.com/bucket-lifecycle-configuration.aspx
注意:
1.这一特性可以清除存放在index pool 和 data pool 里面的垃圾数据
2.现在指定过期时间指定为day级别。
现在ceph提供这样几种解决办法:
1.通过设置lifecycle策略,设置天数,到期后删除,
2.利用AWS api 中止上传,抛给gc线程
3.不会删,等到继续上传,通过S3API继续上传完之后的文件。详见日志RGW网关读写文件日志,s3cmd 在实现这一操作时,获取part number(主要是获取partnumber 和etag值),然后自己切片上传完剩下没上传玩的部分(每次上传完会返回etag s3cmd客户端记录),最后把RGW partnumber 以及etag整体给打包给RGW,让它组织数据。(这就是断点续传的原理,日志可以说明一切,有点提升地方,就是分片)
http://docs.ceph.com/docs/master/radosgw/s3/objectops/#initiate-multi-part-upload