分布式部署(已下线)

更新时间:

本文介绍如何分布式部署ossimport,分布式部署目前只支持Linux系统,Windows系统暂不支持。

前提条件

  • 请选择至少两台机器作为迁移集群,其中一台作为Master,其余的作为Worker。

  • 请确保网络连接正常,以便MasterWorker之间通过SSH连接。

  • 请确保所有Worker的用户名和密码一致。

    说明

    MasterWorker之间需要SSH连接或者在sys.properties配置Worker登录信息。

下载并安装ossimport

  1. 下载ossimport

    分布式版本下载地址ossimport-2.3.7.tar.gz,将ossimport安装包下载到本地。

  2. 安装ossimport

    说明

    选择一台机器作为Master,后续的操作都在Master上执行。

    1. 登录服务器后执行以下命令 ,创建ossimport目录。

      mkdir -p $HOME/ossimport
    2. 进入压缩包当前目录,执行以下命令 ,将压缩包解压到指定目录。

      tar -zxvf ossimport-2.3.7.tar.gz -C $HOME/ossimport

      解压后的文件结构如下:

      ossimport
      ├── bin
      │   ├── console.jar     # Console模块jar包
      │   ├── master.jar      # Master模块jar包
      │   ├── tracker.jar     # Tracker模块jar包
      │   └── worker.jar      # Worker模块jar包
      ├── conf
      │   ├── job.cfg         # Job配置文件模板
      │   ├── sys.properties  # 系统运行参数配置文件
      │   └── workers         # Worker列表
      ├── console.sh          # 命令行工具,目前支持只Linux
      ├── logs                # 日志目录
      └── README.md           # 说明文档,使用前请仔细阅读
      • OSS_IMPORT_HOME:ossimport的根目录,默认为解压命令中的目录$HOME/ossimport,也可以通过命令export OSS_IMPORT_HOME=<dir>或修改系统配置文件$HOME/.bashrc设置,推荐使用默认目录;

      • OSS_IMPORT_WORK_DIR:ossimport的工作目录,通过conf/sys.properties的配置项workingDir指定,推荐为$HOME/ossimport/workdir

      • OSS_IMPORT_HOMEOSS_IMPORT_WORK_DIR请使用绝对路径配置,如/home/<user>/ossimport/home/<user>/ossimport/workdir

配置

分布式部署有三个配置文件conf/sys.propertiesconf/job.cfgconf/workers

  • conf/job.cfg:分布式模式下任务的配置文件模板,数据迁移前请按照实际参数修改。

  • conf/sys.properties:系统运行参数配置文件,如工作目录、Worker运行参数等请在该文件中配置。

  • conf/workers:worker列表。

重要
  • 请在提交任务前确认sys.propertiesjob.cfg中的参数,任务提交后参数无法再修改。

  • Worker列表workers请启动服务前确定,启动后无法再增加或删除。

