閱讀1051 返回首頁    go 阿裏雲


對象存儲(OSS、七牛等)數據遷移NAS工具__數據遷移工具_常用工具_文件存儲-阿裏雲

簡介

【nasimport】工具可以幫助您將阿裏雲 OSS 或第三方雲存儲服務上的文件同步到 NAS 文件係統上。

主要特性:

  • 支持將本地、OSS、七牛、百度對象存儲、金山對象存儲、又拍雲、亞馬遜 s3、騰訊雲 cos、HTTP 鏈接形式的文件同步到指定 NAS 文件係統上。
  • 支持自動掛載 NAS 文件係統。
  • 支持存量數據同步(允許指定隻同步某個時間點之後的文件)。
  • 支持增量數據自動同步。
  • 支持斷點續傳。
  • 支持並行 list 和並行數據下載/上傳。

如果您有較大量級的數據(超過 2T),且期望以較短時間遷移到 NAS 上,除了【nasimport】同步工具之外,我們的專業技術人員還可以為您提供多機器並行同步方案,請加旺旺群:1562614356 聯係我們。

運行環境

您需要在能夠掛載目標NAS文件係統的ECS虛擬機上運行該遷移工具,能否掛載NAS文件係統及如何掛載:

點擊查看

您需要在 Java JDK 1.7 以上的環境中運行【nasimport】同步工具,建議使用 Oracle 版本 JDK:

點擊查看

注意:程序運行前請檢查進程允許打開的文件數的配置(ulimit -n 查看),如果小於10240,需要作相應修改。

部署及配置

首先,在您本地服務器上創建同步的工作目錄,並且將【nasimport】工具包下載在該目錄中。

示例:創建 /root/ms 目錄為工作目錄,且工具包下載在該工作目錄下。

  1. export work_dir=/root/ms
  2. wget https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/45306/cn_zh/1479113980204/nasimport_linux.tgz
  3. tar zxvf ./nasimport_linux.tgz -C "$work_dir"

編輯工作目錄 ($work_dir) 下的配置文件 config/sys.properties:

  1. vim $work_dir/config/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 表示分發任務的並行線程數,默認值一般夠用

運行服務

nasimport 支持如下命令:

  1. 任務提交:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties submit $jobConfigPath
  2. 任務取消:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties clean $jobName
  3. 狀態查看:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties stat detail
  4. 任務重試:java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties retry $jobName

服務的運行和使用步驟如下:

1、啟動服務,執行如下命令:

  1. cd $work_dir
  2. 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 文件係統中上存在且長度和源端一致的文件,將會跳過此文件

2、編輯示例任務描述文件 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 所有文件的操作。

3、提交任務

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

注意事項:

  • 如果有同名任務正在執行,則提交任務會失敗。
  • 如果您需要暫停同步任務,您可以停止 nasimport 進程,需要同步時重啟 nasimport 進程即可,重啟後會按照上次的進度繼續上傳。
  • 如果您需要重新全量同步文件,您可以先停止 nasimport 進程,再調用如下命令清除當前任務。示例:假設當前任務名為 nas_job(這個任務名配置在文件 nas_job.cfg 中),命令如下
    1. ps axu | grep "nasimport.jar.* start" | grep -v grep | awk '{print "kill -9 "$2}' | bash
    2. java -jar $work_dir/nasimport.jar -c $work_dir/conf/sys.properties clean nas_job

4、查看任務執行狀態:

  1. java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties stat detail
  2. --------------job stats begin---------------
  3. ----------------job stat begin------------------
  4. JobName:nas_job
  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 配置在文件 nas_job.cfg 中)。

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

對於任務失敗的情況,我們在工具中已經做了較為充分的重試,對於可能由於數據源或者目標源暫時不可用引起的失敗情況,可以通過如下命令嚐試重新執行失敗的 TASK:

  1. java -jar $work_dir/nasimport.jar -c $work_dir/config/sys.properties retry $jobNam

5、常見任務失敗原因

  • 任務配置出錯,比如 access key/id 出錯,權限不足等,這種情況下通常現象是所有task都失敗,具體確認需要查看 $work_dir/nasimport.log 文件。
  • 源文件名的編碼方式與係統默認的文件名編碼方式不符,例如在 windows 下文件名默認為 gbk 編碼,linux 下默認為 utf-8 編碼,對於數據源是 nfs 的情況下較容易出現該問題。
  • 上傳過程中源目錄的文件發生了修改,這種情況在 audit.log 裏會提示SIZE_NOT_MATCH 相關字樣的錯誤,這種情況下老的文件已經上傳成功,新的修改沒有上傳到 nas。
  • 源文件在上傳過程中被刪除,導致下載文件時失敗。
  • 數據源出現問題導致下載數據源文件失敗。
  • 沒有先殺掉進程再執行 clean 有可能會導致程序執行異常。
  • 程序異常退出,任務狀態為 Abort,這種情況請聯係我們(請加旺旺群:1562614356 )。

6、建議

在配置遷移服務時,如果源端是 oss,請將 srcDomain 設為帶 internal 的內網域名,可以省掉從 oss 源端下載的流量費,僅收取 oss 訪問次數的費用,且可以獲得更快的遷移速度,oss 內網域名您可以從 oss 控製台獲取。

如果您的 NAS 在專有網絡中,且源端是 oss,請將 srcDomain 設為 oss 提供 的VPC 環境域名,各 Region 對應的 VPC 環境域名:點擊查看

最後更新:2016-11-23 19:51:18

  上一篇:go 使用權限組進行訪問控製__用戶訪問權限控製_用戶指南_文件存儲-阿裏雲
  下一篇:go 創建經典網絡掛載點時為什麼需要RAM授權?__常見問題_常見問題_文件存儲-阿裏雲