数据迁移工具 Kodoimport
1. 简介
kodoimport 为七牛云的数据迁移工具,和 kodoimport-cli 搭配使用,支持以下源的迁移:
- 本地源
- HTTP 源
- 七牛源
- S3 源
- OSS 源
迁移工具支持以下功能:
- 支持单机模式和分布式模式。单机模式部署简单使用方便,但是单机模式迁移能力有限,如果有大规模数据迁移需求分布式模式更为合适
- 支持流量控制
- 支持迁移特定前缀的文件
- 支持为迁移目标设置特定前缀
- 支持并行数据下载和上传
- 支持数据校验
- 支持增量迁移
- 支持同时配置多个迁移 Job
kodoimport 启动后会创建迁移服务、文档服务等,等待创建迁移的 Job 进行相关的迁移工作;
1.1 下载
支持平台 | 下载链接 |
---|---|
Windows x64 | 下载 |
Macos amd64 | 下载 |
Macos arm64 | 下载 |
Linux amd64 | 下载 |
Linux arm64 | 下载 |
1.2 文档
kodoimport 内置了文档,你可以直接在本机上启动 kodoimport 并根据面板 Docs URL 中提示的链接在浏览器中使用文档,也可以在迁移设备上启动
kodoimport 然后通过本机浏览器进行访问(本机网络必须能访问到设备,如果本机和迁移设备不在一个网络,可通过 vpn、docker 端口映射、k8s
外网访问等方式解决);
默认情况下:文档仅允许本机访问,你可以通过修改 kodoimport 的启动选项 --web-address 以允许其他电脑访问。
eg:
kodoimport --web-address "0.0.0.0:7900"
kodoimport 启动后面板如下:
=========================================================
Welcome to kodoimport !
If you are using kodoimport running docker or kubernetes,
adjust the IP below to the host IP.
Version : Unknown
Scheduler Addr: 127.0.0.1:8001
Docs URL: http://127.0.0.1:7900/docs
Stat URL: http://127.0.0.1:7900/stat
Kodoimport Path: /Users/test/.kodoimport/kodoimport
Workspace : /Users/test/.kodoimport
Basic Auth:
UserName:
Password:
=========================================================
1.3 kodoimport-cli
kodoimport-cli 为 kodoimport 迁移服务的交互工具,包含获取服务状态信息以及 Job 的创建、暂停、删除、重试等功能,具体可参考文档服务中相关文档。
1.4 角色
1.4.1 Job
Job 为一组相同源到相同七牛存储的任务集合。比如:七牛 BucketA 到七牛 BucketB 的迁移,每个文件的迁移为一个迁移任务。
1.4.2 Scheduler
Scheduler 为迁移的调度器,负责将 Job 中的任务下发给 Worker 进行执行。所有的 Job 信息均存储在 Scheduler
端,并会被持久化到本地工作目录中。
工作目录
可在 kodoimport 启动时配置,目录中存放着日志、Job 相关信息等,默认为:${当前用户家目录}/.kodoimport
。
工作目录
结构如下:
├── log // 日志
│ ├── access // kodoimport-cli 请求日志
│ │ ├── log2024031214.txt
│ │ └── 2024031410.txt
│ └── system // kodoimport Scheduler 和 Worker 运行日志
│ ├── 2024031214.txt
│ └── 2024031410.log
└── server
├── qiniu-bash // JobID 为 qiniu-bash 的 Job 的工作目录
│ ├── 00000-round // 第 0 轮迁移的状态信息保存目录
│ │ ├── 700-result.txt // 执行结果,700 为状态码具体错误信息见内部 Task 信息;
│ │ └── cache // 状态信息
│ │ └── info_cache.db
│ │ ├── 000001.log
│ │ ├── CURRENT
│ │ ├── LOCK
│ │ ├── LOG
│ │ └── MANIFEST-000000
│ └── cache
└── qiniu-bash.conf // JobID 为 qiniu-bash 的 Job 的配置文件
1.4.3 Worker
任务执行体,会从 Scheduler 获取任务并执行,同一台设备上进配置一个 Worker 即可。如果此台设备上也需要配置 Scheduler,可使用将
Mode 设置为 0,同时构建 Scheduler 和 Worker,其他设备的 Worker 也可接入此 Scheduler 中。
工作目录
可在 kodoimport 启动时配置,目录中存放着日志等信息,默认为:${当前用户家目录}/.kodoimport
。
1.4.4 Executor
任务执行的最小单元,Worker 上有多少个并发就会有多少个 Executor,一般不用关心此概念。
注意事项
空间要求:
项目 | 大小 | 备注 |
---|---|---|
内存 | Schdueler: 2G Worker: Executor 数(默认:20) * 分片上传的块大小(默认:4M) |
查看分片上传的块大小:kodoimport-cli job.config dst.uploadPartSizeMB |
硬盘 | 1千万文件:4Gi ~ 10Gi。 | 迁移后的结果信息会被存储,成功被迁移的文件存储信息较少,失败的存储信息较多;可以按待文件数量进行评估 |
2. 安装
2.1 二进制程序
在下面网站中下载相应版本:kodoimport
2.2 Docker
# 获取 Docker 镜像
docker pull kodoproduct/kodoimport:latest
2.3 Kubernetes
参考 kodoimport 内置文档中,安装部分的 Kubernetes 配置文件:kodoimport.yaml,并根据注释结合自己根据实际情况进行调整。
# 部署
kubectl apply -f kodoimport.yaml
3. 启动
3.1 二进制程序启动
3.1.1 单机模式
# 解压后找到 kodoimport 二进制执行程序,执行以下命令:
./kodoimport
3.1.2 多机模式
# 解压后找到 kodoimport 二进制执行程序
# Scheduler 的主机 IP 为:192.168.1.5
# Worker 的主机 IP 为:192.168.1.6
# 启动 Scheduler
kodoimport --mode 1 --scheduler-address "0.0.0.0:8001"
# 启动 Worker
kodoimport --mode 2 --scheduler-address "192.168.1.5:8001"
3.2 Docker 启动
3.2.1 单机模式
# 单机模式
# /Users/test/.kodoimport 为挂载的 kodoimport 工作目录,kodoimport 运行的状态信息会保存此处
docker run -it -p 7900:7900 \
--mount type=bind,source=/Users/test/.kodoimport,target=/root/.kodoimport \
kodoproduct/kodoimport:latest
3.2.2 多机模式
# Scheduler 的宿主机 IP 为:192.168.1.5
# Worker 的宿主机 IP 为:192.168.1.6
# 启动 Scheduler
# /Users/test/.kodoimport 为挂载的 kodoimport 工作目录,kodoimport 运行的状态信息会保存此处
docker run -it -p 7902:7902 -p 8001:8001 \
--mount type=bind,source=/Users/test/.kodoimport,target=/root/.kodoimport \
kodoproduct/kodoimport:latest \
--mode 1 \
--scheduler-address "0.0.0.0:8001" \
--web-address "0.0.0.0:7902"
# 启动 Worker
docker run -it -p 7902:7902 kodoproduct/kodoimport:latest \
--mode 2 \
--scheduler-address "192.168.1.5:8001" \
--web-address "0.0.0.0:7902:192.168.1.6"
3.3 kodoimport 启动参数
参数 | 类型 | 作用 | 默认值 |
---|---|---|---|
–mode | int | 运行模式 0:同时部署启动 Scheduler 和 Worker 1:仅启动 Scheduler 其他:仅启动 Worker。 |
0 |
–workspace | string | kodoimport 的工作目录,存储 kodoimport 的日志等信息; 当 kodoimport 中启动了 Scheduer 还会包含 Job 的信息。 |
${当前用户家目录}/.kodoimport |
–web-address | string | Web 监听的地址,样式: 监听Host:监听端口:路由Host。 kodoimport 运行状态和文档,以及 kodoimport-cli 和 kodoimport 的交互也依赖此端口。 一般只设置监听地址即可(监听Host:监听端口),在 docker 的多机模式中,由于 Scheduler 需要转发请求到 Worker,此时需要配置 Worker 的路由Host(Docker 宿主机地址)。 仅支持 IPv4。 |
0.0.0.0:7900 |
–scheduler-address | string | Scheduler 和 Worker 远程调用的地址。 当启动了 Scheduler 时,为 Scheduler 监听地址; 当进启动 Worker 时,为 Schdulder 访问地址。 仅支持 IPv4。 |
127.0.0.1:8001 |
–worker-name | string | Worker 的别名。 | 无 |
–log-level | string | 日志等级;可配值有:debug、info、warning 和 error; 当 Worker 启动时未指定此参数,Worker 会使用 Scheduler 配置的值。 |
info |
–executor-count | int | Worker 的并发执行数量; 当 Worker 启动时未指定此参数,Worker 会使用 Scheduler 配置的值。 |
20 |
–username | string | Web 请求中使用的 Basic Auth 验证的用户名 只有 Username 和 Password 同时指定才会生效。 |
无 |
–password | string | Web 请求中使用的 Basic Auth 验证的密码 只有 Username 和 Password 同时指定才会生效。 |
无 |
注:
特殊状态码说明:
- 230:文件迁移成功,但由于无法获取文件 Hash 而无法确保文件一致性的文件。
4. 创建数据迁移 Job
使用 kodoimport-cli 创建迁移 Job,详细使用说明请参考 kodoimport 内置文档中的示例
kodoimport-cli job create -h