运行

  • 执行迁移任务

    分布式部署时,执行任务的一般步骤是修改任务配置文件、部署服务、清除同名任务、提交任务、启动迁移服务、查看任务状态、重试失败子任务以及停止迁移任务。详细说明如下:

    • 部署服务。在Linux终端执行bash console.sh deploy。该命令会根据用户配置的conf/workers,将ossimport部署到所有机器上。

      说明

      部署前请保证配置文件conf/job.cfg、conf/workers已经修改完成。

    • 清除同名任务。如果运行过同名任务,需要重新执行任务,请先清除同名任务。如果没有运行过,或需要重试失败子任务,不需要执行清除命令。Linux终端中执行bash console.sh clean job_name

    • 提交数据迁移任务。OssImport不能重复提交同名任务,如果有请使用clean命令清除。提交任务需要指定任务的配置文件,任务的配置文件模板在conf/job.cfg,建议在模板的基础上修改。在Linux终端执行bash console.sh submit [job_cfg_file],提交配置文件为job_cfg_file 的任务,job_cfg_file为可选参数,不指定时默认为$OSS_IMPORT_HOME/conf/job.cfg$OSS_IMPORT_HOME默认为console.sh所在的目录。

    • 启动服务。Linux终端执行bash console.sh start

    • 查看任务状态。Linux终端执行bash console.sh stat

    • 失败任务重试。由于网络或其它原因,任务可能运行失败。失败重试只重试失败的任务,成功的任务不会重试。Linux下在终端执行bash console.sh retry [job_name],job_name 为可选参数,指定job_name时重试失败任务的子任务,不指定job_name时重试所有任务的失败子任务。

    • 停止服务。Linux终端执行bash console.sh stop

    提示:

    • bash console.sh在参数错误时,会自动提示命令格式。

    • 配置文件和提交任务中的目录,推荐使用绝对目录。

    • 任务的配置,即job.cfg中的配置项。

      重要

      配置项提交后不允许修改。

  • 常见任务失败原因

    • 上传过程中源目录的文件发生了修改,log/audit.log里会提示SIZE_NOT_MATCH相关字样的错误,这种情况下老的文件已经上传成功,新的修改没有上传到OSS;

    • 源文件在上传过程中被删除,导致下载的时候失败;

    • 源文件名不符合OSS命名规范(不能以/开头,不能为空),导致上传到OSS失败;

    • 下载数据源文件失败;

    • 程序异常退出,任务状态为Abort,这种情况请联系我们。

  • 任务状态及日志

    任务提交后,Master分解成Task,有Worker执行Task,Tracker收集Task状态。任务运行完成后workdir目录内容如下:

    workdir
    ├── bin
    │   ├── console.jar     # Console模块jar包
    │   ├── master.jar      # Master模块jar包
    │   ├── tracker.jar     # Tracker模块jar包
    │   └── worker.jar      # Worker模块jar包
    ├── conf
    │   ├── job.cfg         # Job配置文件模板
    │   ├── sys.properties  # 系统运行参数配置文件
    │   └── workers         # Worker列表
    ├── logs
    │   ├── import.log      # 迁移日志
    │   ├── master.log      # Master日志
    │   ├── tracker.log     # Tracker日志
    │   └── worker.log      # Worker日志
    ├── master
    │   ├── jobqueue                 # 存放尚未分解完成的任务
    │   └── jobs                     # 存放任务运行状态
    │       └── xxtooss              # 任务名称
    │           ├── checkpoints      # Master分解JobTaskcheckpoint点记录
    │           │   └── 0
    │           │       └── ED09636A6EA24A292460866AFDD7A89A.cpt
    │           ├── dispatched       # 已经分配给Worker尚未运行完成的Task
    │           │   └── 192.168.1.6
    │           ├── failed_tasks     # 运行失败的Task
    │           │   └── A41506C07BF1DF2A3EDB4CE31756B93F_1499348973217@192.168.1.6
    │           │       ├── audit.log     # Task运行日志,通过该日志可以查看错误原因
    │           │       ├── DONE          # Task运行成功标志,失败为空
    │           │       ├── error.list    # Task错误列表,可以查看错误文件列表
    │           │       ├── STATUS        # 任务状态标志文件,内容为FailedCompleted,表示子任务失败或成功
    │           │       └── TASK          # Task描述信息
    │           ├── pending_tasks    # 尚未分配的Task
    │           └── succeed_tasks    # 成功运行的Task
    │               └── A41506C07BF1DF2A3EDB4CE31756B93F_1499668462358@192.168.1.6
    │                   ├── audit.log    # Task运行日志,通过该日志可以查看错误原因
    │                   ├── DONE         # Task运行成功标志
    │                   ├── error.list   # Task错误列表,成功为空
    │                   ├── STATUS       # 任务状态标志文件,内容为FailedCompleted,表示子任务失败或成功
    │                   └── TASK         # Task描述信息
    └── worker  # Worker正在运行的Task状态,运行完成后由Master管理
        └── jobs
            ├── local_test2
            │   └── tasks
            └── local_test_4
                └── tasks
    重要
    • Job运行信息,可以查看logs/import.log

    • Task的失败原因,可以查看master/jobs/${JobName}/failed_tasks/${TaskName}/audit.log

    • Task的失败文件,可以查看master/jobs/${JobName}/failed_tasks/${TaskName}/error.list

    • 上述日志仅作为排查问题时的参考,您的业务和应用不要依赖于该内容。

迁移结果校验

ossimport不对迁移文件进行校验,无法保证迁移结果的正确性和一致性。在迁移任务完成后,请您务必自行做好源端和目的端数据的一致性校验。

如您在未校验源端和目的端数据一致性前,删除源数据,由此所引起的一切损失和后果均由您自行承担。

常见错误及排除

请查看常见错误及排除