集群的新服务器滚动升级
|
重要提示
如果您要从 5.26 LTS 版本迁移到任何 2025-2026 版本,建议在继续操作前阅读简介和从 Neo4j 5.26 LTS 到 Neo4j 2025.01 及更高版本的变更。 |
|
在 2025.01 版本中,discovery service v1 已被移除。因此,在升级到任何 2025-2026 版本之前,您必须过渡到 v2。有关更多详细信息,请参阅《操作手册》→ 从发现服务 v1 迁移到 v2。此外,Neo4j 2025.01 及更高版本中将忽略 |
这是一个在不降低容错能力的情况下进行滚动升级的示例,通过在移除旧服务器之前添加新服务器来实现。此方法适用于使用可替换云资源或容器资源的部署。
准备工作
-
确保通过使用以下命令,在滚动升级期间无法停止、创建或删除数据库
DENY STOP ON DATABASE * TO PUBLIC DENY DATABASE MANAGEMENT ON DBMS TO PUBLIC -
验证所有数据库是否均已联机。有关详细信息,请参阅《操作手册》→ 启动数据库。
升级步骤(对每台服务器重复执行)
|
在进行下一台服务器之前,请为当前每台服务器完整执行这些步骤。在进行下一步之前,必须确保集群恢复到稳定状态。 |
-
检查集群健康状况。
-
在更换服务器之前,确保集群处于健康状态。使用以下查询检查服务器是否承载了其所有分配的数据库。该查询不应返回任何结果
SHOW SERVERS YIELD name, hosting, requestedHosting, serverId WHERE requestedHosting <> hosting复合数据库同时出现在
hosting和requestedHosting字段中。 -
使用以下查询来检查所有数据库是否处于预期状态。该查询应该返回无结果:
SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, statusMessage WHERE currentStatus <> requestedStatus RETURN name, address, currentStatus, requestedStatus, statusMessage
-
-
创建新服务器。
-
(从 Neo4j 5.26 LTS 迁移时建议执行)从 neo4j.conf 文件中删除
dbms.cluster.discovery.version,并将dbms.cluster.discovery.v2.endpoints替换为dbms.cluster.endpoints。 -
将新服务器添加到集群
-
启动新服务器并等待其在集群中可见。
-
使用
SHOW SERVERS查看新服务器,其状态应为Free。记下新服务器的 ID。 -
通过运行
ENABLE SERVER [new-server-id]将服务器添加到 DBMS。这允许 DBMS 使用该服务器来承载数据库。
-
-
准备移除服务器
-
运行
SHOW SERVERS以获取其中一台旧服务器的 ID。该服务器的状态必须为Available。 -
通过运行以下命令将所有数据库从旧服务器移出
DEALLOCATE DATABASES FROM SERVER [old-server-id] -
等待所有数据库完成去分配。您可以使用
SHOW SERVER WHERE name = [old-server-id]来跟踪进度。一旦数据库完成移动,hosting列将仅包含system,并且所有已去分配的数据库的state列将显示为DEALLOCATED。 -
通过运行以下命令验证所有已移动的数据库在其新主机上是否已联机
SHOW DATABASES
-
-
移除旧服务器
-
关闭旧服务器。
-
当进程停止时,通过运行
DROP SERVER [old-server-id]移除旧服务器。在进程停止之前,它在SHOW SERVERS中可能仍显示为Dropped。
-
-
(可选)如果您安装了任何插件,请确保它们与新版本兼容。
最新的 APOC 可在 /labs 下获取,而 GDS、Bloom、GenAI 和 NOM 可在 /products 下获取。目前,不兼容的 GDS 或 APOC 版本会导致 Neo4j 无法启动。
-
(可选)恢复
PUBLIC角色的停止数据库权限REVOKE DENY STOP ON DATABASE * FROM PUBLIC -
(可选)恢复
PUBLIC角色的创建和删除数据库权限REVOKE DENY DATABASE MANAGEMENT ON DBMS FROM PUBLIC -
(可选)如果您在滚动升级的准备阶段启动了离线数据库,则需要逐一停止它们以将其恢复到原始状态。
-
如果升级所有服务器后使用
LIST发现方法,请确保设置dbms.cluster.endpoints仅包含新服务器。