閱讀966 返回首頁    go 阿裏雲 go 技術社區[雲棲]


OssImport係列之一——架構

概述

OssImport工具可以將本地、其它雲存儲的數據遷移到OSS,它有以下特點:

  • 支持的豐富的數據源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍雲、騰訊雲COS、金山KS3、HTTP、OSS等,並可根據需要擴展;
  • 支持斷點續傳;
  • 支持流量控製;
  • 支持遷移指定時間後的文件、特定前綴的文件;
  • 支持並行數據下載、上傳;
  • 支持單機模式和分布式模式,單機模式部署簡單使用方便,分布式模式適合大規模數據遷移。

架構

OssImport是基於 master-worker 的分布式架構,如下圖:

Master --------- Job --------- Console
    |
    |
   TaskTracker
    |_____________________
    |Task     | Task      | Task
    |         |           |
Worker      Worker      Worker

其中:

  • Job:用戶通過提交的數據遷移任務,對用戶來說一個任務對應一個配置文件job.cfg
  • Task:Job按照 數據大小文件個數 可以分成多個*Task*,每個*Task*遷移部分文件。Job切分成Task的最小單位是文件,同一個文件不會切分到多個Task中。

OssImport各模塊說明,如下表:

角色 說明
Master 負責Job切分成Task,按照數據大小和文件個數分解成Task,數據大小/文件個數是可配置的*sys.properties*中配置。
Worker 負責Task的文件遷移和數據校驗,從數據源上拉取指定文件,並上傳到OSS的指定目錄,遷移的數據源和OSS的配置在job.cfglocal_job.cfg中指定;Worker數據遷移支持限流、指定Task並發數,在sys.properties 配置。
TaskTracker 簡稱Tracker,負責Task的分發、Task狀態跟蹤。
Console 負責與用戶交互,接受命令顯示結果,支持的係統管理命令*deploy/start/stop*,Job管理命令*submit/retry/clean*。

部署方式

OssImport有 單機模式分布式模式 兩種部署方式。對於小於 1TB 的小規模數據數據遷移,單機模式即可完成。對於大規模的數據遷移,請使用分布式模式。

單機

Master、Worker、Tracker、Console運行在一個機器上,係統中有且隻有一個Worker。我們對單機模式的部署和執行進行了封裝優化,單機部署和執行都很簡單。點擊模式下Master、Worker、TaskTracker、Console四個模塊統一打包成ossimport2.jar

單機模式下文件結構如下:

ossimport
├── bin
│   └── ossimport2.jar  # 包括Master、Worker、Tracker、Console四個模塊的總jar
├── conf
│   ├── local_job.cfg   # 單機Job配置文件
│   └── sys.properties  # 係統運行參數配置文件
├── console.bat         # Windows命令行,可以分布執行調入任務
├── console.sh          # Linux命令行,可以分布執行調入任務
├── import.bat          # Windows一鍵導入,執行配置文件為conf/local_job.cfg配置的數據遷移任務,包括啟動、遷移、校驗、重試
├── import.sh           # Linux一鍵導入,執行配置文件為conf/local_job.cfg配置的數據遷移任務,包括啟動、遷移、校驗、重試
├── logs                # 日誌目錄
└── README.md           # 說明文檔,強烈建議使用前仔細閱讀

