迁移独立服务器(Helm)

本示例演示如何将使用neo4j/neo4j-standalone Helm 图表在 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 索引。

如果多个条件为真,则可以在同一模式上创建不同索引类型的多个索引。有关每种索引类型的更多信息,请参阅操作手册 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® 手册 → 创建索引

备份每个数据库

  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命令的更多信息,请参阅操作手册 → 备份联机数据库

    • 使用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命令的更多信息,请参阅操作手册 → 备份脱机数据库

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

设置 5.x 独立服务器

请遵循 快速入门指南 中有关使用 neo4j/neo4j Helm 图表安装 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 安装中的密钥,请在与 4.4 相同的命名空间中安装 5.x。

还原数据库备份

根据 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/scripts/databasename/restore_metadata.cypherneo4j-admin restore 命令输出)来还原与每个数据库关联的角色和权限,使用 Cypher Shell

    kubectl exec -t -i standalone-5-0 -- cypher-shell -u neo4j -p password -d system --param "database => 'neo4j'" -f /data/scripts/neo4j/restore_metadata.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 服务器运行,现在可以将其卸载。