持久化数据迁移
Ignite 3 的持久化数据存储与 Ignite 2 不直接兼容,需要将 Ignite 2 缓存转换为 Ignite 3 表,迁移工具可用于转换大多数 Ignite 2 缓存。
创建所需的 Ignite 3 配置有两个选项:
- 将缓存复制到 Ignite 3;
- 迁移持久化数据。
无论选择哪种方法,都需要先下载迁移工具:
- 下载迁移工具;
- 将下载的压缩包解压;
- 若要浏览可用的命令,请从迁移工具目录中运行以下命令:shell或
bin/migration-tools --helpshell替换bin/migration-tools {command} --help{command}为实际的命令名。
1.将缓存复制到Ignite3
迁移工具可以分析 Ignite 2 的配置并生成对应缓存的DDL。
1.1.导出DDL脚本
要导出 DDL 脚本,需执行使用以下命令:
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 的命令行工具执行前面生成的脚本:
sql --file=ai3-script.sql执行时,脚本将创建所有必需的模式和表,其配置与 Ignite 2 中指定的配置相同。
2.迁移持久化数据
除了通过配置表并执行 SQL 脚本从 Ignite 2 迁移数据外,还可以直接从持久化数据文件迁移数据。以这种方式完成后,存储在节点上的所有数据都将转换为 Ignite 3 表,并在集群启动后即可访问。由于此方法直接转换存储的数据,因此将保留 Ignite 2 中的模式。
此方法需要停机,但不涉及使用数据中心复制。
要将持久化存储转换为 Ignite 3,需执行以下操作:
安全停止要迁移数据的 Ignite 2 节点;
注意
让节点在停止客户端后完成一个检查点,以确保所有数据都正确保存在持久存储中。
启动 Ignite 3 集群;
运行以下命令列出节点上的可用缓存:
shellbin/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环境变量中指定用户密码。
在迁移工具中执行持久化数据迁移命令:
shellbin/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 集群。
迁移命令可能如下所示:
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
