Skip to content

持久化数据迁移

Ignite 3 的持久化数据存储与 Ignite 2 不直接兼容,需要将 Ignite 2 缓存转换为 Ignite 3 表,迁移工具可用于转换大多数 Ignite 2 缓存。

创建所需的 Ignite 3 配置有两个选项:

  • 将缓存复制到 Ignite 3;
  • 迁移持久化数据。

无论选择哪种方法,都需要先下载迁移工具:

  1. 下载迁移工具;
  2. 将下载的压缩包解压;
  3. 若要浏览可用的命令,请从迁移工具目录中运行以下命令:
    shell
    bin/migration-tools --help
    shell
    bin/migration-tools {command} --help
    替换{command}为实际的命令名。

1.将缓存复制到Ignite3

迁移工具可以分析 Ignite 2 的配置并生成对应缓存的DDL。

1.1.导出DDL脚本

要导出 DDL 脚本,需执行使用以下命令:

shell
bin/migration-tools sql-ddl-generator [-o={file}] [--allow-extra-fields] [--stop-on-error] [--extra-lib={jar}] ignite-config.xml

其中:

  • -o:将脚本保存到文件(例如-o=ai3-script.sql),否则脚本默认将输出到控制台;
  • --allow-extra-fields:如果指定,则任何不受支持类型的列或字段都将作为 JSON 数据保存到EXTRA列中;
  • --stop-on-error:如果指定,则当命令在尝试为缓存生成 DDL 时遇到错误时会停止,否则该命令默认会记录错误并继续执行;
  • --extra-lib:如果指定,则将提供的 JAR 文件中的类添加到命令行工具的类路径。这些类可以在任何缓存配置中引用,可用于确保最佳结果并避免错误和警告消息。可以使用此参数添加每个 JAR ,也可以多次指定该参数以提供多个 JAR。

1.2.创建 Ignite3 表

然后,从 Ignite 3 的命令行工具执行前面生成的脚本:

shell
sql --file=ai3-script.sql

执行时,脚本将创建所有必需的模式和表,其配置与 Ignite 2 中指定的配置相同。

2.迁移持久化数据

除了通过配置表并执行 SQL 脚本从 Ignite 2 迁移数据外,还可以直接从持久化数据文件迁移数据。以这种方式完成后,存储在节点上的所有数据都将转换为 Ignite 3 表,并在集群启动后即可访问。由于此方法直接转换存储的数据,因此将保留 Ignite 2 中的模式。

此方法需要停机,但不涉及使用数据中心复制。

要将持久化存储转换为 Ignite 3,需执行以下操作:

  • 安全停止要迁移数据的 Ignite 2 节点;

    注意

    让节点在停止客户端后完成一个检查点,以确保所有数据都正确保存在持久存储中。

  • 启动 Ignite 3 集群;

  • 运行以下命令列出节点上的可用缓存:

    shell
    bin/migration-tools persistent-data work-dir consistent-id config-file list-caches [--mode] [--rate-limiter] [--client.basicAuthenticator.username]

    其中:

    • work-dir:Ignite 2 节点的工作目录。默认是{IGNITE_HOME}/work文件夹;

    • consistent-id:Ignite 2 节点的唯一节点标识符;

    • config-file:Ignite 2 配置文件,该文件将用于确定 Ignite 3 中的表参数;

    • cacheName:要迁移的特定缓存的名称;

    • ai3urls:迁移工具将接入的 Ignite 3 集群的 URL 列表;

    • --mode:迁移模式,它定义了在缓存中存储的对象与 Ignite 3 表之间出现冲突时该怎么做:

      • ABORT(默认):中止迁移;
      • IGNORE_COLUMN:忽略(不迁移到表)缓存记录中那些在 Ignite 2 中定义但在 Ignite 3 中未定义的列/字段;
      • SKIP_RECORD:忽略(不迁移到表)整个缓存记录;
      • PACK_EXTRA:序列化为 JSON 并将缓存记录中的所有附加列/字段存储在EXTRA列中。该工具将此列添加到表中(它不是 Ignite 3 的原生),并使 Java 客户端可以访问此列。
    • --rate-limiter:限制每秒迁移的记录数(允许节省资源)。默认值为-1,表示无限制;

    • --client.basicAuthenticator.username:要用于向 Ignite 3 集群进行身份验证的用户名。必须在IGNITE_CLIENT_SECRET环境变量中指定用户密码。

  • 在迁移工具中执行持久化数据迁移命令:

    shell
    bin/migration-tools persistent-data work-dir consistent-id config-file migrate-cache cacheName ai3urls [--mode] [--rate-limiter]  [--client.basicAuthenticator.username]

    其中:

    • work-dir:Ignite 2 节点的工作目录。默认是{IGNITE_HOME}/work文件夹;

    • consistent-id:Ignite 2 节点的唯一节点标识符;

    • config-file:Ignite 2 配置文件,该文件将用于确定 Ignite 3 中的表参数;

    • cacheName:要迁移的特定缓存的名称;

    • ai3urls:迁移工具将接入的 Ignite 3 集群的 URL 列表;

    • --mode:迁移模式,它定义了在缓存中存储的对象与 Ignite 3 表之间出现冲突时该怎么做:

      • ABORT(默认):中止迁移;
      • IGNORE_COLUMN:忽略(不迁移到表)缓存记录中那些在 Ignite 2 中定义但在 Ignite 3 中未定义的列/字段;
      • SKIP_RECORD:忽略(不迁移到表)整个缓存记录;
      • PACK_EXTRA:序列化为 JSON 并将缓存记录中的所有附加列/字段存储在EXTRA列中。该工具将此列添加到表中(它不是 Ignite 3 的原生),并使 Java 客户端可以访问此列。
    • --rate-limiter:限制每秒迁移的记录数(允许节省资源)。默认值为-1,表示无限制;

    • --client.basicAuthenticator.username:要用于向 Ignite 3 集群进行身份验证的用户名。必须在IGNITE_CLIENT_SECRET环境变量中指定用户密码。

迁移工具会分析指定的缓存并将其写入 Ignite 3 集群。

迁移命令可能如下所示:

shell
bin/migration-tools persistent-data ./nodeWorkDir ad26bff6-5ff5-49f1-9a61-425a827953ed ./config-file.xml list-caches
bin/migration-tools persistent-data ./nodeWorkDir ad26bff6-5ff5-49f1-9a61-425a827953ed ./config-file.xml migrate-cache cacheName localhost:10800 --mode IGNORE_COLUMN --rate-limiter 1000

这时迁移工具将首先显示可用的缓存,然后迁移cacheName缓存。

迁移工具会将日志存储在USER_HOME/.ignite-migration-tools/logs文件夹中,或者可以使用IGNITE_MIGRATION_TOOLS_LOGS_DIR环境变量配置日志文件夹。

18624049226