本文主要介紹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列表請在提交任務前確定,目前不支援動態添加。
OssImport支援只校驗數據不遷移數據,設定任務設定檔job.cfg
或local_job.cfg
的配置項jobType
為audit
而不是import
,其它配置與數據遷相同。
資料移轉增量模式,是指資料移轉任務啟動後,先進行一次全量遷移,每隔一段時間自動的進行增量資料移轉。第一次資料移轉任務為全量遷移,提交任務後立即啟動;後面的增量資料移轉每隔一個周期啟動一次。資料移轉增量模式適用於資料備份和資料同步。
增量模式有兩個配置項:
- job.cfg 中的
isIncremental
,表示是否開啟增量移轉模式,true
表示開啟增量模式,false
表示關閉增量模式,預設關閉。 - job.cfg 中的
incrementalModeInterval
,表示增量模式下的同步間隔,即增量資料移轉的間隔周期,單位秒。isIncremental=true
時有效。可配置的最小值為900秒
,不建議配置成小於3600
秒的值,會浪費大量請求,造成額外的系統開銷。
遷移檔案的過濾條件,即只遷移滿足特定條件的檔案。OssImport支援指定首碼
和最後修改時間
:
- job.cfg 中的
srcPrefix
,用來指定遷移檔案的首碼,預設為空。- 如果
srcType=local
,填寫本地目錄,需要完整路徑,以/
進行分割並且以/
結尾,如c:/example/
或/data/example/
。 - 如果
srcType
為oss
、qiniu
、bos
、ks3
、youpai
、s3
,則為待同步object的首碼,不包括bucket名稱,如data/to/oss/
。遷移所有檔案時srcPrefix
設定為空。
- 如果
- job.cfg 中的
importSince
,用來指定遷移檔案的最後修改時間,整形,單位秒。importSince
為Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s
獲取;預設值0,表示遷移全部數據。增量模式下只對第一次全量遷移有效,非增量模式對整個遷移任務有效。- 如果檔案的最後修改(
LastModified Time
)在importSince
之前(包含)將被遷移。 - 如果檔案的最後修改(
LastModified Time
)在importSince
之後將不被遷移。
- 如果檔案的最後修改(
典型場景
以下步驟可以完成從第三方儲存到OSS的無縫切換:
- 全量遷移數據,此時業務仍在第三方儲存上,記下資料移轉的開始時間 T1,注意該時間為 Unix時間戳記,即自1970年1月1日UTC零點以來的秒數,通過命令
date +%s
獲取。 - 開啟OSS鏡像回源功能,資料移轉完成後,請在 OSS控制台 設定服務Bucket的鏡像回源功能,回源地址為第三方儲存。
- 讀寫切換到OSS,此時 T1 前的數據從OSS讀取, T1 後的數據利用鏡像回源從第三方服務讀取,新數據完全寫入OSS。
- 增量資料移轉,增量資料移轉任務的設定檔(
job.cfg
或local_job.cfg
)的配置項importSince=T1
,增量資料移轉完成的時間為 T2。说明 增量資料移轉,並非資料移轉的增量模式。 - 刪除第三方儲存, T2 後,您業務的所有的讀寫都在OSS上,第三方儲存只是一份曆史數據,您可以根據需要決定保留或刪除。OssImport負責數據的遷移和校驗,不會刪除任何數據。
本機資料遷移到OSS的工具選擇:
- 什麼時候使用OssImport:
- 不同區域間的OSS資料同步,推薦使用跨區域複製功能,該功能請在控制台上設定。
- 由於安全原因,沒有開通跨區域複製的地域,可以使用OssImport遷移或備份數據。
- 同一區域內,不同帳號、不同Bucket的資料移轉。
- OSS直接的資料移轉,推薦使用阿里雲內網,即使用ECS、OSS的網域名稱帶
internal
。
- OSS直接資料移轉收費:
- 如果使用了帶
internal
的網域名稱,不會產生流量費用,只有請求和儲存費用。 - 如果沒有帶
internal
的網域名稱,會產生流量費用,具體請參看計費。
- 如果使用了帶
- 不推薦使用場景:
- 開通了跨區域複製服務的地域之間的資料同步。
- 利用增量模式在OSS之間同步檔案修改操作,OssImport只能同步檔案的修改操作(put/apppend/multipart),不能同步讀取和刪除操作,資料同步的及時性沒有具體的 SLA 保證, 請慎重選擇。推薦使用上傳回調。
遷移說明
對於從雲端(非本地)遷移到OSS,且頻寬資源不是很充足的用戶,建議購買隨用隨付的ECS進行遷移,ECS配置如下:
- 付費方式選擇隨用隨付。
- 地域選擇OSS對應的地域。
- 頻寬峰值選100M。
在配置遷移服務時,將targetDomain
設為帶internal
的內網網域名稱;如果源端也是OSS,將srcDomain
也設為帶internal
的內網網域名稱,可以省掉從OSS源端下載的流量費,僅收取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.jpg
或aa/bb.jpg
。 如果檔案中有多列,如下:
配置應該如下: httpPrefixColumn=1 , relativePathColumn=4 。http://127.0.0.1/aa/ bb/cc dd/ee ff.jpg
- job.cfg 中的
destAccessKey
、destSecretKey
、destDomain
、destBucket
等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任務提交後,任務的配置參數無法更改。