将因果集群迁移到 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

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

    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 浏览器或 Cypher® Shell 中运行以下命令

    CREATE DATABASE <db_name>;
    对于每个只读副本
  3. 启动只读副本并等待它赶上其他集群成员。

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

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

迁移后

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