迁移集群 (Helm)

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

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

以下步骤示例假设 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,并且该属性用于 distance(距离)或 bounding box(边界框)查询,请使用 POINT 索引。

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

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

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

步骤

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

    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 → Creating indexes

备份您的每个数据库

  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

    结果是 /migration-backups 文件夹中每个数据库对应一个名为 <databasename> 的文件夹,以及每个数据库的元数据脚本,位于 /migration-backups/<databasename>/tools/metadata_script.cypher。有关 neo4j-admin backup 命令的更多信息,请参阅 Operations Manual → Backup an online 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 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. (可选)通过运行 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 集群运行,现在可以将其卸载了。

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