本文主要介绍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,且带宽资源不是很充足的用户,建议购买按量付费的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
。 如果文件中有多列,如下:http://127.0.0.1/aa/ bb/cc dd/ee ff.jpg
配置应该如下: httpPrefixColumn=1 , relativePathColumn=4 。 - 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任务提交后,任务的配置参数无法更改。