集群的新服务器滚动升级
开始之前
-
使用以下命令确保在滚动升级期间无法停止、创建或删除数据库
DENY STOP ON DATABASE * TO PUBLIC DENY DATABASE MANAGEMENT ON DBMS TO PUBLIC
-
验证所有数据库都处于联机状态。有关详细信息,请参阅操作手册→启动数据库。
升级步骤(每个服务器重复执行)
在继续下一个服务器之前,请完整执行每个服务器的这些步骤。您必须确保集群在继续下一个步骤之前恢复到稳定状态。 |
-
检查集群是否健康。
-
在替换服务器之前,请确保集群处于健康状态。使用以下查询检查服务器是否托管其所有分配的数据库。查询应返回无结果
SHOW SERVERS YIELD name, hosting, requestedHosting, serverId WHERE requestedHosting <> hosting
在 5.9 版之前,如果您有复合数据库,它们将不会出现在
requestedHosting
中,因此此查询将返回所有服务器。因此,您必须手动比较hosting
和requestedHosting
字段,不包括任何复合数据库。从 5.10 版开始,复合数据库出现在hosting
和requestedHosting
字段中。 -
使用以下查询检查所有数据库是否都处于其预期状态。查询应返回无结果
SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, statusMessage WHERE currentStatus <> requestedStatus RETURN name, address, currentStatus, requestedStatus, statusMessage
-
-
创建新服务器。
-
将新服务器添加到集群
-
启动新服务器并等待它对集群可见。
-
使用
SHOW SERVERS
查看新服务器,其状态应为Free
。记下新服务器的 ID。 -
通过运行
ENABLE SERVER [new-server-id]
将服务器添加到 DBMS。这允许 DBMS 使用服务器托管数据库。
-
-
准备删除服务器
-
运行
SHOW SERVERS
以检索其中一台旧服务器的 ID。服务器必须为Available
。 -
通过运行以下命令将所有数据库从旧服务器移出
DEALLOCATE DATABASES FROM SERVER [old-server-id]
-
等待所有数据库取消分配。您可以使用
SHOW SERVER [old-server-id]
来跟踪此过程。一旦数据库完成移动,hosting
列将仅包含system
。从 5.15 版开始,当所有数据库都被取消分配时,state
列将显示DEALLOCATED
。 -
通过运行以下命令验证所有已移动的数据库在其新主机上是否联机
SHOW DATABASES
-
-
删除旧服务器
-
关闭旧服务器。
-
当进程停止后,通过运行
DROP SERVER [old-server-id]
删除旧服务器。在进程停止之前,它可能仍显示为Dropped
在SHOW SERVERS
中。
-
-
(可选) 如果您已安装任何插件,请确保它们与新版本兼容。
最新的 APOC 可在/labs 下获得,而 GDS、Bloom 和 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.discovery.endpoints
设置为仅包含新服务器。
手动升级 system
数据库
如果您使用的是 5.8 或更早版本的 Neo4j,则必须手动升级 system
数据库。连接到任何服务器上的 system
数据库并运行以下过程
CALL dbms.upgrade();
从 5.9 版开始, |
监控日志
Neo4j 重启时,最好监控日志以查找升级导致的任何错误或警告。 neo4j.log 文件包含有关升级的信息。