迁移独立服务器 (Helm)

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

仅支持从 4.4 版本迁移到 Neo4j 5。

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

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

为迁移准备 4.4 独立服务器

通过重新创建索引和索引支持的约束以匹配新的索引类型,并备份您的每个数据库,来为迁移做好准备。

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

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

如果不使用 BTREE,应该使用什么类型的索引?

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

  • 如果属性值类型为 point,并且该属性用于 distance(距离)或 bounding box(边界框)查询,请使用 POINT 索引。

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

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

如果满足多个条件,可以在同一个模式上拥有多种不同索引类型的索引。有关每种索引类型的更多信息,请参阅 Operations Manual 5.0 → Index configuration

步骤

  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 类型,并使用 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 → Creating indexes

备份您的每个数据库

  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 → Backup an online database

    • 使用 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 → Backup an offline database

      不支持直接复制粘贴数据库文件系统,这样做可能会导致异常行为。

设置 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 安装的密钥,请在与 4.4 相同的命名空间中安装 5.x。

恢复数据库备份

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

企业版 (Enterprise)

  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. (可选)通过运行 neo4j-admin restore 命令输出的相应元数据脚本 data/databases/databasename/tools/metadata_script.cypher(使用 Cypher Shell),来恢复与每个数据库关联的角色和权限。

    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 服务器运行,现在可以卸载它。

© . This site is unofficial and not affiliated with Neo4j, Inc.