迁移独立服务器(Helm)

此示例展示了如何使用 neo4j/neo4j-standalone Helm Chart 将部署在 Kubernetes 上的独立服务器从 4.4 版本迁移到 5.x 版本。

仅支持从 4.4 迁移到 Neo4j 5。

建议在继续之前阅读以下页面:

以下示例步骤假设 Neo4j DBMS 4.4 已使用 Helm 发布名称 standalone-4 安装。

准备 4.4 独立服务器进行迁移

通过重新创建索引和索引支持的约束以匹配新的索引类型,并备份每个数据库,来准备 4.4 独立服务器进行迁移。

重新创建索引和索引支持的约束

在 5.0 中,BTREE 索引类型不再可用。因此,建议在切换到 5.x 之前,使用索引提供程序 native-btree-1.0lucene+native-3.0 重新创建所有 BTREE 索引和索引支持的约束。在迁移过程中,5.x 会检查每个 BTREE 索引和索引支持的约束是否具有等效类型的索引和提供程序,并将其删除。

用哪种索引类型代替 BTREE?

在大多数情况下,RANGE 索引可以替代 BTREE。但是,在某些情况下,不同的索引类型可能更适合,例如:

  • 如果属性值类型为 point 并且查询中使用了 distancebounding box,则使用 POINT 索引。

  • 如果属性值类型为 text 并且值可能大于 8KB,则使用 TEXT 索引。

  • 如果属性值类型为 text 并且查询中使用了 CONTAINSENDS WITH,则使用 TEXT 索引。

如果上述条件中有一个以上为真,则可以在同一模式上拥有多个不同索引类型的索引。有关每种索引类型的更多信息,请参阅 Operations Manual 5.0 → 索引配置

步骤

  1. 根据您的用例,在同一模式上重新创建每个 BTREE 索引,但使用新类型(RANGE、POINT 或 TEXT)。以下示例为所有具有特定标签的节点的单个属性创建范围索引:

    CREATE RANGE INDEX range_index_name FOR (n:Label) ON (n.prop1)
  2. 在同一模式上重新创建每个索引支持的约束,但使用新的提供程序,并使用索引提供程序 native-btree-1.0lucene+native-3.0。以下示例为所有具有特定标签的节点的单个属性创建唯一节点属性约束。支持索引的类型为范围,使用 range-1.0 索引提供程序。

    CREATE CONSTRAINT constraint_with_provider FOR (n:Label) REQUIRE (n.prop1) IS UNIQUE OPTIONS {indexProvider: 'range-1.0'}
  3. 运行 SHOW INDEXES 以验证索引已填充且约束已使用正确的索引提供程序创建。

有关创建索引的更多信息,请参阅 Cypher® Manual → 创建索引

备份您的每个数据库

  1. 为确保数据库在备份期间不会被更新,请使用 Cypher 命令 ALTER DATABASE <databasename> SET ACCESS READ ONLY 将它们设置为只读模式。

  2. 创建一个目录来存储备份。本教程使用 /migration-backups

  3. 通过选择以下选项之一来备份您的每个数据库:

    • 企业版 运行 neo4j-admin backup 命令来备份您的所有数据库。

      • 您要备份的所有数据库必须处于在线状态。

      • 使用选项 --include-metadata=all 以包含与每个数据库关联的所有角色和用户。

      kubectl exec -t -i standalone-4-0 -- neo4j-admin backup --database=*  --backup-dir=/backups --include-metadata=all

      现在,将备份从 Kubernetes Pod 复制到本地文件系统上的 /migration-backups 文件夹。

      kubectl cp standalone-4-0:/backups /path/to/migration-backups

      结果是每个数据库一个文件夹,名为 <databasename>,位于 /tmp//migration-backups 文件夹中,以及每个数据库一个元数据脚本,位于 /migration-backups/<databasename>/tools/metadata_script.cypher 中。有关 neo4j-admin backup 命令的更多信息,请参阅 Operations Manual → 备份在线数据库

    • 使用 neo4j-admin dump 命令创建 systemneo4j 数据库的离线 .dump 文件。

      首先将 Neo4j 独立服务器置于离线维护模式:

      helm upgrade standalone-4 neo4j/neo4j-standalone --reuse-values --set neo4j.offlineMaintenanceModeEnabled=true

      执行数据库的离线转储:

      kubectl exec -t -i standalone-4-0 -- neo4j-admin dump --database=system --to=/backups
      kubectl exec -t -i standalone-4-0 -- neo4j-admin dump --database=neo4j --to=/backups

      现在,将备份从 Kubernetes Pod 复制到本地文件系统上的 /migration-backups 文件夹。

      kubectl cp standalone-4-0:/backups /path/to/migration-backups

      结果是两个文件,名为 system.dumpneo4j.dump,位于 /migration-backups 文件夹中。有关 neo4j-admin dump 命令的更多信息,请参阅 Operations Manual → 备份离线数据库

      不支持文件系统复制和粘贴数据库,这可能导致意外行为。

