迁移独立服务器(Helm)
准备 4.4 独立服务器以进行迁移
通过重新创建索引和索引支持的约束以匹配新的索引类型,并备份每个数据库,来准备 4.4 独立服务器进行迁移。
重新创建索引和索引支持的约束
在 5.0 中,BTREE 索引类型不再可用。因此,建议在切换到 5.x 之前,使用索引提供程序native-btree-1.0
或lucene+native-3.0
重新创建所有 BTREE 索引和索引支持的约束。在迁移过程中,5.x 检查每个 BTREE 索引和索引支持的约束是否具有等效类型的索引和提供程序,如果存在则删除它们。
除了 BTREE 以外,应使用什么类型的索引?
在大多数情况下,RANGE 索引可以替换 BTREE。但是,在某些情况下,可能需要使用其他类型的索引,例如
-
如果属性值类型为
point
且对该属性使用distance
或bounding box
查询,则使用 POINT 索引。 -
如果属性值类型为
text
且值可能大于 8Kb,则使用 TEXT 索引。 -
如果属性值类型为
text
且在该属性的查询中使用CONTAINS
和ENDS WITH
,则使用 TEXT 索引。
如果多个条件为真,则可以在同一模式上创建不同索引类型的多个索引。有关每种索引类型的更多信息,请参阅操作手册 5.0 → 索引配置。
步骤
-
在同一模式上重新创建每个 BTREE 索引,但根据您的用例使用新的类型(RANGE、POINT 或 TEXT)。以下示例创建所有具有特定标签的节点的单个属性的范围索引
CREATE RANGE INDEX range_index_name FOR (n:Label) ON (n.prop1)
-
在同一模式上使用索引提供程序
native-btree-1.0
或lucene+native-3.0
重新创建每个索引支持的约束,但使用新的提供程序。以下示例创建所有具有特定标签的节点的单个属性的唯一节点属性约束。支持的索引类型为范围,索引提供程序为range-1.0
。CREATE CONSTRAINT constraint_with_provider FOR (n:Label) REQUIRE (n.prop1) IS UNIQUE OPTIONS {indexProvider: 'range-1.0'}
-
运行
SHOW INDEXES
以验证索引是否已填充,并且约束是否已使用正确的索引提供程序创建。
有关创建索引的更多信息,请参阅Cypher® 手册 → 创建索引。
备份每个数据库
-
为了确保在备份期间数据库不会更新,请使用 Cypher 命令
ALTER DATABASE <databasename> SET ACCESS READ ONLY
将其设置为只读模式。 -
创建一个目录来存储备份。本教程使用/migration-backups。
-
通过选择以下选项之一来备份每个数据库
-
企业版 运行
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
命令创建system
和neo4j
数据库的脱机.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.dump和neo4j.dump,位于/migration-backups文件夹中。有关
neo4j-admin dump
命令的更多信息,请参阅操作手册 → 备份脱机数据库。不支持数据库的文件系统复制粘贴操作,这可能会导致意外行为。
-
设置 5.x 独立服务器
请遵循 快速入门指南 中有关使用 neo4j/neo4j Helm 图表安装 5.x 独立服务器的详细信息。 |
准备 5.x 独立服务器以进行迁移
-
更新
neo4j
helm 存储库helm repo update neo4j
-
记录需要从 4.4 Helm 安装中迁移的任何用户提供的参数。可以使用以下命令打印用户提供的参数
helm get values standalone-4
-
在阅读 快速入门指南 后,安装 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 版本,使用以下选项之一迁移您的数据库
企业版
-
将备份文件从
/migration-backups
复制到 5.x 独立服务器kubectl cp /path/to/migration-backups/<databasename> standalone-5-0:/backups/<databasename>
-
如果要还原默认的
neo4j
数据库或其他已存在的数据库,则必须先将其删除kubectl exec -t -i standalone-5-0 -- cypher-shell -u neo4j -p password "DROP DATABASE neo4j IF EXISTS"
-
使用
neo4j-admin restore
命令还原所有数据库,除了system
数据库kubectl exec -t -i standalone-5-0 -- neo4j-admin database restore <databasename> --from-path=/backups/<databasename>
-
迁移每个还原的数据库
kubectl exec -t -i standalone-5-0 -- neo4j-admin database migrate <databasename>
-
重新创建每个迁移的数据库
kubectl exec -t -i standalone-5-0 -- cypher-shell -d system -u neo4j -p password "CREATE DATABASE <databasename>"
-
(可选) 通过运行相应的元数据脚本 data/scripts/databasename/restore_metadata.cypher(
neo4j-admin restore
命令输出)来还原与每个数据库关联的角色和权限,使用 Cypher Shellkubectl exec -t -i standalone-5-0 -- cypher-shell -u neo4j -p password -d system --param "database => 'neo4j'" -f /data/scripts/neo4j/restore_metadata.cypher
-
如果您在设置新服务器时保持 4.4 服务器运行,现在可以将其卸载。
-
将服务置于离线维护模式,以便 Neo4j 进程不会运行
helm upgrade standalone-5 neo4j/neo4j --reuse-values --set neo4j.offlineMaintenanceModeEnabled=true
-
将备份文件从
/migration-backups
复制到 5.x 独立服务器kubectl cp /path/to/migration-backups/<databasename>.dump standalone-5-0:/backups/<databasename>.dump
-
使用
neo4j-admin database load
命令将转储文件移动到新安装kubectl exec -t -i standalone-5-0 -- neo4j-admin database load --overwrite-destination --from-path=/backups/<databasename>.dump "*"
-
迁移所有数据库
kubectl exec -t -i standalone-5-0 -- neo4j-admin database migrate "*"
-
将 Neo4j DBMS 置于联机模式
helm upgrade standalone-5 neo4j/neo4j --reuse-values --set neo4j.offlineMaintenanceModeEnabled=false
-
如果您在设置新服务器时保持 4.4 服务器运行,现在可以将其卸载。