集群的新服务器滚动升级
重要
建议在继续之前阅读简介和从 Neo4j 5 到 2025.x 的变更。 |
在 2025.01 版本中,发现服务 v1 已移除。因此,在升级到 Neo4j 2025.01 之前,您必须过渡到 v2。有关更多详细信息,请参阅操作手册 → 从发现服务 v1 迁移到 v2。此外, |
这是一个在不降低容错能力的情况下进行滚动升级的示例,通过在移除旧服务器之前添加新服务器。此方法适用于使用可替换云或容器资源的部署。
开始之前
-
通过使用以下命令,确保在滚动升级期间数据库无法停止、创建或删除。
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 迁移时推荐)在 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]
移除旧服务器。在进程停止之前,它可能仍会以Dropped
状态显示在SHOW SERVERS
中。
-
-
(可选)如果您安装了任何插件,请确保它们与新版本兼容。
最新的 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
设置为只包含新服务器。
监控日志
当 Neo4j 重启时,最好监控日志以查找升级引起的任何错误或警告。neo4j.log 文件包含有关升级的信息。