迁移集群(Helm)

此示例演示如何将部署在 Kubernetes 上使用 neo4j/neo4j-cluster-core Helm 图表部署的 Neo4j 集群从版本 4.4 迁移到 5.x。
仅支持从版本 4.4 迁移到 Neo4j 5。

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

以下示例步骤假设 Neo4j 数据库管理系统 4.4 已安装,且 Helm 版本名称为 (core-1、core-2 和 core-3)

准备 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. 运行 Cypher 命令 SHOW DATABASES YIELD * 并选择在所有数据库上都与上次提交的事务最新的成员作为备份源。

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

  4. 运行 neo4j-admin backup 命令备份所有数据库。

    • 您要备份的所有数据库都必须联机。

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

    kubectl exec -t -i core-1-0 -- neo4j-admin backup --database=*  --backup-dir=/backups --include-metadata=all --expand-commands
  5. 将备份从 Kubernetes Pod 复制到中间到您本地文件系统上的 /migration-backups 文件夹

    kubectl cp core-1-0:/backups /path/to/migration-backups

    结果是每个数据库的文件夹,称为 <databasename> 并且位于 /migration-backups 文件夹中,以及每个数据库的元数据脚本,位于 /migration-backups/<databasename>/tools/metadata_script.cypher 中。有关 neo4j-admin backup 命令的更多信息,请参阅 运维手册 → 备份联机数据库

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

设置 5.x 集群

请参阅 快速入门指南,以获取有关使用 neo4j/neo4j Helm 图表安装 5.x 集群的详细信息。

准备 5.x 集群以进行迁移

  1. 更新 neo4j helm 存储库

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

    helm get values core-1
  3. 阅读 快速入门指南 后,安装 Neo4j 5.x 集群,例如

    helm install server1 neo4j/neo4j --set neo4j.edition=enterprise --set neo4j.acceptLicenseAgreement=yes --set volumes.data.mode=defaultStorageClass --set neo4j.password="password" --set neo4j.minimumClusterSize=3 --set neo4j.name=v5-cluster
    
    helm install server2 neo4j/neo4j --set neo4j.edition=enterprise --set neo4j.acceptLicenseAgreement=yes --set volumes.data.mode=defaultStorageClass --set neo4j.password="password" --set neo4j.minimumClusterSize=3 --set neo4j.name=v5-cluster
    
    helm install server3 neo4j/neo4j --set neo4j.edition=enterprise --set neo4j.acceptLicenseAgreement=yes --set volumes.data.mode=defaultStorageClass --set neo4j.password="password" --set neo4j.minimumClusterSize=3 --set neo4j.name=v5-cluster

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

恢复数据库备份

  1. 将备份文件从 /migration-backups 复制到 5.x 集群服务器之一

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

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

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

    kubectl exec -t -i server1-0 -- neo4j-admin database migrate <databasename> --expand-commands
  5. 运行 SHOW SERVERS YIELD address, serverId 以检索**server1** 的服务器 ID

    kubectl exec -t -i server1-0 -- cypher-shell -d system -u neo4j -p password "SHOW SERVERS YIELD address, serverId"
  6. 重新创建每个已迁移的数据库

    kubectl exec -t -i server1-0 -- cypher-shell -d system -u neo4j -p password "CREATE DATABASE <databasename> OPTIONS {existingData: 'use', existingDataSeedInstance: '<ServerId for server1>'}"
  7. (可选)通过运行相应的元数据脚本data/scripts/databasename/restore_metadata.cypherneo4j-admin restore 命令输出)使用 Cypher Shell 恢复与每个数据库关联的角色和权限。

    kubectl exec -t -i server1-0 -- cypher-shell -u neo4j -p password -d system --param "database => 'neo4j'" -f /data/scripts/neo4j/restore_metadata.cypher
  8. 如果您在设置新集群的同时保持 4.4 集群运行,则现在可以卸载它。