ceph-rgw之上传最⼤⽂件
单次上传:
最⼤值 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级别容量的限制)
分⽚上传失败残留⽂件的解决办法:大文件发送
分⽚上传的过程是:上传分⽚上传的过程是每⽚上传的⼤⼩+已有容量的⼤⼩ < 配额容量 成功上传,失败返回超出配额的错误
可以通过s3brower去实现设置lifecycle 设置lifecycle的⽇志
注意:
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,让它组织数据。(这就是断点续传的原理,⽇志可以说明⼀切,有点提升地⽅,就是分⽚)
发布评论