集群的新服务器滚动升级

重要提示

建议在继续之前阅读简介升级到 5.x 或 5 LTS

在 Neo4j 5.23 版本中,发现服务 v1 已弃用,并引入了发现服务 v2。在 2025.01 版本中,发现服务 v1 被移除。因此,强烈建议从 v1 迁移到 v2,并且必须在升级到 Neo4j 2025.01 之前完成。有关更多详细信息,请参阅操作手册 → 从发现服务 v1 迁移到 v2

这是一个在不降低容错能力的情况下进行滚动升级的示例,通过在移除旧服务器之前添加新服务器来实现。此方法适用于使用可替换云或容器资源的部署。

开始之前

  1. 使用以下命令确保在滚动升级期间数据库无法停止、创建或删除:

    DENY STOP ON DATABASE * TO PUBLIC
    DENY DATABASE MANAGEMENT ON DBMS TO PUBLIC
  2. 验证所有数据库均已在线。有关详细信息,请参阅操作手册 → 启动数据库

升级步骤(每个服务器重复执行)

在继续下一个服务器之前,请完整执行每个服务器的这些步骤。您必须确保集群恢复到稳定状态,然后才能继续下一个服务器。

  1. 检查集群是否健康。

    1. 在替换服务器之前,请确保集群处于健康状态。使用以下查询检查服务器是否托管了所有分配的数据库。该查询应不返回任何结果:

      SHOW SERVERS YIELD name, hosting, requestedHosting, serverId WHERE requestedHosting <> hosting

      在 5.9 版本之前,如果您有复合数据库,它们将不会出现在 requestedHosting 中,因此此查询将返回所有服务器。因此,您必须手动比较 hostingrequestedHosting 字段,排除任何复合数据库。从 5.10 版本开始,复合数据库同时出现在 hostingrequestedHosting 字段中。

    2. 使用以下查询检查所有数据库是否处于预期状态。该查询应不返回任何结果:

      SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, statusMessage WHERE currentStatus <> requestedStatus RETURN name, address, currentStatus, requestedStatus, statusMessage
  2. 创建新服务器。

  3. 将新服务器添加到集群

    1. 启动新服务器并等待它对集群可见。

    2. 使用 SHOW SERVERS 查看新服务器,其状态应为 Free。记下新服务器的 ID。

    3. 通过运行 ENABLE SERVER [new-server-id] 将服务器添加到 DBMS。这允许 DBMS 使用该服务器来托管数据库。

  4. 准备移除服务器

    1. 运行 SHOW SERVERS 检索其中一个旧服务器的 ID。服务器必须是 Available

    2. 通过运行以下命令将所有数据库从旧服务器中移出:

      DEALLOCATE DATABASES FROM SERVER [old-server-id]
    3. 等待所有数据库解除分配。您可以使用 SHOW SERVER WHERE name = [old-server-id] 来跟踪该过程。一旦数据库完成移动,hosting 列将只包含 system。从 5.15 版本开始,当所有数据库解除分配后,state 列将显示 DEALLOCATED

    4. 通过运行以下命令验证所有已移动的数据库在新主机上均已在线:

      SHOW DATABASES
  5. 移除旧服务器

    1. 关闭旧服务器。

    2. 当进程停止后,通过运行 DROP SERVER [old-server-id] 移除旧服务器。在进程停止之前,它可能仍显示为 DroppedSHOW SERVERS 中。

  6. (可选)如果您安装了任何插件,请确保它们与新版本兼容。

    最新的 APOC 可在 /labs 下获取,而 GDS、Bloom 和 NOM 可在 /products 下获取。目前,不兼容的 GDS 或 APOC 版本将阻止 Neo4j 启动。

  7. (可选)恢复 PUBLIC 角色停止数据库的权限

    REVOKE DENY STOP ON DATABASE * FROM PUBLIC
  8. (可选)恢复 PUBLIC 角色创建和删除数据库的权限

    REVOKE DENY DATABASE MANAGEMENT ON DBMS FROM PUBLIC
  9. (可选)如果您在滚动升级的准备阶段启动了离线数据库,您将需要停止每个数据库以将其恢复到原始状态。

  10. 如果使用 LIST 发现方法,在您升级所有服务器后,请务必将dbms.cluster.discovery.endpoints设置为只包含新服务器。

手动升级 system 数据库

如果您使用的是 Neo4j 5.8 或更早版本,您必须手动升级 system 数据库。连接到任何服务器上的 system 数据库并运行以下过程:

CALL dbms.upgrade();

从 5.9 版本开始,system 数据库在安全时会自动升级。

监控日志

Neo4j 重启后,最好监控日志中是否有因升级引起的任何错误或警告。neo4j.log 文件包含有关升级的信息。

© . All rights reserved.