human: 如何处理七牛云的对象存储数据迁移工具 Kodoimport

gpt: [对象存储](https://developer.qiniu.com/kodo) > 实用工具 > 数据迁移工具 Kodoimport

#  数据迁移工具 Kodoimport

最近更新时间: 2024-06-25 16:14:19

  * 1\. 简介
    * 1.1 下载
    * 1.2 文档
    * 1.3 kodoimport-cli
    * 1.4 角色
      * 1.4.1 Job
      * 1.4.2 Scheduler
      * 1.4.3 Worker
      * 1.4.4 Executor
    * 注意事项
  * 2\. 安装
    * 2.1 二进制程序
    * 2.2 Docker
    * 2.3 Kubernetes
  * 3\. 启动
    * 3.1 二进制程序启动
      * 3.1.1 单机模式
      * 3.1.2 多机模式
    * 3.2 Docker 启动
      * 3.2.1 单机模式
      * 3.2.2 多机模式
    * 3.3 kodoimport 启动参数
  * 4\. 创建数据迁移 Job

# 1\. 简介

kodoimport 为七牛云的数据迁移工具，和 kodoimport-cli 搭配使用，支持以下源的迁移：

  * 本地源
  * HTTP 源
  * 七牛源
  * S3 源
  * OSS 源

迁移工具支持以下功能：

  * 支持单机模式和分布式模式。单机模式部署简单使用方便，但是单机模式迁移能力有限，如果有大规模数据迁移需求分布式模式更为合适
  * 支持流量控制
  * 支持迁移特定前缀的文件
  * 支持为迁移目标设置特定前缀
  * 支持并行数据下载和上传
  * 支持数据校验
  * 支持增量迁移
  * 支持同时配置多个迁移 Job

kodoimport 启动后会创建迁移服务、文档服务等，等待创建迁移的 Job 进行相关的迁移工作；

## 1.1 下载

支持平台 | 下载链接  
---|---  
Windows x64 | [下载 __](https://kodo-toolbox-new.qiniu.com/kodoimport-v2.4.0-20240621-windows-amd64.tar.gz)  
Macos amd64 | [下载 __](https://kodo-toolbox-new.qiniu.com/kodoimport-v2.4.0-20240621-darwin-amd64.tar.gz)  
Macos arm64 | [下载 __](https://kodo-toolbox-new.qiniu.com/kodoimport-v2.4.0-20240621-darwin-arm64.tar.gz)  
Linux amd64 | [下载 __](https://kodo-toolbox-new.qiniu.com/kodoimport-v2.4.0-20240621-linux-amd64.tar.gz)  
Linux arm64 | [下载 __](https://kodo-toolbox-new.qiniu.com/kodoimport-v2.4.0-20240621-linux-arm64.tar.gz)  
  
## 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 __](https://developer.qiniu.com/kodo/6435/kodoimport)

## 2.2 Docker

    
    
    # 获取 Docker 镜像
    docker pull kodoproduct/kodoimport:latest
    

## 2.3 Kubernetes

参考 kodoimport Kubernetes
配置文件：[kodoimport.yaml](https://developer.qiniu.com/kodo/6435/kodoimport/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
    

以上内容是否对您有帮助？