【文件存储NAS】数据迁移工具介绍及使用指南

本文涉及的产品
文件存储 NAS,50GB 3个月
简介: NAS数据迁移工具可以帮助您方便地将对象存储(如OSS、七牛等)或本地磁盘上的文件同步到 NAS文件系统。

一、简介

    文件存储NAS是面向阿里云ECS、HPC、Docker等计算节点的共享文件存储服务,具备简单易用、多共享、高性能、安全等特性,目前支持NFSv3和NFSv4协议。NAS的推出极大丰富了阿里云存储产品线,为用户存储上云提供了更加多样的选择。

    与其他存储产品(主要是对象存储和块存储)及自建NAS相比,阿里云文件存储NAS具备鲜明的特点:


文件存储NAS 对象存储(如OSS、七牛、S3等) 块存储(如阿里云磁盘、AWS EBS等) 自己搭建NAS
标准协议(标准NFS协议、标准NFS客户端、兼容POSIX接口) YES 通过ossfs等工具提供有限支持 YES
YES
多共享(同一文件系统/名字空间被多个计算节点同时读写访问) YES YES
不支持共享 YES
高性能(高吞吐、低延迟、水平弹性扩展) YES 延迟较高,随机读写性能较差 吞吐无法水平扩展 性能没有保证,无法水平扩展
高可靠、高可用、安全 YES YES
YES 无法保证
    为了满足数据迁移需求,让用户更加方便、快捷地将数据迁移到文件存储NAS,我们于近期推出了NAS数据迁移工具nasimport,nasimport具备以下功能特性:

    (1)支持的数据源:本地磁盘、OSS、七牛、百度对象存储、金山对象存储、又拍云、亚马逊 s3、腾讯云 cos、HTTP链接;

    (2)支持存量数据同步(允许指定只同步某个时间点之后的文件);

    (3)支持增量数据自动同步;

    (4)支持断点续传;

    (5)支持并行数据下载和上传。


二、使用方法

1. 运行环境要求

  • 需要在能够挂载目标NAS文件系统的ECS虚拟机上运行该迁移工具。能否挂载NAS文件系统及如何挂载详见:点击查看
  • 需要在 Java JDK 1.7 以上的环境中运行nasimport迁移工具,建议使用 Oracle 版本 JDK:点击查看
  • 程序运行前请检查进程允许打开的文件数的配置(ulimit -n 查看),如果小于10240,需要作相应修改。

2. 下载工具及配置

2.1 首先,在您本地服务器上创建同步的工作目录,并且将nasimport工具包下载在该目录中。下载链接


示例:创建 /root/ms 目录为工作目录,且工具包下载在该工作目录下:
export work_dir=/root/ms
wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/45306/cn_zh/1479113980204/nasimport_linux.tgz
tar zxvf ./nasimport_linux.tgz -C "$work_dir"

2.2 编辑工作目录 ($work_dir) 下的配置文件config/sys.properties:

vim $work_dir/config/sys.properties
workingDir=/root/ms
slaveUserName=
slavePassword=
privateKeyFile=
slaveTaskThreadNum=60
slaveMaxThroughput(KB/s)=100000000
slaveAbortWhenUncatchedException=false
dispatcherThreadNum=5

建议您直接使用配置默认值。如有特殊要求,可以编辑配置字段值:
字段 说明
workingDir
表示当前的工作目录,即工具包解压后所在的目录
slaveTaskThreadNum
表示同时执行同步的工作线程数
slaveMaxThroughput(KB/s)
slaveMaxThroughput(KB/s)
slaveAbortWhenUncatchedException
表示遇到未知错误时是否跳过还是 abort,默认不 abort
dispatcherThreadNum  表示分发任务的并行线程数,默认值一般够用

3. 启动服务

3.1 nasimport支持的命令如下:

任务提交:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties submit $jobConfigPath
任务取消:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties clean $jobName
状态查看:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties stat detail
任务重试:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties retry $jobName

3.2 执行如下命令启动后台服务:

cd $work_dir
nohup java -Dskip_exist_file=false -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties start > $work_dir/nasimport.log 2>&1 &
请注意:相关的 log 文件会自动生成在您执行启动服务的当前目录中,建议您在工作目录($work_dir)下执行启动命令。启动任务时如果 skip_exist_file=true,则在上传中如果碰到 NAS 文件系统中上存在且长度和源端一致的文件,将会跳过此文件

4. 提交任务

4.1 编辑任务描述文件 nas_job.cfg


任务描述文件字段说明:
字段名 说明
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 所有文件的操作。

4.2 提交任务

java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties  submit $work_dir/nas_job.cfg

注意事项:
(1)如果有同名任务正在执行,则提交任务会失败。
(2)如果您需要暂停同步任务,您可以停止 nasimport 进程,需要同步时重启 nasimport 进程即可,重启后会按照上次的进度继续上传。
(3)如果您需要重新全量同步文件,您可以先停止 nasimport 进程,再调用如下命令清除当前任务。示例:假设当前任务名为 nas_job(这个任务名配置在文件 nas_job.cfg 中),命令如下:
ps axu | grep "nasimport.jar.* start" | grep -v grep | awk '{print "kill -9 "$2}' | bash
java -jar $work_dir/nasimport.jar  -c $work_dir/conf/sys.properties clean nas_job

