阅读164 返回首页    go 微信


Linux平台使用说明__官方迁移工具_常用工具_对象存储 OSS-阿里云

简介

【ossimport2】同步工具可以将您本地或第三方云存储服务上的文件同步到OSS上。

主要特性:

  • 支持将本地、OSS、七牛、百度对象存储、金山对象存储、又拍云、亚马逊s3、腾讯云cos、HTTP链接形式的文件同步到指定OSS Bucket上
  • 支持存量数据同步(允许指定只同步某个时间点之后的文件)
  • 支持增量数据自动同步
  • 支持断点续传
  • 支持上传/下载流量控制
  • 支持并行list和并行数据下载/上传

如果您有较大量级的数据(超过20T),且期望以较短时间迁移到OSS上,除了【ossimport2】同步工具之外,我们的专业技术人员还可以为您提供多机器并行同步方案,请加旺旺群:904193608联系我们。

运行环境

您需要在Java JDK1.7以上的环境中运行【ossimport2】同步工具,建议使用Oracle版本JDK:

点击查看

注意:程序运行前请检查进程允许打开的文件数的配置(ulimit -n 查看),如果小于10240,需要作相应修改。

部署工具

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

示例:创建/root/ms目录为工作目录,且工具包下载在该工作目录下。

  1. export work_dir=/root/ms
  2. wget https://import-service-package.oss.aliyuncs.com/ossimport2/ossimport-v2.1-linux.zip
  3. unzip ./ossimport4linux.zip -d "$work_dir"

配置工具

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

  1. vim $work_dir/conf/sys.properties
  2. workingDir=/root/ms
  3. slaveUserName=
  4. slavePassword=
  5. privateKeyFile=
  6. slaveTaskThreadNum=60
  7. slaveMaxThroughput(KB/s)=100000000
  8. slaveAbortWhenUncatchedException=false
  9. dispatcherThreadNum=5

您可以直接使用配置默认值。如有特殊要求,可以编辑配置字段值:

字段 说明
workingDir 表示当前的工作目录,即工具包解压后所在的目录
slaveTaskThreadNum 表示同时执行同步的工作线程数
slaveMaxThroughput(KB/s) 表示迁移速度总的流量上限限制
slaveAbortWhenUncatchedException 表示遇到未知错误时是否跳过还是abort,默认不abort
dispatcherThreadNum 表示分发任务的并行线程数,默认值一般够用

服务运行

ossimport2支持如下命令:

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

服务的运行和使用步骤如下:

1.启动服务,执行如下命令:

  1. cd $work_dir
  2. nohup java -Dskip_exist_file=false -jar $work_dir/bin/ossimport2.jar -c $work_dir/conf/sys.properties start > $work_dir/logs/ossimport2.log 2>&1 &

请注意:相关的log文件会自动生成在您执行启动服务的当前目录的logs目录中,建议您在工作目录($work_dir)下执行启动命令。启动任务时如果skip_exist_file=true,则在上传中如果碰到oss上存在且长度和源端一致的文件,将会跳过此文件

2.编辑示例任务描述文件local_job.cfg

字段说明:

字段名 说明
jobName 自定义任务名字,任务的唯一标识, 支持提交多个名字不同的任务
jobType 可以配置为import(执行数据同步操作)或者audit(仅进行同步源数据与同步目标数据全局一致性校验)
isIncremental=false 是否打开自动增量模式,如果设为true,会每间隔incrementalModeInterval(单位秒)重新扫描一次增量数据,并将增量数据同步到oss上
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前缀,同步所有文件前缀可以设置为空。
destAccessKey 填写同步目标端OSS 的access key
destSecretKey 填写同步目标端 OSS的 secret key
destDomain 填写同步目标端OSS的endpoint
destBucket 填写同步目标端 OSS的bucket
destPrefix 填写同步目标端文件前缀,默认为空
taskObjectCountLimit 每个子任务最大的文件个数限制,这个会影响到任务执行的并行度,一般配置为总的文件数/你配置的下载线程数,如果不知道总文件数,可以配置为默认值
taskObjectSizeLimit 每个子任务下载的数据量大小限制(bytes)
scanThreadCount 并行扫描文件的线程数,与扫描文件的效率有关
maxMultiThreadScanDepth 最大允许并行扫描目录的深度,采用默认值即可

注:1) 如果配置了自动增量模式,则任务会定期被执行以扫描最新的数据,该任务永远不会结束。2) 对于srcType为youpai的情况,由于又拍云本身API限制,list文件的操作无法实现checkpoint,在list完成之前杀掉进程会导致重新list所有文件的操作。

3.提交任务

  1. java -jar $work_dir/bin/ossimport2.jar -c $work_dir/conf/sys.properties submit $work_dir/local_job.cfg