设置 5.x 独立服务器

遵循 快速入门指南,了解使用 neo4j/neo4j Helm Chart 安装 5.x 独立服务器的详细信息。

准备 5.x 独立服务器进行迁移

  1. 更新 neo4j helm 仓库:

    helm repo update neo4j
  2. 记下需要从 4.4 Helm 安装迁移的任何用户提供的值。可以使用以下命令打印出用户提供的值:

    helm get values standalone-4
  3. 阅读 快速入门指南 后,安装 Neo4j 5.x 独立服务器,例如:

    helm install standalone-5 neo4j/neo4j --set volumes.data.mode=defaultStorageClass --set neo4j.name=standalone-5 --set neo4j.password=password

    如果您正在使用 TLS 并希望重用 4.4 安装中的密钥,请将 5.x 安装在与 4.4 相同的命名空间中。

恢复数据库备份

根据 Neo4j 版本,使用以下选项之一迁移您的数据库:

企业版

  1. 将备份文件从 /migration-backups 复制到 5.x 独立服务器。

    kubectl cp /path/to/migration-backups/<databasename> standalone-5-0:/backups/<databasename>
  2. 如果要恢复默认的 neo4j 数据库或已存在的其他数据库,则必须先将其删除。

    kubectl exec -t -i standalone-5-0 -- cypher-shell -u neo4j -p password "DROP DATABASE neo4j IF EXISTS"
  3. 使用 neo4j-admin restore 命令恢复除 system 数据库以外的每个数据库。

    kubectl exec -t -i standalone-5-0 -- neo4j-admin database restore <databasename> --from-path=/backups/<databasename>
  4. 迁移每个已恢复的数据库。

    kubectl exec -t -i standalone-5-0 -- neo4j-admin database migrate <databasename>
  5. 重新创建每个已迁移的数据库。

    kubectl exec -t -i standalone-5-0 -- cypher-shell -d system -u neo4j -p password "CREATE DATABASE <databasename>"
  6. (可选)通过运行相应的元数据脚本 data/databases/databasename/tools/metadata_script.cypher,使用 Cypher Shell 恢复与每个数据库关联的角色和权限,该脚本由 neo4j-admin restore 命令输出。

    kubectl exec -t -i standalone-5-0 -- cypher-shell -u neo4j -p password -d system --param "database => 'neo4j'" -f data/databases/databasename/tools/metadata_script.cypher
  7. 如果您在设置新服务器时保持 4.4 服务器运行,则现在可以卸载它。

  1. 将服务置于离线维护模式,使 Neo4j 进程不运行。

    helm upgrade standalone-5 neo4j/neo4j --reuse-values --set neo4j.offlineMaintenanceModeEnabled=true
  2. 将备份文件从 /migration-backups 复制到 5.x 独立服务器。

    kubectl cp /path/to/migration-backups/<databasename>.dump standalone-5-0:/backups/<databasename>.dump
  3. 使用 neo4j-admin database load 命令将转储文件移动到新安装中。

    kubectl exec -t -i standalone-5-0 -- neo4j-admin database load --overwrite-destination --from-path=/backups/<databasename>.dump "*"
  4. 迁移您的所有数据库。

    kubectl exec -t -i standalone-5-0 -- neo4j-admin database migrate "*"
  5. 将 Neo4j DBMS 置于在线模式。

    helm upgrade standalone-5 neo4j/neo4j --reuse-values --set neo4j.offlineMaintenanceModeEnabled=false
  6. 如果您在设置新服务器时保持 4.4 服务器运行,则现在可以卸载它。

© . All rights reserved.