5. 查看任务执行状态

java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties  stat detail
--------------job stats begin---------------
----------------job stat begin------------------
JobName:nas_job
JobState:Running
PendingTasks:0
RunningTasks:1
SucceedTasks:0
FailedTasks:0
ScanFinished:true
RunningTasks Progress:
FD813E8B93F55E67A843DBCFA3FAF5B6_1449307162636:26378979/26378979 1/1
----------------job stat end------------------
--------------job stats end---------------
这里会显示当前任务的总体的执行进度,并且会显示当前正在执行的 task 进度。例如上文中:“26378979/26378979”表示:总共需要上传的数据量(26378979字节)/已经上传完成的数据量(26378979字节)。“1/1” 表示:总共需要上传的文件个数(1个)/已经上传完成的文件个数(1个)。

迁移工具会将用户提交的一个 job 任务分解为多个 task 并行执行,当所有的 task 都执行完成之后,job 任务才算执行完成。任务执行完成之后,JobState 会显示为”Succeed”或者”Failed”,表示任务执行成功或者失败。 如果任务执行失败,可以通过如下命令查看各个task失败的原因:(以下命令中 $jobName 需要替换成对应的 job 名字,jobName 配置在文件 nas_job.cfg中)
cat $work_dir/master/jobs/$jobName/failed_tasks/*/audit.log
对于任务失败的情况,我们在工具中已经做了较为充分的重试,对于可能由于数据源或者目标源暂时不可用引起的失败情况,可以通过如下命令尝试重新执行失败的任务:
java -jar $work_dir/nasimport.jar  -c $work_dir/config/sys.properties retry $jobNam

6. 常见任务失败原因


(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,这种情况请联系我们( 请加旺旺群:1562614356 )。

7. 建议


在配置迁移服务时,如果源端是 oss,请将 srcDomain 设为带 internal 的内网域名,可以省掉从 oss 源端下载的流量费,仅收取 oss 访问次数的费用,且可以获得更快的迁移速度,oss 内网域名您可以从 oss 控制台获取。

如果您的 NAS 在专有网络中,且源端是 oss,请将 srcDomain 设为 oss 提供 的VPC 环境域名,各 Region 对应的 VPC 环境域名: 点击查看

相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
SQL 分布式计算 关系型数据库
文件存储HDFS版和数据库MySQL双向数据迁移
本文档介绍如何使用Sqoop工具实现文件存储HDFS版和关系型数据库MySQL之间的双向数据迁移。
585 1
|
存储 弹性计算 分布式计算
文件存储HDFS版和对象存储OSS双向数据迁移
本文档介绍文件存储HDFS版和对象存储OSS之间的数据迁移过程。您可以将文件存储HDFS版数据迁移到对象存储OSS,也可以将对象存储OSS的数据迁移到文件存储HDFS版上。
646 0
|
存储 Java 文件存储
【文件存储NAS】数据迁移工具介绍及使用指南
NAS数据迁移工具可以帮助您方便地将对象存储(如OSS、七牛等)或本地磁盘上的文件同步到 NAS文件系统。
6705 0
|
8月前
|
存储 弹性计算 监控
|
9月前
|
弹性计算 Linux DataWorks
阿里云ecs搭建简易ftp服务器-用于DataWorks文件存储及依赖校验
很多企业客户在使用阿里云产品时,经常需要与FTP服务器进行文件交互,诸如跨IDC任务done文件依赖,跨账号、部门临时数据交互等场景。这里简要记录阿里云ecs搭建简易ftp服务器用于上述场景答疑的过程。
|
9月前
|
存储 弹性计算 并行计算
在高性能计算(HPC)场景下,阿里云存储的文件存储产品的实践
在高性能计算(HPC)场景下,阿里云存储的文件存储产品具有以下的应用需求和实践
313 4
|
11月前
|
文件存储
《阿里云产品手册2022-2023 版》——文件存储 NAS
《阿里云产品手册2022-2023 版》——文件存储 NAS
145 0
|
文件存储 容器
《阿里云文件存储 NAS 在容器场景的最佳实践》电子版地址
阿里云文件存储 NAS 在容器场景的最佳实践
166 0
《阿里云文件存储 NAS 在容器场景的最佳实践》电子版地址
|
存储 文件存储 容器
《拥抱容器存储,使用阿里云容器服务 ACK +文件存储 NAS 构建现代化企业应用》电子版地址
拥抱容器存储,使用阿里云容器服务 ACK +文件存储 NAS 构建现代化企业应用
181 0
《拥抱容器存储,使用阿里云容器服务 ACK +文件存储 NAS 构建现代化企业应用》电子版地址
|
文件存储 对象存储
使用阿里云oss进行文件存储代码实现
使用阿里云oss进行文件存储代码实现

相关产品

  • 文件存储NAS