提示

  • import.bat/import.sh為一鍵導入腳本,修改完local_job.cfg後可以直接運行;
  • console.bat/console.sh為命令行工具,可以用於分布執行命令;
  • 腳本或命令時請在ossimport目錄下執行,即 \.bat*/**.sh* 的同級目錄。

分布式

分布式模式下可以啟動多個Worker執行遷移數據,Task平均分配到Worker上執行,一個Worker執行多個Task。每一個機器上隻能啟動一個Worker。workers配置的第一個*Worker*上會同時啟動*Master*、*TaskTracker*,*Console*也要在該機器上運行。

分布式模式下文件結構如下:

ossimport
├── bin
│   ├── console.jar     # Console模塊jar包
│   ├── master.jar      # Master模塊jar包
│   ├── tracker.jar     # Tracker模塊jar包
│   └── worker.jar      # Worker模塊jar包
├── conf
│   ├── job.cfg         # Job配置文件模板
│   ├── sys.properties  # 係統運行參數配置文件
│   └── workers         # Worker列表
├── console.sh          # 命令行工具,目前支持隻Linux
├── logs                # 日誌目錄
└── README.md           # 說明文檔,強烈建議使用前仔細閱讀

提示

  • 分布式命令行工具*console.sh*目前隻支持Linux,Windowns暫不支持。

配置文件

單機模式下有兩個配置文件sys.propertieslocal_job.cfg,分布式模式下有三個配置文件sys.propertieslocal_job.cfgworkers。其中local_job.cfgjob.cfg是完全一樣的,隻是名稱不一樣,workers是分布式環境先獨有的。

sys.properties

係統運行參數。

字段 含義 說明
workingDir 工作目錄 工具包解壓後的目錄。單機模式下請不要修改此選擇,分布式模式下每個機器的工作目錄必須相同。
workerUser Worker機器的ssh用戶名 如果配置了*privateKeyFile*,則優先使用privateKeyFile;如果沒有配置privateKeyFile,則使用workerUser/workerPassword。單機模式不需要修改此項。
workerPassword Worker機器的ssh用戶密碼 單機模式不需要修改此項。
privateKeyFile public key文件路徑 如果已經打通了ssh通道,則可以指定public key文件路徑,否則為空。如果配置了privateKeyFile,則優先使用privateKeyFile;如果沒有配置privateKeyFile,則使用workerUser/workerPassword。 單機模式不需要修改此項。
sshPort ssh端口 默認22,一般情況無需更改 單機模式不需要修改此項。
workerTaskThreadNum Worker執行Task的最大線程數 該參數跟內存等機器配置有關,建議物理機不要超過60,虛擬機不超過30。
workerMaxThroughput(KB/s) worker數據遷移的流量上限 該值能起到限流作用,默認0表示不限流。
dispatcherThreadNum Tracker的Task分發與狀態確認的線程數 默認值一般夠用,沒有特殊需要請不要修改默認值。
workerAbortWhenUncatchedException 表示遇到未知錯誤時是跳過還是Abort 默認逃過
workerRecordMd5 Task數據遷移時是否進行MD5校驗 默認不校驗,默認上傳時會進行CRC校驗,沒有極強的數據安全性不建議打開。

job.cfg

數據遷移任務配置,local_job.cfg和job.cfg的配置項是完全一樣的,隻是名稱不一樣。

字段 含義 說明
jobName 任務名字,字符串 任務的唯一標識,命名規則 [a-zA-Z0-9_-]{4,128}, 支持提交多個名字不同的任務。如果重複提交同名任務會提示任務已存在,清理(*clean*)同名任務前,**無法提交同名任務。**
jobType 任務類型,字符串 兩類 import 或*audit*,默認*import*。*import*,執行數據遷移操作並校驗遷移數據的一致性;*audit*,僅進行數據一致性校驗。
isIncremental 是否打開增量遷移模式,布爾類型 默認值false;如果設為true,會每間隔incrementalModeInterval(單位秒)重新掃描一次增量數據,並將增量數據遷移到OSS。
incrementalModeInterval 增量模式下的同步間隔,整形,單位秒 isIncremental=true時有效。可配置的最小間隔為900秒,不建議配置成小於 3600秒 的值,會浪費大量請求,造成額外的係統開銷。
importSince 遷移大於該時間的數據,整形,單位秒 該時間為 Unix時間戳,即自1970年1月1日UTC零點以來的秒數,通過命令date +%s獲取;默認為0,表示遷移全部數據。
srcType 同步源類型,字符串,***請注意大小寫*** 目前支持localossqiniubosks3s3youpaihttpcosazure等十種類型。 local,從本地文件遷移數據到OSS,該選項隻需要填寫srcPrefix,***不需要填寫srcAccessKey,srcSecretKey,srcDomain,srcBucket***;oss,從一個*bucket*遷移到另一個*bucket*;qiniu,從七牛雲存儲遷移到OSS;bos,從百度的雲存儲遷移到OSS;ks3,從金山雲存儲遷移到OSS;s3,從*AWS S3*遷移到OSS;youpai,從又拍雲遷移到到OSS;http,通過提供的HTTP鏈接列表遷移數據到OSS;cos,從騰訊雲存儲*COS*遷移到OSS;azure,從*Azuer Blob*遷移到OSS。
srcAccessKey 源AccessKey,字符串 如果*srcType*設置為ossqiniubaiduks3s3,填寫數據源的*AccessKey*;localhttp,該項不需要填寫;youpaiazure則填寫用戶名AccountName。
srcSecretKey 源SecretKey,字符串 如果*srcType*設置為ossqiniubaiduks3s3,填寫數據源的*SecretKey*;localhttp,該項不需要填學;youpai,填寫操作員密碼;azure,填寫AccountKey。
srcDomain 源Endpoint 如果*srcType*設置為localhttp,該配置項不需要填;oss,從控製台獲取的域名,非帶bucket前綴的二級域名,列表請參看域名列表qiniu,從七牛控製台獲取的對應bucket的域名;bos,百度BOS域名,如https://bj.bcebos.comhttps://gz.bcebos.comks3,金山ks3域名,如https://kss.ksyun.comhttps://ks3-cn-beijing.ksyun.comhttps://ks3-us-west-1.ksyun.coms3, AWS S3各*region*的域名請參考S3 Endpointyoupai,又拍雲域名,如自動判斷最優線路https://v0.api.upyun.com 或電信線路https://v1.api.upyun.com 或聯通網通線路https://v2.api.upyun.com 或移動鐵通線路https://v3.api.upyun.comcos,騰訊雲填寫bucket所在的區域,比如華南園區:gz、華北園區:tj、華東園區:sh;azure,Azure Blob連接字符串中的*EndpointSuffix*,如core.chinacloudapi.cn
srcBucket 源bucket名字或container名稱 如果*srcType*設置為localhttp,不需要填寫;azure,Azure Blob填寫container名稱,其它填寫bucket名稱。
srcPrefix 源前綴,字符串,默認為空 如果srcType=local,填寫本地目錄,需要完整路徑,以 / 進行分割並且以 / 結尾,如 c:/example//data/example/;*srcType*為ossqiniubosks3youpais3,則為待同步object的前綴,不包括bucket名稱,如data/to/oss/,***同步所有文件srcPrefix設置為空***。
destAccessKey 目的AccessKey,字符串 OSS的 AccessKeyID,請到阿裏雲控製台查看。
destSecretKey 目的SecretKey,字符串 OSS的 AccessKeySecret,請到阿裏雲控製台查看。
destDomain 目的endpoint,字符串 控製台獲取,非帶bucket前綴的二級域名,列表請參看域名列表
destBucket 目的bucket,字符串 OSS的bucket名稱,不需要以 / 結尾。
destPrefix 目標前綴,字符串,默認為空 目標前綴,默認為空,直接放在目標bucket下;如果要將數據同步到oss的某個目錄下,請以 / 結尾,如data/in/oss/;注意oss不支持以 / 作為文件的開頭,所以destPrefix請不要配置以 / 做為開頭。一個本地文件路徑為srcPrefix + relativePath的文件,遷移到oss的路徑為destDomain/destBucket/destPrefix + relativePath;一個雲端文件路徑為 srcDomain/srcBucket/srcPrefix + relativePath的文件,遷移到oss的路徑為destDomain/destBucket/destPrefix + relativePath
taskObjectCountLimit 每個*Task*最大的文件數,整型,默認10000 該配置項會影響到任務執行的並行度,一般配置為 總文件數/Worker總數/遷移線程數(workerTaskThreadNum),如果不知道總文件數,請使用默認值。
taskObjectSizeLimit 每個*Task*最大數據量,整型,單位bytes,默認1GB 該配置項會影響到任務執行的並行度,一般配置為 總數據量/Worker總數/遷移線程數(workerTaskThreadNum),如果不知道總數據量,請使用默認值。
scanThreadCount 並行掃描文件的線程數,整型,默認1 該配置項與掃描文件的效率有關,沒有特殊需求請不要修改
maxMultiThreadScanDepth 最大允許並行掃描目錄的深度,整型,默認1 默認值1表示在頂級目錄間並行掃描;***沒有特殊需求不要修改,隨意配置過大值會導致任務無法正常運行***。
appId 騰訊雲COS的*appId*,整型 srcType=cos時有效。
httpListFilePath HTTP列表文件的絕對路徑,字符串 srcType=http時有效,源為HTTP鏈接地址時,需要提供內容為HTTP鏈接地址文件的絕對路徑,如c:/example/http.list;該文件中的HTTP鏈接需要劃分成兩列,以空格分開,分別代表前綴和上傳到OSS後的相對路徑。例如c:/example/http.list文件內容有127.0.0.1/aa/ bb.jpg127.0.0.1/ cc/dd.jpg兩行,遷移到OSS的路徑分別是 destDomain/destBucket/destPrefix + bb.jpgdestDomain/destBucket/destPrefix + cc/dd.jpg

workers

workers是分布式模式先獨有的,每個IP一行,如:

192.168.1.6
192.168.1.7
192.168.1.8

提示:

  • 上述配置情況下,192.168.1.6上會啟動*Master*、*Worker*、*TaskTracker*,*Console*也需要在該機上執行。
  • 多個*Worker*機器的用戶名、登錄方式、工作目錄請確保相同。

運行環境

  • Java 1.7及以上

最後更新:2017-07-12 11:02:19

  上一篇:go  OssImport係列之二——單機部署
  下一篇:go  阿裏雲入選 Gartner 2017年全球雲基礎設施即服務魔力象限