迁移需要的步骤:
- 迁移准备。
- 安装迁移工具。
- 修改配置文件。
- 执行迁移。
迁移准备
-
已拥有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等。