将因果集群迁移到 4.0
本章介绍将因果集群从 Neo4j 3.5 迁移到 4.0 所需的步骤。
将因果集群从 Neo4j 3.5 迁移到 4.0 需要停机。因此,建议在类似生产的环境中进行测试迁移,以获取有关停机时间的相关信息。 要从 3.5.latest 迁移到 4.0 以上的版本,集群必须先迁移到 4.0,然后升级到所需的版本。有关更多信息,请参阅支持的升级和迁移路径. |
必须为每个集群成员完成先决条件和迁移步骤。 |
先决条件
确保已完成迁移清单上的所有任务。
准备迁移
迁移集群部署的策略是,首先在一个单独的实例上完成单个迁移,作为独立实例,然后使用迁移的存储库来播种集群的其余成员。
请记住,迁移是一个单一事件。不要在每个实例上独立执行迁移!应该只有一个迁移事件,并且迁移的存储库将是您所有其他集群实例的真实来源。这很重要,因为在迁移时,Neo4j 会生成随机存储库 ID,如果独立完成,您的集群最终将拥有与您拥有的实例一样多的存储库 ID。如果出现这种情况,Neo4j 将无法启动。因此,一些集群迁移步骤将在单个实例上执行,而另一些则将在所有实例上执行。每个步骤都会告诉您在何处执行必要的操作。 |
在此阶段,您应该选择一个要操作的实例。这将是实际进行迁移的实例。接下来的步骤将告诉您是在选定的实例上执行该步骤,还是在其余实例上执行,或是在所有实例上执行。 |
- 在每个集群成员上
-
-
验证您是否已关闭所有集群成员(核心和只读副本)。您可以检查neo4j.log。
-
在每个集群成员上执行
neo4j-admin unbind
以删除集群状态数据。 -
在每个实例上安装您要迁移到的Neo4j版本。有关如何安装您正在使用的发行版的更多信息,请参阅操作手册 4.0 → 安装.
-
将neo4j.conf文件替换为您在准备用于新安装的新neo4j.conf文件部分中为每个实例准备的文件。
-
复制用于加密的所有文件,例如私钥、公钥证书以及受信任目录和已吊销目录的内容(位于<neo4j-home>/certificates/中)。
-
如果您使用的是自定义插件,请确保它们已更新并与新版本兼容,并将它们放置在/plugins目录中。
-
- 在选定的实例上
-
-
打开新安装的neo4j.conf文件并配置以下设置
-
取消注释
dbms.allow_upgrade=true
以允许自动存储库迁移。没有此配置,Neo4j 将无法启动。 -
设置
dbms.mode=SINGLE
。您需要这样做,因为迁移是一个单一事件,需要在独立服务器上发生。
-
-
迁移数据
- 在选定的实例上
-
在迁移数据之前,您需要将备份文件移动到 Neo4j 4.0 的data目录中。
如果您将dbms.directories.data指向<neo4j-home>之外的目录,则此步骤不适用。 |
-
通过从
<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
数据库中。 -
备份就位后,通过启动选定的实例来启动迁移
bin/neo4j start
或者
systemctl start neo4j
迁移在启动期间进行。您的索引也会在启动期间自动迁移到最新的索引提供程序。但是,索引需要在迁移后填充。您的查询在填充索引期间将无法使用索引,因此您可能会看到暂时的性能下降。如果您的查询完全依赖于某些索引,建议将索引填充作为迁移持续时间的一部分进行考虑。
neo4j.log文件包含有关迁移涉及多少步骤以及迁移进度如何的信息。索引填充在debug.log中跟踪。对于大型迁移,建议持续监控这些日志。
-
迁移完成后,停止服务器。
bin/neo4j stop
或者
systemctl stop neo4j
准备播种集群
- 在选定的实例上
-
-
还原neo4j.conf更改
-
设置
dbms.mode=CORE
以在配置中重新启用因果集群。
-
使用
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 现在支持多个数据库。
-
不要启动服务器。
-
种子集群
- 在每个剩余的实例上
-
-
将 迁移步骤 中创建的转储复制到剩余的实例。
-
完成此操作后,使用
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
-
启动集群
- 在每个集群成员上,包括已选实例
在继续之前,请确保以下活动已经发生并已成功完成
|
-
如果列表中的所有内容都已成功完成,则可以继续启动集群的所有实例。
bin/neo4j start
或者
systemctl start neo4j
-
如果迁移的数据库是
default
数据库,则它应该在实例启动时自动启动,此步骤不需要。如果迁移的数据库不是default
数据库,它仍然处于STOPPED
状态。现在需要启动数据库。在一个集群成员上,在 Neo4j 浏览器或 Cypher® Shell 中运行以下命令CREATE DATABASE <db_name>;
- 对于每个只读副本
-
启动只读副本并等待它赶上其他集群成员。
(可选)虽然空的只读副本最终将从集群中的其他成员获得所有数据的完整副本,但赶上来可能需要一些时间。为了加快此过程,您可以首先加载数据,使用
neo4j-admin load --from=<archive-path> --database=<db_name> --force
用迁移的数据库替换每个数据库。 -
验证只读副本是否已加入集群。