存储联动
概述
AI训练和推理、高性能数据预处理、EDA、渲染、仿真等场景下,您可以通过SFS Turbo文件系统来加速OBS对象存储中的数据访问。SFS Turbo文件系统支持无缝访问存储在OBS对象存储桶中的对象。您可以指定SFS Turbo内的目录与OBS对象存储桶进行关联,然后通过创建导入导出任务实现数据同步。您可以在上层训练等任务开始前将OBS对象存储桶中的数据提前导入到SFS Turbo中,加速对OBS对象存储中的数据访问;上层任务产生的中间和结果等数据可以直接高速写入到SFS Turbo缓存中,中间缓存数据可被下游业务环节继续读取并处理,结果数据可以异步方式导出到关联的OBS对象存储中进行长期低成本存储。同时,您还可以配置缓存数据淘汰功能,及时将长期未访问的数据从SFS Turbo缓存中淘汰,释放SFS Turbo高性能缓存空间。
使用限制
- 支持存储联动的SFS Turbo文件系统规格有:20MB/s/TiB、40MB/s/TiB、125MB/s/TiB、250MB/s/TiB、500MB/s/TiB、1000MB/s/TiB。
- SFS Turbo目录和OBS配置联动后不支持以下操作:硬链接、重命名和目录配额。
- 单个SFS Turbo文件系统最多可配置16个OBS联动目录。
- 创建 OBS 后端存储库,依赖的服务是对象存储服务 OBS。用户需要额外配置OBS Adminstrator权限。
- 同一层目录下不允许同样名称的文件和目录存在。
- 不支持超长路径,数据流动支持的路径最大长度是1023字符。
- 数据流动导入时,不支持长度大于255字节的文件名或子目录名。
- 开启WORM策略的OBS桶,只能从OBS桶导入数据到SFS Turbo,无法从SFS Turbo导出数据到OBS桶。
绑定OBS桶
- 登录高性能弹性文件服务管理控制台。
- 在文件系统列表中,单击创建的文件系统名称,进入文件系统详情页面。
- 进入“绑定后端存储”页签,单击“绑定OBS桶”。
图1 绑定OBS桶
- 在右侧弹窗“绑定OBS桶”中,填写如下参数。
表1 参数说明 参数
含义
限制
配置后可编辑
联动目录名称
SFS Turbo文件系统根目录下会以该名称创建一个子目录,该目录将绑定对应的OBS桶,且该目录名称不能和已有目录重名。
- 子目录名称不能重复。
- 子目录名称必须是文件系统根目录下不存在的目录名。
- 子目录名称不能是“.”或“..”。
不支持
桶名
OBS存储桶桶名。
- 无法绑定不存在的存储桶。
- 目前仅支持OBS存储桶,不支持OBS并行文件系统。
不支持
OBS区域域名
OBS区域域名,即OBS的终端节点。
OBS存储桶必须和SFS Turbo文件系统在同一个Region。
不支持
- 勾选“将OBS桶的读写权限通过桶策略授权给SFS Turbo云服务”,并单击“确定”,完成绑定。
- 如果您想指定导入目录和文件的权限,请参考《高性能弹性文件服务API参考》的“绑定后端存储”和“更新后端存储属性”执行操作。
- 目前仅支持OBS存储桶,不支持OBS并行文件系统。
- 绑定OBS桶时,会在OBS桶上添加Sid为“PolicyAddedBySFSTurbo”的桶策略,请不要修改或删除该桶策略,否则可能导致联动功能异常。
- 如果您已将一个或多个SFS Turbo文件系统绑定了OBS存储桶,在删除文件系统或删除绑定之前,请不要删除该OBS存储桶,否则可能导致联动功能异常。
以桶名为“obs-test”的OBS桶为例,桶策略“PolicyAddedBySFSTurbo”的内容如下所示:
{ "Statement": [ { "Sid": "PolicyAddedBySFSTurbo", "Effect": "Allow", "Principal": { "ID": [ "domain/xxx:user/xxx" ] }, "Action": [ "ListBucket", "HeadBucket", "GetBucketStorage", "GetBucketPolicy", "GetBucketAcl", "GetBucketNotification", "GetBucketQuota", "GetObject", "PutObject", "DeleteObject", "GetObjectAcl", "PutObjectAcl", "ModifyObjectMetaData" ], "Resource": [ "obs-test", "obs-test/*" ] } ] }
元数据导入功能
SFS Turbo文件系统绑定OBS桶后,可以使用元数据导入功能。
当您使用SFS Turbo文件系统访问OBS桶的数据时,您需要使用元数据导入功能提前将OBS数据文件的元数据(名称、大小、最后修改时间)导入到SFS Turbo文件系统中。只有元数据导入之后,您才可以在文件系统的联动子目录中去访问OBS存储桶中的数据。元数据导入功能仅会导入文件元数据,文件内容会在首次访问时从OBS存储桶中加载并缓存在SFS Turbo中,后续重复访问会直接命中,无需再从OBS存储桶中加载。
SFS Turbo文件系统提供快速导入和附加元数据导入两种元数据导入方式。元数据导入之后,您可以在联动子目录下看到导入的目录和文件列表。
- 快速导入:当您绑定的OBS桶中存储的数据不是来源于SFS Turbo导出时,可以选择快速导入方式,快速导入方式仅会导入OBS的元数据(名称、大小、最后修改时间),不会导入其它附加元数据(如uid、gid、mode),SFS Turbo会生成默认的附加元数据(uid、gid、目录权限、文件权限),如果您想指定导入目录和文件的权限,请参考《高性能弹性文件服务API参考》的“创建数据导入导出任务”章节,该操作仅针对本次导入任务生效。快速导入能够提供更快的元数据导入性能,推荐您使用快速导入。
- 附加元数据导入:当您绑定的OBS桶中存储的数据是来源于SFS Turbo导出时,可以使用附加元数据导入方式,附加元数据导入方式会导入OBS的元数据(名称、大小、最后修改时间)以及来源于SFS Turbo导出时的附加元数据(如uid、gid、mode)。如果没有来源于SFS Turbo的附加元数据则以指定导入目录和文件的权限为准。
- 在绑定OBS桶之后,单击“元数据导入”选项。
图2 元数据导入
- “导入前缀”请填写绑定OBS桶内对象的前缀,可以具体到某个对象名。如果要导入整个OBS桶内的所有对象,则不用填写。
- 勾选“附加元数据导入”将会采用附加元数据导入方式,不勾选“附加元数据导入”将采用快速导入方式。
- 单击“确定”,提交导入任务。
- 在OBS数据导入到SFS Turbo之后,如果OBS桶中的数据发生新增或修改,需要重新导入到SFS Turbo中。
- 不支持长度大于255字节的文件名或子目录名。
数据导入功能
SFS Turbo文件系统绑定OBS桶后,可以使用数据导入功能。
默认情况下,元数据导入完成后,数据不会导入到SFS Turbo文件系统中,初次访问会按需从OBS中加载数据,对文件的第一次读取操作可能耗时较长。如果您的业务对时延比较敏感,并且您知道业务需要访问哪些目录和文件,比如AI训练等场景涉及海量小文件,对时延比较敏感,可以选择提前导入指定目录和文件。
数据导入功能会同时导入元数据和数据内容,元数据将会采用快速导入方式,不会导入其他附加元数据(如uid、gid、mode),如果您想指定导入目录和文件的权限,请参考《高性能弹性文件服务API参考》的“创建数据导入导出任务”章节,该操作仅针对本次导入任务生效。
- 在绑定OBS桶之后,单击“数据导入”选项。
图3 数据导入
- “对象路径”请填写绑定OBS桶内对象的路径(不包含桶名)。
OBS桶中的对象路径(不包含桶名),目录需以“/”结尾。
- 如果要导入OBS桶内所有对象,则不用填写对象路径。SFS Turbo会将数据导入到联动目录下,且联动目录下的文件路径和OBS桶里的对象路径保持一致。
- 对象路径示例(“/mnt/sfs_turbo”为您的挂载目录,“output-1”为您的联动目录名称):
- 如对象路径为dir/,则会导入到“/mnt/sfs_turbo/output-1/dir”
- 如对象路径为dir/file, 则会导入到“/mnt/sfs_turbo/output-1/dir/file”
- 如对象路径为空,则会直接导入到“/mnt/sfs_turbo/output-1”
- 单击“确定”,提交导入任务。
- 在OBS数据导入到SFS Turbo之后,如果OBS桶中的数据发生新增或修改,需要重新导入到SFS Turbo中。
- 通过API使用数据导入功能的具体操作请参考创建SFSTurbo 和 OBS 之间的联动任务。
- 不支持长度大于255字节的文件名或子目录名。
数据导出功能
SFS Turbo文件系统绑定OBS桶后,可以使用数据导出功能。
当您在联动目录创建一些文件,或者对从OBS导入的文件进行修改后,需要将这些文件存储到OBS桶里,可以使用数据导出功能。数据导出支持指定前缀,只有满足指定前缀的目录和文件才会被导出到OBS桶里。
- 在绑定OBS桶之后,单击“导出”选项。
图4 数据导出
- “导出文件前缀”请填写需要导出的目录和文件前缀(路径不包含联动目录),可以具体到某个文件。如果要导出整个联动目录到OBS桶,则不用填写。
- 单击“确定”,提交导出任务。
- 数据导出功能会启动异步任务对导出目录内的文件进行扫描并导出,如果扫描时发现文件10s内发生过更新,则本次任务不会导出该文件。
- 对于一个文件的所有修改,导出到OBS桶之后,下次再提交该文件的导出任务时,如果该文件未发生过变化,则该文件不会被再次导出,即使OBS桶里已经将导出的对象删掉了,也不会再导出该文件。
- 从SFS Turbo导出的对象,在OBS对象的自定义元数据里保存了一些SFS Turbo的元数据信息,名称以x-obs-meta-sfsturbo-st-开头。
- 不支持超长路径,可导出文件路径的最大长度为1023个字符。
- 文件系统内单个文件大小上限为320TB、可导出的单个文件大小上限为48.8TB。
- 大文件导出时OBS桶内x-obs-upload-sfsturbo-temp-part目录会存储大文件导出过程中产生的临时文件,导出完成后会自动删除该目录及临时文件。
- 导出数据时:
导入到SFS Turbo的对象,当在SFS Turbo里修改了,再从SFS Turbo导出这个对象时,如果OBS桶里该对象没有发生过修改,则会覆盖OBS桶里的对象,如果OBS桶里该对象发生过修改,则不会覆盖。
对象正在被导出时,上传同名对象可能会造成新上传的对象被覆盖。
- 开启WORM策略的OBS桶,无法从SFS Turbo导出数据到OBS桶。
数据淘汰功能
SFS Turbo文件系统绑定OBS桶之后,可以使用数据淘汰功能。淘汰时会释放数据内容,仅保留元数据,释放后不占用SFS Turbo文件系统上的存储空间。再次访问该文件时,将重新从OBS中加载文件数据内容。
按时间淘汰
SFS Turbo文件系统绑定OBS桶之后,支持数据按时间淘汰功能。设定时间内没有被访问过的文件会被淘汰。
按时间淘汰功能支持设置(冷)数据淘汰时间,设置步骤请参考以下操作。
- 登录高性能弹性文件服务管理控制台。
- 在文件系统列表中,单击创建的SFS Turbo文件系统名称,进入文件系统详情页面。
- 在“基本信息”页签,设置(冷)数据淘汰时间。
图5 设置冷数据淘汰时间
按容量淘汰
SFS Turbo文件系统绑定OBS桶后,支持数据按容量淘汰功能。
容量达到95%及以上按照30分钟淘汰时间进行淘汰,淘汰至容量低于85%。
- 淘汰规则:按时间淘汰和按容量淘汰哪个先达到就先按哪个淘汰。
- 数据淘汰默认开启,淘汰时间默认为60小时。设置(冷)数据淘汰时间的API请参考更新文件系统。
- 如果SFS Turbo文件系统存储空间写满,会影响业务运行,建议在云监控服务CES上配置SFS Turbo已用容量的监控告警。
- 当触发容量阈值告警时请手动缩短数据淘汰时间,例如从60小时配置成40小时,加速(冷)数据淘汰,或者对SFS Turbo存储空间进行扩容。
FAQ
- 什么情况下会发生数据淘汰?
从OBS导入到SFS Turbo的文件,当文件在设定数据淘汰时间内没有被访问时,会自动对该文件进行淘汰。
在SFS Turbo上创建的文件,只有已经导出到OBS并且满足数据淘汰时间,才会进行淘汰,如果还没有导出到OBS,则不会淘汰。
- 数据淘汰之后,怎么重新将数据导入到SFS Turbo文件系统?
- 对文件进行读写操作时会重新从OBS桶加载文件数据到SFS Turbo文件系统;
- 使用数据导入功能重新将数据从OBS桶加载到SFS Turbo文件系统。
- 什么场景下会发生数据导入失败?
当只导入了文件元数据,或者SFS Turbo中发生了数据淘汰,SFS Turbo中只剩下文件元数据,但OBS桶中的对象又被删除时,进行数据导入或访问文件内容时会发生失败。
- 导入/导出任务是同步的,还是异步的?
- 删除SFS Turbo联动目录内的文件,OBS桶里对应的对象会删除吗?
- SFS Turbo绑定OBS桶时或者绑定之后可以指定导入目录和文件的权限吗?
一般情况下,您可以指定导入目录和文件的权限。如果无法指定,请提交工单申请。指定权限详情如下所示:
- 绑定OBS桶时或绑定OBS桶后,支持设置导入目录和文件的默认权限,请参考《高性能弹性文件服务API参考》的“绑定后端存储”和“更新后端存储属性”章节。如果未设置,默认为750(目录权限)和640(文件权限)。
- 元数据导入(快速导入)和数据导入时,支持指定导入目录和文件的权限,请参考《高性能弹性文件服务API参考》的“创建数据导入导出任务”章节。如果未指定,则以上述默认权限为准。
历史版本导入目录和文件的默认权限为755(目录权限)和644(文件权限),现逐步按区域切换为750(目录权限)和640(文件权限),如有疑问,请提交工单咨询。
SFS Turbo绑定OBS桶时或者绑定之后,建议指定导入目录和文件的默认权限。如果您未指定,非root用户无权限访问对应的目录和文件。