本文主要介紹OssImport在典型場景下資料移轉需求的實現。

OssImport介紹

部署方式

OssImport有單機模式和分布式模式兩種部署方式。

  • 對於小於30TB的小規模資料移轉,單機模式即可完成。
  • 對於大規模的資料移轉,請使用分布式模式。
分時限流

OssImport是基於master-worker的分布式架構。Worker有限流功能,通過修改設定檔sys.properties的配置項workerMaxThroughput(KB/s)實現,修改後需要重啟服務才能生效。

分布式部署情況下,需要修改每個Worker的$OSS_IMPORT_WORK_DIR/conf下的sys.properties,然後重啟服務。

要實現分時限流,可通過crontab定時修改sys.properties,然後重啟服務生效。

添加Worker

Worker列表請在提交任務前確定,目前不支援動態添加。

只校驗不遷移數據

OssImport支援只校驗數據不遷移數據,設定任務設定檔job.cfglocal_job.cfg的配置項jobTypeaudit而不是import,其它配置與數據遷相同。

資料移轉增量模式

資料移轉增量模式,是指資料移轉任務啟動後,先進行一次全量遷移,每隔一段時間自動的進行增量資料移轉。第一次資料移轉任務為全量遷移,提交任務後立即啟動;後面的增量資料移轉每隔一個周期啟動一次。資料移轉增量模式適用於資料備份和資料同步。

增量模式有兩個配置項:

  • job.cfg 中的isIncremental ,表示是否開啟增量移轉模式, true表示開啟增量模式, false表示關閉增量模式,預設關閉。
  • job.cfg 中的incrementalModeInterval,表示增量模式下的同步間隔,即增量資料移轉的間隔周期,單位秒。isIncremental=true時有效。可配置的最小值為900秒 ,不建議配置成小於3600秒的值,會浪費大量請求,造成額外的系統開銷。
指定遷移檔案的過濾條件

遷移檔案的過濾條件,即只遷移滿足特定條件的檔案。OssImport支援指定首碼最後修改時間

  • job.cfg 中的 srcPrefix,用來指定遷移檔案的首碼,預設為空。
    • 如果srcType=local,填寫本地目錄,需要完整路徑,以/進行分割並且以/結尾,如c:/example//data/example/
    • 如果srcTypeossqiniubosks3youpais3,則為待同步object的首碼,不包括bucket名稱,如data/to/oss/。遷移所有檔案時srcPrefix設定為空。
  • job.cfg 中的importSince,用來指定遷移檔案的最後修改時間,整形,單位秒。importSince為Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s獲取;預設值0,表示遷移全部數據。增量模式下只對第一次全量遷移有效,非增量模式對整個遷移任務有效。
    • 如果檔案的最後修改(LastModified Time)在importSince之前(包含)將被遷移。
    • 如果檔案的最後修改(LastModified Time)在importSince之後將不被遷移。

典型場景

場景1:從第三方儲存服務無縫切換到OSS

以下步驟可以完成從第三方儲存到OSS的無縫切換:

  1. 全量遷移數據,此時業務仍在第三方儲存上,記下資料移轉的開始時間 T1,注意該時間為 Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s獲取。
  2. 開啟OSS鏡像回源功能,資料移轉完成後,請在 OSS控制台 設定服務Bucket的鏡像回源功能,回源地址為第三方儲存。
  3. 讀寫切換到OSS,此時 T1 前的數據從OSS讀取, T1 後的數據利用鏡像回源從第三方服務讀取,新數據完全寫入OSS。
  4. 增量資料移轉,增量資料移轉任務的設定檔( job.cfglocal_job.cfg )的配置項importSince=T1 ,增量資料移轉完成的時間為 T2。
    说明
    增量資料移轉,並非資料移轉的增量模式。
  5. 刪除第三方儲存, T2 後,您業務的所有的讀寫都在OSS上,第三方儲存只是一份曆史數據,您可以根據需要決定保留或刪除。OssImport負責數據的遷移和校驗,不會刪除任何數據。
場景2:本機資料遷移到OSS

本機資料遷移到OSS的工具選擇:

  • 對於小於 30TB 的數據從本地檔案或可以掛載到本地檔案系統的遷移情況,推薦使用OssUtil,該工具簡單方便,OssUtil支援檔案等級的增量上傳,通過-u/--update--snapshot-path 選項實現,詳細說明請使用ossutil help cp查看。
  • 大規模資料移轉,請使用分布式版本的OssImport
    说明
    本機資料的增量遷移時,檔案系統某些操作不會修改檔案的最後修改時間,比如 Windows 的 cp、mv,Linux 的 mv、rsync帶-t-a選項,這些操作的數據修改都不會被檢測到,也不會同步到OSS。
