存储数据同步工具 ADS
产品介绍
SenseCore 存储数据同步工具 ADS(SenseCore AI DataSync Service)是一款针对大装置存储系统提供的统一、高效、便捷的数据同步工具,支持多场景下本地-大装置存储、大装置不同存储系统之间、以及第三方云-大装置存储的数据同步功能,配合大装置AI存储系统提供数据同步及其管理功能。
产品功能
1.web端和cli工具同时具备
- ADS支持用户通过web或cli快速进行数据传输。
2.支持本地和AI云存储之间的数据传输
- ADS支持用户本地到AI云存储之间的快速数据传输。
3.支持AI云存储之间的数据传输
- 针对AI场景中对AI存储的不同需求,支持AI云存储之间的数据同步。
4.支持第三方云和AI云存储之间的数据传输
- ADS支持用户从第三方云到AI云存储之间的数据同步,实现快速上云。
5.支持离线同步(暂未上线)
- 提供完善的数据同步服务,支持离线寄送。
应用场景
1.数据上云
- 用户购买sensecore AI云存储后,用户自身在原有的机器或数据中心中,有大量的已存在的数据,需要将大量已有的数据迁移到sensecore AI存储(文件/对象)上,由此需要操作便捷,使用方便的数据同步工具,同时,数据同步任务在此场景下一般任务量较大,数据多,用户需要查看任务状态,可以监控任务状态。
- 用户购买sensecore AI云存储后,用户自身在原有的机器或数据中心中,或持续以一定的频次产生数据,如:每月产生10TB的数据,这些每个月产生的数据需要定期迁移到sensecore AI存储(文件/对象)上,数据同步任务在此场景下一般任务量偏多,用户需要查看和管理多任务及任务状态。
- 用户购买sensecore AI云存储后,用户原来在其他云厂商中已存在大量数据,需要将已有数据从其他云厂商中同步到sensecore AI存储(文件/对象)中。
2.AI训练场景
- 训练场景中,研究员使用文件存储进行模型训练,而大量的图片、音视频等数据存储在对象存储上,需要频繁地将对象存储上的数据同步到文件存储中进行模型训练。
计费说明
1.计费方式
存储数据同步工具本身不收取费用。 但使用过程会产生对象存储的公网流出费用和请求费用,具体收费以对象存储为准。
2.使用规则
- 开通即可使用
快速入门
cli工具
1.下载工具包
注意:ads-cli 1.7.2版本存在bug,在sync增量更新目标文件时,偶发出现不会更新目标文件的情况。 目前研发已修复ads-cli 这个bug,发布了1.9.0版本。请大家更新使用新版本的 ads-cli。
下载最新版本的ADS工具包,并添加执行权限,即可
- 下载链接:https://quark.aoss.cn-sh-01.sensecoreapi-oss.cn/ads-cli/release/v1.9.0/ads-cli.1.9.0.tar.gz
* Linux:https://quark.aoss.cn-sh-01.sensecoreapi-oss.cn/ads-cli/release/v1.9.0/ads-cli
* Windows:https://quark.aoss.cn-sh-01.sensecoreapi-oss.cn/ads-cli/release/v1.9.0/ads-cli.exe
* MacOS:https://quark.aoss.cn-sh-01.sensecoreapi-oss.cn/ads-cli/release/v1.9.0/ads-cli.macos
# 以linux为例,将ads-cli下载到用户自己的home目录/home/test目录并赋予可执行权限
cd /home/test
wget https://quark.aoss.cn-sh-01.sensecoreapi-oss.cn/ads-cli/release/v1.9.0/ads-cli
chmod +x ads-cli
# 使用的时候,可以使用绝对路径进行执行,例如使用以下命令查看版本号:
/home/test/ads-cli -V
2.密钥使用说明
ak/sk设置方式:
直接将ak/sk写在uri中,以冒号分隔:
s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix
- 如果将ak/sk使用在uri中,则可以归纳为公式:
s3://ak:sk@bucketname.ip/path
- 如果没有将ak/sk在uri中,则可以归纳为公式:
s3://bucketname.ip/path
sftp的密码设置方式有以下三种:
- 免密登录:设置私钥路径环境变量
export SSH_PRIVATE_KEY_PATH="/home/user/.ssh/id_rsa"
- 密码登录:直接写在uri中 , 推荐写在脚本中使用
user:pass@ip:path
- 密码登录:手动输入
user@ip:path
3.基本用法
命令格式
ads-cli [global options] command SRC DST
即把SRC
同步到DST
,既可以同步目录,也可以同步文件。
其中:
SRC
代表数据源地址及路径DST
代表目标地址及路径command
包含sync
和copy(缩写cp)
两个,sync
支持增量同步,copy(缩写cp)
支持全量同步。[global options]
代表可选的同步选项,详情参考global options参考。
地址格式均为[NAME://][ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]
其中:
NAME
是存储类型,现在支持s3
、oss
、sftp
三种类型。ACCESS_KEY
和SECRET_KEY
是对象存储的 API 访问密钥,如果包含了特殊字符,则需要手动转义并替换,比如/
需要被替换为其转义符%2F
BUCKET[.ENDPOINT]
是对象存储的访问地址PREFIX
是可选的,限定要同步的目录名前缀。- 不支持:
[NAME://][ACCESS_KEY:SECRET_KEY@][ENDPOINT]/BUCKET/[/PREFIX]
,例如:s3://s3.<region>.amazonaws.com.cn/bucket[/PREFIX]
注: 当前对于ads-cli的sync的设计(相同文件名,相同大小的前提下,比较时间戳)
以下是一个 AOSS 对象存储的地址范例:
# aoss内网地址
s3://ak:sk@mybucket.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix
# aoss公网地址
s3://ak:sk@mybucket.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix
4.快速开始
afs和aoss互传
必须在sensecore内网机器,才能访问afs,此时访问aoss建议使用内网地址aoss-internal.cn-sh-01.sensecoreapi-oss.cn
。
# 从afs全量同步到aoss
ads-cli cp ./srcSync/ s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/
# 从aoss全量同步到afs
ads-cli cp s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./dstSync/
# 从afs增量同步到aoss
ads-cli sync ./srcSync/ s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/
# 从aoss增量同步到afs
ads-cli sync s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./dstSync/
从阿里云oss传输数据到aoss
如果在外网机器上运行ads-cli
,此时需要访问aoss的公网地址aoss-sh-01.sensecoreapi-oss.cn
,此时必须加上--https
参数。
# 从oss全量同步到aoss
ads-cli --https cp oss://ak:sk@bucket1.oss-cn-beijing.aliyuncs.com/prefix/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
# 从oss增量同步到aoss
ads-cli --https sync oss://ak:sk@bucket1.oss-cn-beijing.aliyuncs.com/prefix/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
如果在sensecore内网机器上运行ads-cli
,此时访问aoss建议使用内网地址aoss-internal.cn-sh-01.sensecoreapi-oss.cn
。
# 从oss全量同步到aoss
ads-cli cp oss://ak:sk@bucket1.oss-cn-beijing.aliyuncs.com/prefix/ s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/
# 从oss增量同步到aoss
ads-cli sync oss://ak:sk@bucket1.oss-cn-beijing.aliyuncs.com/prefix/ s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/prefix/
从用户本地机器到aoss、afs
需要访问aoss的公网地址aoss-sh-01.sensecoreapi-oss.cn
,此时必须加上--https
参数。
# 传输单个文件
ads-cli --https cp ./one_file.txt s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/one_file.txt
# 传输文件夹
ads-cli --https cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
# 传输到afs(数据在sensecore机器上)
ads-cli cp ./srclocal/ ./dstSync/
# 传输到afs(数据在用户自己的机器上)(ip从购买的裸金属或云开发机处获得)
scp ./srclocal/ username@ip:/dstSync/
从用户本地机器到minio
上传到minio的路径格式与其他的不同,格式为:minio://[ACCESS_KEY:SECRET_KEY[:TOKEN]@]ENDPOINT/BUCKET[/PREFIX]
上传到minio的地址范例:
# 从本地上传到minio
ads-cli cp ~/test_files/1/ minio://ak:sk@IP:PORT/mybucket/
5.copy, sync, pcopy引擎推荐使用场景:
[ 源端数据集目录称为S, 目的端数据集目录称为D ] • cp引擎适用场景: a. D是空目录 b. S数据量小 && D数据量大 (无论D中是否含有S的子集, 该场景都适合cp) c. S数据量较大/大 && D数据量大 && D中不含有S中任何数据(即S是首次写入D) • sync引擎适用场景: a. S数据量较大/大 && D数据量大 && D含有S的子集ss && ss在S中占比较大/大sync场景可以简单理解为是对D的大部分数据进行更新操作. • pcopy: a. 只支持!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~ 组成的对象 进度条含义说明: 530:当前发现的文件数目(list出来的文件数) 2:sync 引擎中源端和目的端相同的文件数目 100%: 当前上传进度(由于sensesync是边list边传,所以是动态变化的) 0.0%: 每秒上传文件数目 0.0%: 每秒上传文件大小
用户指南
存储数据同步工具主要包括两大块:web使用和cli命令行使用
cli工具
a. global options参考
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
--start KEY | -s KEY | 同步的第一个对象名 |
--end KEY | -e KEY | 同步的最后一个对象名 |
--threads | -p value | 并发线程数 (默认:10) |
--dryrun | / | 不拷贝文件 (默认:false) |
--delete-src | --deleteSrc | 同步后删除源地址的对象 (默认:false) |
--delete-dst | --deleteDst | 删除目标地址下的不相关对象 (默认:false) |
--exclude PATTERN | / | 排除匹配PATTERN 的 Key |
--include PATTERN | / | 不排除匹配PATTERN 的 Key |
--bwlimit value | / | 限制最大带宽;单位为Mbps (0 表示不限制) (默认:0) |
--https | / | 使用 HTTPS (默认:false) 使用 HTTPS (默认:false);推荐:内网使用https(去掉--https即可)、外网使用http |
--verbose | -v | 将日志level设置为VERBOSE |
--quiet | -q | 将日志level设置为ERROR |
--help | -h | 查看ads-cli 的相关使用说明 |
--version | -V | 查看ads-cli 的当前版本 |
--exclude-dir PATTERN | / | 排除匹配PATTERN 的多个目录 |
--recordName value | -rd | 跳过软链接源目录的迁移,并记录到[value] |
--include-dir PATTERN | / | 匹配PATTERN的多个目录 |
a.全量迁移使用示例
- AFS 到 AOSS 的数据同步
- 复制文件
ads-cli --https cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 设置日志级别为
DEBUG ads-cli --https -v cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 设置日志级别为
ERROR ads-cli --https -q cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 模拟复制(list 查看文件数目和大小)
ads-cli --https --dryrun --noperms cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 开启https模式
ads-cli --https cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 复制过程中过滤掉关键字
‘abcd123’ ads-cli --https --exclude="abcd123" cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 设置线程数
ads-cli --https --threads=50 cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 删除AFS文件(rm)
ads-cli --https --dryrun --deleteSrc --noperms cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 拷贝后删除源端文件(mv)
ads-cli --https --deleteSrc cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 设置http建立连接的时间(单位:s)
ads-cli --https --connTimeout 120 cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 设置http连接的时间(单位:s)
ads-cli --https --timeout 120 cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 目的端AOSS匿名
ads-cli --https --anonymous 1 cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn:9000/
- 查看目录统计信息(max/min/average)
ads-cli --https --dryrun --noperms cp --info ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn:9000/
- 删除AFS文件(rm,只删除不copy)
ads-cli --https --dryrun --deleteSrc cp ./srcSync/ s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/
- 删除AOSS文件(rm,只删除不copy)
ads-cli --https --dryrun --deleteSrc cp s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./dstSync/
b.增量迁移使用示例
- AOSS 到 AFS 的数据同步
- 复制文件
ads-cli --https sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置日志级别为
DEBUG ads-cli --https -v sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置日志级别为
ERROR ads-cli --https -q sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 模拟复制(list 查看文件数目和大小)
ads-cli --https --dryrun sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 开启https模式
ads-cli --https sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 复制过程中过滤掉关键字‘abcd123’
ads-cli --https --exclude="abcd123" sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置线程数
ads-cli --https --threads=50 sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置带宽上限, 单位Mb/s
ads-cli --https --bwlimit=2 sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 二次复制后删除源端数据 (见测试说明)
ads-cli --https --deleteSrc sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 希望针对某一字典序范围进行同步, 例子中将会上传对象名属于闭合区间[aa, zz]字典序范围的对象,注意:–start, --end是针对对象名而言, 并且查找范围也是整个源端目录
ads-cli --https sync --start=aa --end==ff s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置http建立连接的时间(单位:s)
ads-cli --https --conntimeout 120 sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 设置http连接的时间(单位:s)
ads-cli --https --timeout 120 sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
- 源端AOSS匿名
ads-cli --https --anonymous 0 sync s3://ak:sk@bucket1.aoss.cn-sh-01.sensecoreapi-oss.cn/prefix/ ./srcSync/
c.AOSS挂载成文件夹Mount命令使用
本功能只适用于裸金属产品操作,不支持容器产品mount。
支持裸金属通过mount命令挂载到AOSS上,AOSS可作为一个目录(类似文件存储)挂载,用户使用时直接在裸金属节点上以访问文件系统(文件夹)的方式即可访问对象存储上的数据。成功挂载后,读写卸载等操作参照linux命令。
命令行示例:
ads-cli mount 【AOSS路径】 【挂载目的路径】
ads-cli mount s3://[ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX] [MOUNT_POINT]
其中:
s3://[ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]
为需要挂载到计算节点的AOSS的路径[ACCESS_KEY:SECRET_KEY@]
为用户的AK和SKBUCKET
为用户的桶名称[.ENDPOINT]
为用户AOSS的内网地址[/PREFIX]
为用户挂载的桶内具体的路径
[MOUNT_POINT]
为挂载目的路径
使用示例:
ads-cli mount s3://ak:sk@bucket.aoss-internal.cn-sh-01.sensecoreapi-oss.cn/my_path /localfolder
d.支持从第三方云传输到AOSS和AFS
以腾讯云COS为例,介绍如何从第三方云传输到AOSS/AFS: 假设用户的sensecore内网机器执行,且能访问AOSS/AFS,想要将COS的数据增量同步到AOSS/AFS。
第三方云到AOSS
# 从cos增量同步到aoss
ads-cli sync cos://ak:sk@bucket1.ap-beijing.myqcloud.com/prefix/ s3://ak:sk@bucket1.aoss-internal.cn-sh-01.sensecoreapi-cn/prefix/
第三方云到AFS
# 从cos增量同步到afs
ads-cli sync cos://ak:sk@bucket1.ap-beijing.myqcloud.com/prefix/ ./dstSync/
现在支持如下第三方云:(仅支持第三方云对象存储->SenseCore的传输)
第三方对象存储 | NAME值 |
---|---|
阿里云OSS | oss |
腾讯云COS | cos |
百度云BOS | bos |
金山云KS3 | ks3 |
Amazon国内版S3 | s3 |
华为云OBS | obs |
七牛云Kodo | qiniu |
UCloud US3 | ufile |
使用时,只需将地址格式[NAME://][ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]
中的NAME
修改为对应的NAME值即可,例如:第三方云是腾讯云COS,则地址为 cos://ak:sk@bucket.endpoint/prefix/
e.支持跨区afs-afs传输
前提:两个可用区之间的afs传输时,需要每个可用区有计算节点挂载文件存储到本地目录,从而实现两个计算节点的本地目录的传输。
比如:A可用区的A计算节点挂载A文件存储空间到本地目录/home/Makefile,B可用区的B计算节点挂载B文件存储空间到本地目录/home/,从而实现A计算节点的本地目录/home/Makefile与B计算节点的本地目录/home传输.
ADS cli工具安装在A可用区上的A计算节点的命令行演示:
./ads-cli cp /home/Makefile root@12.18.30.11:/home/
web工具使用
- 找到数据同步工具点击进入
注:若使用者身份为租户,首次使用需要先开通服务;若使用者身份为用户,首次使用需要先向租户管理员申请权限,若租户管理员暂未开通,则需要租户先开通服务再授权用户。
- 点击【创建数据同步任务】,目前支持AI对象存储和AI文件存储之间的互相传输,AI对象存储到AI对象存储、AI文件存储到AI文件存储的传输,以及从第三方云到AI文件存储、第三方云到AI对象存储之间的传输(详见4.第三方云传输到AOSS/AFS)
- 填写数据同步详细信息
- 第三方云传输到AOSS/AFS
- 点击【创建数据同步任务】
- 任务类型选择【第三方云->AI对象存储】或【第三方云->AI文件存储】
- 选择第三方云的名称
- 填写第三方云域名,例如:oss-cn-beijing.aliyuncs.com (具体查找第三方云的外网访问地址)
- SecretKey和SecretKey输入用于迁移的云API密钥。推荐您为迁移服务新建密钥,迁移完成后删除该密钥。
- 【第三方数据存储具体路径】,若要传输整个桶,填写【桶名称/】,无需填写Prefix;若迁移部分数据,格式要求必须以正斜线(/)结尾,例如 folder1/abc/sss/
- 关闭服务
支持您将开通了的ADS服务进行关闭,停用数据同步工具服务会清空所有进行中的任务、历史任务,并会删除所有相关资源。
数据迁移工具正则表达式匹配详解
ads支持标正则的范围是:
命令 | 范围 |
---|---|
--include | 需要包含的文件(对象) |
--exclude | 需要排除的文件(对象) |
该目录树是进行迁移操作的源目录:
--include 的例子
迁移含有base关键字的对象:
--include "base"
结果:
迁移以base关键字为前缀的对象:
--include "^base"
结果:
迁移仅含base关键字的对象:
--include "^base$"
结果:
迁移以关键字 1结尾的对象:
--include "1$"
结果:
--exclude的例子:
排除含有base关键字的对象:
--exclude "base"
结果:
排除以base关键字为前缀的对象:
--exclude "^base"
结果:
排除仅含base关键字的对象:
--exclude ”^base$“
结果:
排除以关键字1结尾的对象:
--exclude "1$"
结果:
##附性能测试参考
同可用区内,文件到对象、对象到对象、对象到文件、文件到文件场景的性能测试
考虑到 tech 环境性能和复用文件存储性能测试脚本等因素,每次预埋数据量固定为 3264GB(3.1875TB)
常见问题
什么是存储数据同步工具ADS?
存储数据同步工具ADS是一个数据迁移工具,用户可以使用ADS方便快捷地进行数据同步和迁移。
数据迁移任务的数量是否有上限?
没有上限。
为什么我没有成功地传输一个/一组文件?例如:出现 0 Scanned
A:请确认—-include的做法,详细参照ADS帮助文档【数据迁移工具正则表达式匹配详解】部分。