遷移需要的步驟:
- 遷移準備。
- 安裝遷移工具。
- 修改配置文件。
- 執行遷移。
遷移準備
-
已擁有OOS賬戶,獲得OOS的AccessKeyID和SecretAccessKey,且在OOS中創建了目標存儲桶Bucket。
注意普通遷移時,srcAccessKey和srcSecretKey需要具備srcBucket的ListBucket和GetObject權限;destAccessKey和destSecretKey需要具備destBucket中PutObject的權限。
srcType為OOS時,可以使用加速遷移。源和目的資源池為同類資源池時才可以啟用加速遷移,如源和目的資源池為5.0的同一地域、源和目的資源池同為香港資源池、或源和目的資源池同為對象存儲網絡。另外srcAccessKey和srcSecretKey需要具備srcBucket的ListBucket和GetObject權限;destAccessKey和destSecretKey需要具備destBucket中PutObject的權限、srcBucket的GetObject權限。
-
在常用工具下載OOS數據遷移工具安裝包。
安裝
- 對于Windows客戶端,直接解壓縮遷移工具zip包即可。
- 對于Linux客戶端,執行unzip CTYUN_OOS_Import_1.3.2.zip,解壓縮。
遷移工具解壓縮后的文件結構如下:
CTYUN_OOS_Import_1.3.2
|----config
|-------log4j2.xml
|-------migrate.conf
|-------system.conf
|----lib
|----import.sh
|----import.bat
修改配置文件
- 更新遷移任務配置文件migrate.conf,配置源和目的資源池信息、遷移配置項。
說明
遷移過程中,如果想停止正在遷移的任務,可以修改系統配置system.conf中的stopScan為true停止本次遷移,重啟時需要將系統配置system.conf中的stopScan修改為false。
如果遷移過程中想修改遷移任務,需停止本次遷移,然后修改migrate.conf,并重啟。如果遷移過程中未停止本次遷移任務,進行修改遷移任務配置文件migrate.conf,修改后的遷移任務配置文件不生效。
- (可選)根據需要更新系統配置文件system.conf,在遷移過程中可以修改此配置文件中的配置項。僅影響修改后加入遷移任務的遷移文件(Object),修改前已加入遷移任務的遷移文件,不受本次修改影響。
migrate.conf
遷移任務配置文件(migrate.conf)參數
名稱 描述 是否必須 srcType 遷移源類型:
OOS:天翼云對象存儲(經典版)I型。
OSS:阿里云。
COS:騰訊云。
OBS:華為云。
S3:AmazonS3。
LOCAL:本地。
是 srcEndpoint 源資源池Endpoint。
遷移源類型為COS、LOCAL:不配置此參數。
遷移源類型為OOS、OSS、OBS、S3:此項必須填。
條件 srcAccessKey 源資源池賬戶AccessKey。
遷移源類型為LOCAL:不配置此參數。
遷移源類型為OOS、OSS、COS、OBS、S3:此項必須填。
條件 srcSecretKey 源資源池賬戶SecretKey。
遷移源類型為LOCAL:不配置此參數。
遷移源類型為OOS、OSS、COS、OBS、S3:此項必須填。
條件 srcBucket 源資源池Bucket。
遷移源類型為LOCAL:不配置此參數。
遷移源類型為OOS、OSS、COS、OBS、S3:必須填。
條件 srcRegionName 源資源池RegionName
遷移源類型為COS、S3:必須填。
遷移源類型為OOS、OSS、OBS、LOCAL:不配置此參數。
條件 localFolderPath 本地文件夾路徑,或以執行腳本的相對路徑。
需要完整路徑,以單個正斜線(/)進行分割并且以單個正斜線(/)結尾,僅支持如c:/example/ 或者/data/example/ 的格式。
遷移源類型為LOCAL:必須填。
遷移類型為OOS、OSS、COS、OBS、S3:不配置此參數。
條件 destEndpoint 目標資源池Endpoint,即要遷移到的OOS資源池Endpoint,參見控制臺指南-域名(Endpoint)-域名(Endpoint)列表。 是 destAccessKey 目標資源池AccessKeyID,可以從OOS控制臺中獲取,參見控制臺指南-訪問控制-安全憑證-密鑰。 是 destSecretKey 目標資源池SecretAccessKey。 是 destBucket 目標資源池Bucket。 是 srcPrefix 源文件名前綴,默認為空。該前綴不包括存儲桶(Bucket)名稱,僅為文件(Object)名前綴。
說明此參數空或者未配置此參數,表示遷移所有的文件。
否 destPrefix 目標前綴,即為遷移文件指定具體存放文件夾。
注意如果不需要目標前綴,此參數不要寫在配置文件中。
取值:字符串形式,以“/”結尾,且不能以“/”開頭;不能包含以下字符:'、"、//。
說明
如果不指定,遷移文件直接存放在目標資源池存儲桶下。
如果指定前綴,則將遷移文件存放在目標資源池存儲桶下以前綴命名的文件夾中;如果前綴命名的文件夾不存在,則在該存儲桶下創建以前綴命名的文件夾。
如果目標前綴包含字符“\”,會識別為轉義字符,不建議使用字符“\”。
否 srcMarker
遷移源類型為OOS,表示按字典序,從srcMarker文件開始遷移。默認為空,表示從第一個文件開始遷移。
遷移源類型為OSS、OBS、COS、S3,表示按字典序,從srcMarker文件后的下一個文件開始遷移。默認為空,表示從第一個文件開始遷移。
遷移源類型為LOCAL,此項不起作用,不配置此參數。
否 srcStopObject 遷移的截止文件名,默認為空。
如果配置了srcStopObject,則遷移到配置的文件后停止遷移,即遷移到該文件的前一個文件,此文件及后續文件都不遷移。
如果指定的srcStopObject不存在,則遷移滿足遷移條件的所有文件。
注意遷移源類型為LOCAL,此項不起作用,不配置此參數。
否 isSkipExistFile 是否跳過目標資源池中已有的文件。
true:跳過已有文件,根據Etag和size進行判斷數據是否為已有文件。
false:覆蓋已有文件。
默認值為false。
否 migrateLogFile 表示是否根據日志文件加載遷移文件。
日志文件僅支持通過本遷移工具生成的四種類型的日志文件:successObjectLog_time.txt、errorObjectLog_time.txt、skipObjectLog_time.txt、
otherObjectLog_time.txt。
true:僅處理日志文件中的項,不掃描源資源池或者local文件夾、不加載備份文件。
false:掃描資源池或local文件夾,加載備份文件。
默認值為false。
否 logFile 表示日志文件路徑。
migrateLogFile為true時,此項必須填。
條件 importSince 表示遷移大于此時間的數據,Unix時間戳。即僅遷移此時間點后的文件。
取值:大于等于0的整數,單位是秒。默認值為0,表示遷移所有的數據。
否 objectSize 表示遷移文件(Object)的大小范圍。格式是N-M,表示遷移N至M大小的文件。
取值:N和M是大于等于0的整數,且N≤M,單位是字節。默認不配置此項,表示遷移所有大小的文件。
否 storageClass 設置遷移后文件的存儲類型。
取值:
STANDARD:標準存儲。
STANDARD_IA:低頻訪問存儲。
默認值為STANDARD。
注意僅對象存儲網絡、香港節點支持STANDARD_IA,其他地域不支持。
否 contentType 遷移之后,文件的標準MIME類型。
注意如果srcType為OOS,且isAcceleratedMigration為true,contentType配置會失效。
否 isAcceleratedMigration 是否加速遷移文件。
取值:
true:加速遷移文件。
false:不加速遷移文件。
默認值為false。
說明srcType為OOS時,該參數才生效。建議源和目的資源池為同類資源池時使用該參數,如源和目的資源池為5.0的同一地域、源和目的資源池同為香港資源池、或源和目的資源池同為對象存儲網絡。
使用加速遷移文件時,srcAccessKey和srcSecretKey需要具備srcBucket的ListBucket和GetObject權限;destAccessKey和destSecretKey需要具備destBucket中PutObject的權限、srcBucket的GetObject權限。
否
system.conf
系統配置文件(system.conf)參數
參數 描述 是否必須 threadNum 并發數。
取值范圍:整數形式,取值[1, 3000],默認值為1。
否 maxSimpleObjectSizeM 文件(Object)大小限制,單位是MiB。
取值范圍:大于等于5的整數,默認值為100。
超過文件大小限制,源文件將被拆分成分段文件進行遷移。
否 partSizeM 拆分為分段文件(Object)時的分片大小,單位MiB。
取值范圍:大于等于5的整數,默認值為50。
否 stopScan 是否終止遍歷源文件。
true:終止。
false:不終止。
默認false。
否 maxThroughput 對源端流量進行限制,單位是KiB/s。
取值范圍:整數形式,[100, 102400]。默認不限速。
說明
如果填寫負數,則表示不進行限速。
如果0≤maxThroughput<100,則按100KiB/s限速。
如果maxThroughput>102400,則按102400KiB/s限速。
否 moveFailRetryTimes 指定遷移對象遇到非4xx類的錯誤時可以重試次數。
取值:整數形式,取值范圍[-1, 2147483647]。默認值-1,代表一直重試。
注意失敗重試次數過大可能會引起下行流量和請求次數的增加。
否
log4j2.xml
遷移工具的日志配置文件log4j2.xml,可以通過修改該配置文件,配置日志文件的大小(size)和日志文件保存的最大數量(max)等。
| 參數 | 描述 |
|---|---|
| size | 日志文件的大小。 取值:大于0的整數,單位為KB、MB或GB |
| max | 日志文件保存的最大數量。 取值:大于0的整數。 |
默認的日志配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="warn" monitorInterval="30">
<appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8">
<Pattern>[%4p]( %F,%L ) [%d{yyyy-MM-dd HH:mm:ss}] [%t] %c - %m%n</Pattern>
</PatternLayout>
</Console>
<!-- 記錄遷移成功文件(Object)明細 -->
<RollingFile name="successObjectInfo" fileName="migratelog/successObjectLog_${sys:log4j.migratetime}.log"
filePattern="migrateLog/successObjects_${sys:log4j.migratetime}_%i.log.zip">
<PatternLayout charset="UTF-8">
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<!--SizeBasedTriggeringPolicy:日志文件按照大小備份 -->
<!--size:指定日志文件最大為20MB,單位可以為KB、MB或GB -->
<SizeBasedTriggeringPolicy size="20MB" />
</Policies>
<!--DefaultRolloverStrategy:翻轉策略決定如何執行備份 -->
<!--max:最多保存10個備份文件 -->
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
<!-- 記錄跳過文件(Object)明細 -->
<RollingFile name="skipObjectInfo" fileName="migratelog/skipObjectLog_${sys:log4j.migratetime}.log"
filePattern="migrateLog/skipObjects_${sys:log4j.migratetime}_%i.log.zip">
<PatternLayout charset="UTF-8">
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="20MB" />
</Policies>
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
<!-- 記錄遷移失敗文件(Object)明細 -->
<RollingFile name="errorObjectInfo" fileName="migratelog/errorObjectLog_${sys:log4j.migratetime}.log"
filePattern="migrateLog/errorObjectLog_${sys:log4j.migratetime}_%i.log">
<PatternLayout charset="UTF-8">
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="20MB" />
</Policies>
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
<!-- 記錄其他文件(Object)明細 -->
<RollingFile name="otherObjectInfo" fileName="migratelog/otherObjectLog_${sys:log4j.migratetime}.log"
filePattern="migrateLog/errorObjectLog_${sys:log4j.migratetime}_%i.log">
<PatternLayout charset="UTF-8">
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="20MB" />
</Policies>
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
<RollingFile name="info" fileName="logs/${sys:log4j.log.app}/server.log" filePattern="logs/${sys:log4j.log.app}/server_%i.log.zip">
<!--添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕 -->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout charset="UTF-8">
<Pattern>[%4p]( %F,%L ) [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB" />
</Policies>
<DefaultRolloverStrategy max="100" fileIndex="min"/>
</RollingFile>
<RollingFile name="debug" fileName="logs/${sys:log4j.log.app}/debug.log" filePattern="logs/${sys:log4j.log.app}/debug_%i.log.zip">
<ThresholdFilter level="debug" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout charset="UTF-8">
<Pattern>[%4p]( %F,%L ) [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB" />
</Policies>
<DefaultRolloverStrategy max="100" fileIndex="min"/>
</RollingFile>
<RollingFile name="error" fileName="logs/${sys:log4j.log.app}/error.log" filePattern="logs/${sys:log4j.log.app}/error_%i.log.zip">
<ThresholdFilter level="error" onMatch="ACCEPT"
onMismatch="DENY" />
<PatternLayout charset="UTF-8">
<Pattern>[%4p]( %F,%L ) [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %c - %m%n</Pattern>
</PatternLayout>
<Policies>
<SizeBasedTriggeringPolicy size="100MB" />
</Policies>
<DefaultRolloverStrategy max="100" fileIndex="min"/>
</RollingFile>
</appenders>
<!--然后定義logger,只有定義了logger并引入的appender,appender才會生效 -->
<loggers>
<!-- 遷移日志配置 -->
<AsyncLogger name="successObjectLog" level="info" additivity="false">
<AppenderRef ref="successObjectInfo" />
</AsyncLogger>
<AsyncLogger name="skipObjectLog" level="info" additivity="false">
<AppenderRef ref="skipObjectInfo" />
</AsyncLogger>
<AsyncLogger name="errorObjectLog" level="info" additivity="false">
<AppenderRef ref="errorObjectInfo" />
</AsyncLogger>
<AsyncLogger name="otherObjectLog" level="info" additivity="false">
<AppenderRef ref="otherObjectInfo" />
</AsyncLogger>
<!-- 系統日志配置 -->
<AsyncRoot level="info" includeLocation="true">
<!-- 如果需要輸出到控制臺,取消下面一行的注釋 -->
<!-- <AppenderRef ref="stdout"/> -->
<!-- 如果需要輸出debug日志,取消下面一行的注釋,且將父節點AsyncRoot中的level屬性的值改為debug -->
<!-- <AppenderRef ref="debug"/> -->
<AppenderRef ref="info"/>
<AppenderRef ref="error"/>
</AsyncRoot>
</loggers>
</configuration>
執行遷移
- 對于Windows客戶端,執行import.bat啟動遷移,步驟如下:
- 打開“開始”菜單,搜索“cmd”,打開命令提示符窗口。
- cd到壓縮工具所在的目錄下,例如 cd c:\CTYUN_OOS_Import_1.3.2。
- 執行import.bat。
- 對于Linux客戶端,執行import.sh啟動遷移,步驟如下:
- 為import.sh增加執行權限,執行命令:chmod +x import.sh。
- 運行import.sh,執行命令:./import.sh。
斷點續傳
數據遷移工具支持斷點續傳,如果遷移過程中程序被終止了,可以重新啟動遷移任務,從之前中斷的位置繼續開始遷移。繼續遷移的步驟如下:
- 保留上次遷移執行過程中產生的backup文件。如果是在另外一臺服務器上重新開始遷移任務,需要將backup文件拷貝到新服務器的遷移工具所在目錄下。
- (可選)查看nextMarker.txt文件中記錄的上次數據遷移位置。修改migrate.conf,設置srcMarker為上次遷移位置。
日志
數據遷移工具執行過程中,會生成一個migratelog文件夾,用于記錄遷移情況。日志類型分為異常日志、成功日志、跳過文件(Object)日志、其他日志。
運行日志生成在logs/migrate文件夾下,根據log4j2.xml配置可生成server.log、error.log、dubug.log等。