注意事项:

  • 如果有同名任务正在执行,则提交任务会失败。
  • 如果您需要暂停同步任务,您可以停止ossimport2进程,需要同步时重启ossimport2进程即可,重启后会按照上次的进度继续上传。
  • 如果您需要重新全量同步文件,您可以先停止ossimport2进程,再调用如下命令清除当前任务。

示例:假设当前任务名为local_test(这个任务名配置在文件local_job.cfg中),命令如下

  1. ps axu | grep "ossimport2.jar.* start" | grep -v grep | awk '{print "kill -9 "$2}' | bash
  2. java -jar $work_dir/bin/ossimport2.jar -c $work_dir/conf/sys.properties clean local_test

4.查看任务执行状态:

  1. [root@iZ23gztmc8fZ local]# java -jar $work_dir/bin/ossimport2.jar -c $work_dir/conf/sys.properties stat detail
  2. --------------job stats begin---------------
  3. ----------------job stat begin------------------
  4. JobName:local_test
  5. JobState:Running
  6. PendingTasks:0
  7. RunningTasks:1
  8. SucceedTasks:0
  9. FailedTasks:0
  10. ScanFinished:true
  11. RunningTasks Progress:
  12. FD813E8B93F55E67A843DBCFA3FAF5B6_1449307162636:26378979/26378979 1/1
  13. ----------------job stat end------------------
  14. --------------job stats end---------------

这里会显示当前任务的总体的执行进度,并且会显示当前正在执行的task进度。例如上文中:“26378979/26378979”表示:总共需要上传的数据量(26378979字节)/已经上传完成的数据量(26378979字节)。“1/1” 表示:总共需要上传的文件个数(1个)/已经上传完成的文件个数(1个)。

迁移工具会将用户提交的一个job任务分解为多个task并行执行,当所有的task都执行完成之后,job任务才算执行完成。任务执行完成之后,JobState会显示为”Succeed”或者”Failed”,表示任务执行成功或者失败。如果任务执行失败,可以通过如下命令查看各个task失败的原因:

以下命令中$jobName需要替换成对应得job名字(jobName配置在文件local_job.cfg中)。

  1. cat $work_dir/master/jobs/$jobName/failed_tasks/*/audit.log

对于任务失败的情况,我们在工具中已经做了较为充分的重试,对于可能由于数据源或者目标源暂时不可用引起的失败情况,可以通过如下命令尝试重新执行失败的TASK:

  1. java -jar $work_dir/bin/ossimport2.jar -c $work_dir/conf/sys.properties retry $jobName

5.常见任务失败原因

  • 任务配置出错,比如access key/id出错,权限不足等,这种情况下通常现象是所有task都失败,具体确认需要查看$work_dir/logs/ossimport2.log文件。
  • 源文件名的编码方式与系统默认的文件名编码方式不符,例如在windows下文件名默认为gbk编码,linux下默认为utf-8编码,对于数据源是nfs的情况下较容易出现该问题。
  • 上传过程中源目录的文件发生了修改,这种情况在audit.log里会提示SIZE_NOT_MATCH相关字样的错误,这种情况下老的文件已经上传成功,新的修改没有上传到oss。
  • 源文件在上传过程中被删除,导致下载文件时失败。
  • 源文件名不符合oss命名规范(如不能以/开头,或不能为空),导致文件上传到oss失败。
  • 数据源出现问题导致下载数据源文件失败。
  • 没有先杀掉进程再执行clean有可能会导致程序执行异常。
  • 程序异常退出,任务状态为Abort,这种情况请联系我们(请加旺旺群:904193608)。

6.建议

对于从云端(非本地)迁移到oss,且带宽资源不是很充足的用户,建议够买按量付费的ecs进行迁移(购买地址:https://ecs-buy.aliyun.com/#/postpay)

ecs配置:

  • 1.付费方式选择按量付费
  • 2.地域选择oss对应的区域
  • 3.带宽峰值选100M(流入流量和内网流量是不记费的)
  • 4.系统linux/windows随意
  • 5.其他全部选择最低配置

收费根据区域不同会略有不同,杭州配置费用,0.277元/小时,公网流量费0.8元/GB(公网带宽:按使用流量,仅单向收取【流出】流量费用,【流入流量和内网流量不收费】,按实际使用金额每小时扣费。例如您在1小时内公网流出流量为2.5GB,收取费用为2.5GB*0.8元/小时=2.0元)

在配置迁移服务时,将targetDomain设为带internal的内网域名;如果源端也是oss,将srcDomain也设为带internal的内网域名,可以省掉从oss源端下载的流量费,仅收取oss访问次数的费用;

迁移结束后释放掉机器(注意:不是关机,是释放)

最后更新:2016-11-23 20:01:38

  上一篇:go ossprobe__常用工具_对象存储 OSS-阿里云
  下一篇:go Windows平台使用说明__官方迁移工具_常用工具_对象存储 OSS-阿里云