1.20 TTL功能
优质
小牛编辑
125浏览
2023-12-01
TTL功能
在删除或覆盖object时,FDS会先将object副本移动至trash,以便找回数据,防止误删除。
FDS TTL(Time-to-Live)功能能够设置object的生存周期,其粒度为bucket级别,即可以为一个bucket设置TTL,从而自动定时的清理指定的object。
过期规则
Bucket中Object过期的定义: 当前时间 > Object上传时间 + expiration
Trash中Object过期的定义 : 当前时间 > Object移入Trash的时间 + nonCurrentVersionExpiration
符合过期规则的Object都会被标记为过期(不一定立刻删除),不管它实在TTL设置之前传入还是在TTL设置之后传入。
TTL配置方法
只有bucket owner可以配置TTL。
通过HTTP PUT请求/{bucketName}?lifecycle
来为某个bucket设置TTL,要设置的内容放在报文体中。
通过HTTP GET请求/{bucketName}?lifecycle
来查询某个bucket设置TTL。
目前只能通过python命令行工具设置TTL,方式为 fds -m put -b $BUCKET_NAME --lifecycle $TTL_CONFIG,格式如下。
控制台配置TTL:
点击Bucket的生命周期
配置TTL规则:
配置格式
TTL配置为json字符串,类似
{
"rules": [ // rule列表
{
"enabled": true, // 是否启用该rule,为false时忽略该rule
"prefix": "images/", // 前缀,若object名不满足该前缀时,忽略该rule
"actions": { // action列表,当object匹配该规则时,开始执行actions。action分为以下几类:
"nonCurrentVersionExpiration": { // 若trash中的旧版本存在超过指定时限,则将该旧版本彻底删除
"days": 7 // float型,单位为天
},
"expiration": { // 若object存在超过指定时限,则将该object移至trash
"days": 30
},
"abortIncompleteMultipartUpload": { // 若分片上传任务执行时间超过指定时限仍未完成,则abort该分片上传任务
"days": 7
}
}
},
{
"enabled": true,
"prefix": "log/",
"actions": {
"nonCurrentVersionExpiration": {
"days": 7
},
"expiration": {
"days": 30
}
}
},
...
]
}
可以通过配置不同的prefix来为各个“目录”下的object设置不同的生存周期。若一个object名同时满足多个rule,则优先选择prefix最长的rule进行处理。
其他事项
- object实际生存时间会和设置的TTL有误差,可能会晚于指定时间1~2天才被删除。但不会被提前删除。
- 如果不设置TTL,则永远保留用户上传的object;trash中的副本会在7天后被删除;未complete的分片上传任务会在7天后abort。
- 目前并不是所有集群都上线了TTL功能,之后会陆续更新其他集群,详情可在FDS支持群里询问。
FAQ
- 修改多久配置会生效? 从FDS下次TTL扫描开始生效,目前FDS不能保证当天生效,这个问题后期会改善。
- 删除a.txt之后,再删除a.txt,是否重新开始计算? 这个问题的关键是要理解FDS TTL的过期策略。Trash中Object过期的定义 : 当前时间 > Object移入Trash的时间 + nonCurrentVersionExpiration。 因为新的a.txt移入Trash中的时间发生了改变,过期时间也会重新计算。
- 以prefix开头的对象和文件夹都会删除吗? 首先,FDS并没有文件夹的概念,文件夹只是只是一种抽象的理解方式,在FDS中,只是以文件夹名字为prefix的对象。 例如,bucket下面有如下内容: ddd/a.txt ddd/abc/a.txt ddda.txt ddd.txt dddb.txt 如果TTL的prefix设置为ddd,则上述对象都会被删除。