迁移集群 (Helm)

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

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

以下示例步骤假定 Neo4j DBMS 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,索引提供者为 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 chart 安装 5.x 集群的详细信息。

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

  1. 更新 neo4j helm 仓库

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

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

恢复数据库备份

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

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

© . All rights reserved.