文件存储nas是面向阿里云ecs、hpc、docker等计算节点的共享文件存储服务,具备简单易用、多共享、高性能、安全等特性,目前支持nfsv3和nfsv4协议。nas的推出极大丰富了阿里云存储产品线,为用户存储上云提供了更加多样的选择。
与其他存储产品(主要是对象存储和块存储)及自建nas相比,阿里云文件存储nas具备鲜明的特点:
<b>文件存储nas</b>
<b>对象存储(如oss、七牛、s3等)</b>
<b>块存储(如阿里云磁盘、aws ebs等)</b>
<b>自己搭建nas</b>
标准协议(标准nfs协议、标准nfs客户端、兼容posix接口)
yes
通过ossfs等工具提供有限支持
多共享(同一文件系统/名字空间被多个计算节点同时读写访问)
不支持共享
高性能(高吞吐、低延迟、水平弹性扩展)
延迟较高,随机读写性能较差
低延迟,吞吐无法水平扩展
性能没有保证,无法水平扩展
高可靠、高可用、安全
无法保证
为了满足数据迁移需求,让用户更加方便、快捷地将数据迁移到文件存储nas,我们于近期推出了nas数据迁移工具nasimport,nasimport具备以下功能特性:
(1)支持的数据源:本地磁盘、oss、七牛、百度对象存储、金山对象存储、又拍云、亚马逊 s3、腾讯云 cos、http链接;
(2)支持存量数据同步(允许指定只同步某个时间点之后的文件);
(3)支持增量数据自动同步;
(4)支持断点续传;
(5)支持并行数据下载和上传。
程序运行前请检查进程允许打开的文件数的配置(ulimit -n 查看),如果小于10240,需要作相应修改。
示例:创建 /root/ms 目录为工作目录,且工具包下载在该工作目录下:
建议您直接使用配置默认值。如有特殊要求,可以编辑配置字段值:
<b>字段</b>
<b>说明</b>
workingdir
表示当前的工作目录,即工具包解压后所在的目录
slavetaskthreadnum
表示同时执行同步的工作线程数
slavemaxthroughput(kb/s)
slaveabortwhenuncatchedexception
表示遇到未知错误时是否跳过还是 abort,默认不 abort
dispatcherthreadnum
表示分发任务的并行线程数,默认值一般够用
请注意:相关的 log 文件会自动生成在您执行启动服务的当前目录中,建议您在工作目录($work_dir)下执行启动命令。启动任务时如果 skip_exist_file=true,则在上传中如果碰到 nas 文件系统中上存在且长度和源端一致的文件,将会跳过此文件
<b></b>
任务描述文件字段说明:
<b>字段名</b>
jobname
自定义任务名字,任务的唯一标识, 支持提交多个名字不同的任务
jobtype
可以配置为 import(执行数据同步操作)或者 audit(仅进行同步源数据与同步目标数据全局一致性校验)
isincremental=false
是否打开自动增量模式,如果设为 true,会每间隔incrementalmodeinterval(单位秒)重新扫描一次增量数据,并将增量数据同步到nas上
incrementalmodeinterval=86400
增量模式下的同步间隔
importsince
指定时间,用于同步大于该时间的数据,这个时间为 unix 时间戳(秒数);默认为0
srctype
同步源类型,目前支持 oss,qiniu,baidu,ks3,youpai,local
srcaccesskey
如果 srctype设 置为 oss、qiniu、baidu、ks3、youpai,则需要填写数据源的 access key
srcsecretkey
如果 srctype 设置为 oss、qiniu、baidu、ks3、youpai,则需要填写数据源的 secret key
srcdomain
源 endpoint
srcbucket
源 bucket 名字
srcprefix
源前缀,默认为空;如果 srctype=local,则填写本地待同步目录,请注意您需要填写完整的目录路径(以’/‘结尾)。如果 srctype 设置为 oss、qiniu、baidu、ks3、youpai,则需要填写待同步的 object 前缀,同步所有文件前缀可以设置为空。
desttype
同步目标类型(默认为 nas)
destmountdir
nas 本地挂载目录
destmounttarget
nas 挂载点域名
destneedmount=true
工具是否执行自动挂载,默认为 true,您也可以选择false并手动将nas挂载点到 destmountdir 目录下
destprefix
填写同步目标端文件前缀,默认为空
taskobjectcountlimit
每个子任务最大的文件个数限制,这个会影响到任务执行的并行度,一般配置为总的文件数/你配置的下载线程数,如果不知道总文件数,建议保持默认值
taskobjectsizelimit
每个子任务下载的数据量大小限制(bytes),建议保持默认值
scanthreadcount
并行扫描文件的线程数,与扫描文件的效率有关,建议保持默认值
maxmultithreadscandepth
最大允许并行扫描目录的深度,建议保持默认值
请注意:
(1) 如果配置了自动增量模式,则任务会定期被执行以扫描最新的数据,该任务永远不会结束。
(2)对于 srctype 为 youpai 的情况,由于又拍云本身 api 限制,list 文件的操作无法实现 checkpoint,在 list 完成之前杀掉进程会导致重新 list 所有文件的操作。
注意事项:
(1)如果有同名任务正在执行,则提交任务会失败。
(2)如果您需要暂停同步任务,您可以停止 nasimport 进程,需要同步时重启 nasimport 进程即可,重启后会按照上次的进度继续上传。
(3)如果您需要重新全量同步文件,您可以先停止 nasimport 进程,再调用如下命令清除当前任务。示例:假设当前任务名为 nas_job(这个任务名配置在文件 nas_job.cfg 中),命令如下:
这里会显示当前任务的总体的执行进度,并且会显示当前正在执行的 task 进度。例如上文中:“26378979/26378979”表示:总共需要上传的数据量(26378979字节)/已经上传完成的数据量(26378979字节)。“1/1” 表示:总共需要上传的文件个数(1个)/已经上传完成的文件个数(1个)。
迁移工具会将用户提交的一个 job 任务分解为多个 task 并行执行,当所有的 task 都执行完成之后,job 任务才算执行完成。任务执行完成之后,jobstate 会显示为”succeed”或者”failed”,表示任务执行成功或者失败。<b>如果任务执行失败,可以通过如下命令查看各个task失败的原因:</b>(以下命令中 $jobname 需要替换成对应的 job 名字,jobname 配置在文件 nas_job.cfg中)
对于任务失败的情况,我们在工具中已经做了较为充分的重试,对于可能由于数据源或者目标源暂时不可用引起的失败情况,可以通过如下命令尝试重新执行失败的任务:
(1)任务配置出错,比如 access key/id 出错,权限不足等,这种情况下通常现象是所有task都失败,具体确认需要查看 $work_dir/nasimport.log 文件。
(2)源文件名的编码方式与系统默认的文件名编码方式不符,例如在 windows 下文件名默认为 gbk 编码,linux 下默认为 utf-8 编码,对于数据源是 nfs 的情况下较容易出现该问题。
(3)上传过程中源目录的文件发生了修改,这种情况在 audit.log 里会提示size_not_match 相关字样的错误,这种情况下老的文件已经上传成功,新的修改没有上传到nas。
(4)源文件在上传过程中被删除,导致下载文件时失败。
(5)数据源出现问题导致下载数据源文件失败。
(6)没有先杀掉进程再执行 clean 有可能会导致程序执行异常。
(7)程序异常退出,任务状态为 abort,这种情况请联系我们(<b>请加旺旺群:1562614356</b> )。
在配置迁移服务时,如果源端是 oss,请将 srcdomain 设为带 internal 的内网域名,可以省掉从 oss 源端下载的流量费,仅收取 oss 访问次数的费用,且可以获得更快的迁移速度,oss 内网域名您可以从 oss 控制台获取。