将因果集群迁移到 4.0

本章描述了将因果集群从 Neo4j 3.5 迁移到 4.0 所需的步骤。

将因果集群从 Neo4j 3.5 迁移到 4.0 需要停机。因此,建议在类似生产的环境中执行测试迁移,以获取停机时间的信息。

要从 3.5.latest 迁移到 4.0 以上的版本,集群必须首先迁移到 4.0,然后升级到所需的版本。有关更多信息,请参阅支持的升级和迁移路径

每个集群成员都必须完成先决条件和迁移步骤。

先决条件

确保您已完成迁移清单上的所有任务。

准备迁移

迁移集群部署的策略是在单个实例上以独立实例的形式完成一次迁移,然后使用已迁移的存储来播种集群的其余成员。

请记住,迁移是一个单一事件。不要在每个实例上执行独立的迁移!应该只有一个迁移事件,并且该已迁移的存储将成为集群所有其他实例的真相来源。这很重要,因为在迁移时,Neo4j 会生成随机的存储 ID,如果独立执行,您的集群最终将拥有与实例数量一样多的存储 ID。如果发生这种情况,Neo4j 将无法启动。因此,某些集群迁移步骤将在单个实例上执行,而其他步骤将在所有实例上执行。每个步骤都会告诉您在哪里执行必要的操作。

在此阶段,您应该选择一个实例进行操作。这将是实际发生迁移的实例。接下来的步骤将告诉您是在所选实例、其余实例还是所有实例上执行该步骤。

在每个集群成员上
  1. 验证您已关闭所有集群成员(核心节点和只读副本)。您可以查看 neo4j.log

  2. 在每个集群成员上执行 neo4j-admin unbind 以删除集群状态数据。

  3. 在每个实例上安装您要迁移到的 Neo4j 版本。有关如何安装您正在使用的分发的更多信息,请参阅 操作手册 4.0 → 安装

  4. 用您在准备用于新安装的 neo4j.conf 文件一节中为每个实例准备的文件替换 neo4j.conf 文件。

  5. 复制所有用于加密的文件,例如私钥、公共证书以及信任和吊销目录的内容(位于 <NEO4J_HOME>/certificates/ 中)。

  6. 如果您正在使用自定义插件,请确保它们已更新并与新版本兼容,并将它们放置在 /plugins 目录中。

在所选实例上
  1. 打开新安装的 neo4j.conf 文件并配置以下设置

    • 取消注释 dbms.allow_upgrade=true 以允许自动存储迁移。如果没有此配置,Neo4j 将无法启动。

    • 设置 dbms.mode=SINGLE。您需要这样做,因为迁移是一个需要在独立服务器上发生的单一事件。

迁移数据

在所选实例上

在迁移数据之前,您需要将备份文件移动到 Neo4j 4.0 的 data 目录。

如果您的 dbms.directories.data 指向 <NEO4J_HOME> 之外的目录,则此步骤不适用。

  1. 通过从 <NEO4J_HOME> 运行 neo4j-admin load 命令,将备份文件移动到新安装中

    必须使用此命令,因为不支持数据库的文件系统复制粘贴,否则可能导致不必要的行为。如果您正在运行 Debian/RPM 分发版,则可以跳过此步骤。

    $NEO4J_HOME/bin/neo4j-admin load --from=$BACKUP_DESTINATION/<db_name>.dump –database=<db_name> --force

    用户和角色从 3.5 到 4.0 的迁移是自动完成的。因此,您无需将 data/dbms/ 目录及其内容移动到新安装中。3.5 中的文件将被解析,并在 Neo4j 4.0 DBMS 首次启动时将其内容添加到 system 数据库。

  2. 备份到位后,通过启动所选实例来启动迁移

    bin/neo4j start

    systemctl start neo4j

    迁移在启动期间进行。您的索引也会在启动期间自动迁移到最新的索引提供程序。但是,索引在迁移后需要填充。在索引填充期间,您的查询将无法使用索引,因此您可能会看到暂时性的性能下降。如果您的查询 100% 依赖于某些索引,建议将索引填充作为迁移持续时间的一部分考虑在内。

    neo4j.log 文件包含关于迁移涉及多少步骤以及进展情况的有价值信息。索引填充在 debug.log 中进行跟踪。对于大型迁移,最好持续监控这些日志。

  3. 迁移完成后,停止服务器。

    bin/neo4j stop

    systemctl stop neo4j

准备播种集群

在所选实例上
  1. 恢复 neo4j.conf 更改

  2. 使用 neo4j-admin dump 对您新迁移的数据库和事务以及 system 数据库进行离线备份。此备份将用于播种集群的其余实例。

    bin/neo4j-admin dump --database=<db_name> --to=$BACKUP_DESTINATION/<db_name>.dump
    
    bin/neo4j-admin dump --database=system --to=$BACKUP_DESTINATION/system.dump

    请注意,迁移后,Neo4j Admin 命令可能会略有不同,因为 Neo4j 现在支持多个数据库。

  3. 暂时不要启动服务器。

播种集群

在每个剩余实例上
  1. 迁移步骤 中创建的转储文件复制到其余实例。

  2. 完成后,使用 neo4j-admin load --from=<archive-path> --database=<db_name> --force 命令将您的每个数据库(包括 system 数据库)替换为在所选实例上迁移的数据库。

    bin/neo4j-admin load --from=$BACKUP_DESTINATION/<db_name>.dump --database=<db_name> --force
    
    bin/neo4j-admin load --from=$BACKUP_DESTINATION/system.dump --database=system --force

启动集群

在每个集群成员(包括所选实例)上

在继续之前,请确保以下活动已发生并成功完成

  • neo4j.conf 的内容正确,并且所需更改已应用于所有实例。

  • 单一迁移事件已在所选实例上发生。

  • 已在所选实例上执行迁移存储的备份(通过 neo4j-admin dump)。

  • 迁移存储的备份已传输到其余实例。

  • 存储已在其余实例上加载(通过 neo4j-admin load)。

  • 所选实例的 neo4j.conf 中已设置 dbms.mode=COREdbms.allow_upgrade=false(或已注释掉)。

  1. 如果列表中的所有内容都已成功,您可以继续并启动集群的所有实例。

    bin/neo4j start

    systemctl start neo4j
  2. 如果迁移的数据库是 default 数据库,它应该在实例启动时自动启动,并且不需要此步骤。如果迁移的数据库不是 default 数据库,它仍处于 STOPPED 状态。您现在需要启动该数据库。在其中一个集群成员上,在 Neo4j Browser 或 Cypher® Shell 中运行以下命令

    CREATE DATABASE <db_name>;
    对于每个只读副本
  3. 启动只读副本并等待它与集群的其余成员同步。

    (可选)虽然空的只读副本最终会从集群的其他成员那里获得所有数据的完整副本,但同步可能需要一些时间。为了加快进程,您可以首先使用 neo4j-admin load --from=<archive-path> --database=<db_name> --force 加载数据,以将您的每个数据库替换为已迁移的数据库。

  4. 验证只读副本已加入集群。

迁移后

建议使用空的目标目录执行完整备份

© . All rights reserved.