集群的新服务器滚动升级

重要提示

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

在 Neo4j 5.23 版本中,发现服务 v1 (discovery service 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] 移除旧服务器。在进程停止前,它在 SHOW SERVERS 中可能仍显示为 Dropped

  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 数据库

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

CALL dbms.upgrade();

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

监控日志

当 Neo4j 重启时,建议监控日志以查看是否有由升级引起的错误或警告。neo4j.log 文件包含有关升级的信息。

© . This site is unofficial and not affiliated with Neo4j, Inc.