場景3:OSS之間的資料移轉
  • 什麼時候使用OssImport:
    • 不同區域間的OSS資料同步,推薦使用跨區域複製功能,該功能請在控制台上設定。
    • 由於安全原因,沒有開通跨區域複製的地域,可以使用OssImport遷移或備份數據。
    • 同一區域內,不同帳號、不同Bucket的資料移轉。
    • OSS直接的資料移轉,推薦使用阿里雲內網,即使用ECS、OSS的網域名稱帶internal
  • OSS直接資料移轉收費:
    • 如果使用了帶internal的網域名稱,不會產生流量費用,只有請求和儲存費用。
    • 如果沒有帶internal的網域名稱,會產生流量費用,具體請參看計費
  • 不推薦使用場景:
    • 開通了跨區域複製服務的地域之間的資料同步。
    • 利用增量模式在OSS之間同步檔案修改操作,OssImport只能同步檔案的修改操作(put/apppend/multipart),不能同步讀取和刪除操作,資料同步的及時性沒有具體的 SLA 保證, 請慎重選擇。推薦使用上傳回調

遷移說明

ECS與流量

對於從雲端(非本地)遷移到OSS,且頻寬資源不是很充足的用戶,建議購買隨用隨付的ECS進行遷移,ECS配置如下:

  • 付費方式選擇隨用隨付。
  • 地域選擇OSS對應的地域。
  • 頻寬峰值選100M。

在配置遷移服務時,將targetDomain設為帶internal的內網網域名稱;如果源端也是OSS,將srcDomain也設為帶internal的內網網域名稱,可以省掉從OSS源端下載的流量費,僅收取OSS訪問次數的費用。

HTTP資料移轉到OSS

HTTP資料移轉任務需要配置的參數:

  • job.cfg 中的srcType配置為srcType=http ,請注意字元大小寫。
  • job.cfg 中的httpListFilePath,指定的HTTP地址清單檔案, 請使用絕對路徑指定,如c:/example/http.list/root/example/http.list 。一個完整的HTTP連結是127.0.0.1/aa/bb.jpg,不同的切分方法最後會導致上傳到oss的路徑會不一樣:
    http://127.0.0.1/aa/   bb.jpg      # 第一行
      http://127.0.0.1/      aa/bb.jpg   # 第二行

    第一行的檔案匯入到OSS後的的檔案名為destPrefix + bb.jpg,第二行的檔案名為destPrefix + aa/bb.jpg。 httpPrefixColumn 指定網域名稱列,預設第一列,如上述的127.0.0.1/aa/127.0.0.1/。 relativePathColumn 指定在OSS中檔案名,如上述的 bb.jpgaa/bb.jpg。 如果檔案中有多列,如下:

    http://127.0.0.1/aa/   bb/cc dd/ee  ff.jpg
    配置應該如下: httpPrefixColumn=1 , relativePathColumn=4 。
  • job.cfg 中的destAccessKeydestSecretKeydestDomaindestBucket 等OSS的配置。

HTTP資料移轉子任務切分參數:

  • taskObjectCountLimit ,每個 Task 最大的檔案數,預設10000;
  • taskObjectSizeLimit , 每個 Task 最大數據量, HTTP資料移轉時該參數無效,原因是Master切分Task 時,如果每個HTTP檔案都是源上獲取檔案大小,每個檔案都有一次HTTP請求開銷,會影響子任務分配的效率,進而影響子任務的並發執行,降低遷移的效率。
  • 網域名稱httpListFilePath 指定的檔案中第一列,連續相同的網域名稱任務按照taskObjectCountLimit的限制切分,連續不同的網域名稱切分成不同的 Task,這種做法的目的是為了更好的複用串連。比如:
    http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/  import/test1.txt
      http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/  import/test2.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/  import/test3.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/  import/test4.txt
    taskObjectCountLimit大於2的情況下,會切分成2個Task ,而以下情況會切分成4個Task:
    http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/  import/test1.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/  import/test3.txt
      http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/  import/test2.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/  import/test4.txt

    所以 httpListFilePath指定的HTTP地址清單檔案,請先按照網域名稱排序。

網路流量與參數配置

以下參數的配置與網路流量有關:

  • sys.properties中的workerTaskThreadNum ,表示Worker並發執行的任務數量,如果網路較差、並發大,會出現大量逾時錯誤,此時應該降低並發量,修改該配置項,並重啟服務。
  • sys.properties中的workerMaxThroughput(KB/s) , 表示 Worker 流量的上限,如果業務需要限流,比如源端流控控制、網路限制等情況。該參數的值應該小於機器的最大網路流量,並根據業務需要評估。
  • job.cfg 中的taskObjectCountLimit ,每個Task 最大的檔案數,預設10000。該參數會影響Task的數量,數量過小無法實現有效並發。
  • job.cfg 中的taskObjectSizeLimit , 每個Task最大數據量,預設1GB。該參數會影響Task的數量,數量過小無法實現有效並發。
    说明
    • 設定檔參數請盡量在啟動遷移前確定。
    • sys.properties中的參數修改後,重啟遷移伺服器後才能生效。
    • job.cfg任務提交後,任務的配置參數無法更改。