将 Causal Cluster(因果集群)升级到 4.x 补丁版本

本节介绍了如何将 Neo4j 集群升级到同一 MAJOR(主)和 MINOR(次)版本内的更新 PATCH(补丁)版本。

您可以执行滚动升级或离线升级来升级现有的 Neo4j 因果集群。

每个集群成员都必须完成先决条件和升级步骤。

从较早的补丁版本升级时,您可能还需要升级 system 数据库。请使用 call dbms.upgradeStatus 检查是否必要,或者参阅 升级系统数据库 以获取更多信息。

离线升级

此变体适用于无法进行滚动升级的情况。

建议在生产环境的模拟环境中进行测试升级,以了解停机时间。

先决条件

确保您已针对每个集群成员完成了 升级检查清单 中的所有任务。

准备升级

  1. 关闭所有集群成员(Core 和 Read Replica)。

  2. 在每个集群成员上执行 neo4j-admin unbind 以移除集群状态数据。

  3. 在每个实例上安装您要升级到的 Neo4j 版本。有关如何安装所用发行版的更多信息,请参阅您要安装版本的 操作手册 → 安装 部分。

  4. 用您在 准备供新安装使用的 neo4j.conf 文件 一节中为每个实例准备好的文件替换 neo4j.conf 文件。

  5. 复制所有用于加密的文件,例如私钥、公有证书,以及受信任和已吊销目录的内容(位于 <NEO4J_HOME>/certificates/ 中)。

  6. 根据您的备份方法,使用 neo4j-admin restore(在线)或 neo4j-admin load(离线),在每个集群成员上恢复您备份的数据库和事务(包括 system 数据库)。如果您运行的是 Debian/RPM 发行版,则可以跳过此步骤。

    如果您的旧安装修改了以 dbms.directories.* 开头的配置或 dbms.default_database 设置,请验证新的 neo4j.conf 文件配置是否正确,以确保能够找到这些目录。

升级您的集群

  1. 通过在 <NEO4J_HOME> 中运行以下命令来启动 Neo4j

    bin/neo4j start

    升级在启动过程中进行。

  2. 监视 neo4j.log 文件,了解升级涉及的步骤数量及其进度。有关信息,请参阅 neo4j.log

  3. 验证集群是否已形成,以及升级后的 Neo4j DBMS 部署是否上线。

  4. 启动每个只读副本(Read Replica)并等待其与集群中的其余成员同步。

  5. 验证 Read Replica 是否加入了集群。

升级后操作

建议使用空的目标目录执行全量备份

滚动升级

滚动升级是一种无需停机即可升级因果集群的方法。您一次升级一个成员,而其余成员保持运行。但是,如果滚动升级期间集群失去仲裁且无法恢复,则可能需要停机进行灾难恢复。

建议
  • 升级过程中的关键点是确定何时可以安全地关闭原始成员。
    强烈建议在每次移除前监视 状态端点,以决定关闭哪个成员以及何时关闭是安全的。

  • 为降低滚动升级期间出现故障的风险,请确保集群在升级期间没有处于繁重负载下。如果可能,最安全的方法是完全禁用写入。

  • 滚动升级期间,数据库管理不应有任何更改。有关更多信息,请参阅 操作手册 → 管理数据库

针对固定数量服务器的滚动升级

此变体适用于服务器数量固定且必须原地更新的部署。

在执行固定数量服务器的滚动升级时,无法增加集群规模。因此,在替换成员时,集群的容错级别会降低。

先决条件

  1. 确保您已针对每个集群成员完成了 升级检查清单 中的所有任务。

  2. 通过在 Cypher® Shell 或 Neo4j Browser 中运行 SHOW DATABASES 来验证 **所有数据库是否均已在线**。离线数据库可以使用 START DATABASE [数据库名称] 启动。

    在开始滚动升级之前,必须启动所有数据库。如果您必须在滚动升级期间保持某个数据库不可访问,可以通过以下方式之一禁用对它的访问:

    切勿运行 DENY ACCESS ON DATABASE system TO PUBLICDENY ACCESS ON DATABASE * TO PUBLIC,因为这会将您自己锁定在 system 数据库之外。如果您确实把自己锁在了外面,请按照操作手册中的 禁用身份验证 步骤进行恢复,并防止外部访问该实例或集群。

    对于 4.0 版本内的 PATCH 升级
    1. 拒绝除 system 数据库之外的每个数据库的所有角色访问权限。您可以使用 SHOW ROLES 查询所有可用角色。

      DENY ACCESS ON DATABASE [database-name] TO [role1],[role2]
    2. 确保数据库在滚动升级期间不会被停止,请使用以下命令:

      DENY STOP ON DATABASE * TO admin

      这必须针对 admin 角色以及所有其他有权停止数据库的角色执行。有关列出权限的更多信息,请参阅 Cypher 手册 → 管理权限

    对于 4.x 版本内的 PATCH 升级:
    1. 拒绝 PUBLIC 角色对除 system 数据库之外的每个数据库的访问权限。

      DENY ACCESS ON DATABASE [database-name] TO PUBLIC
    2. 确保通过使用以下命令,在滚动升级期间无法停止、创建或删除数据库

      DENY STOP ON DATABASE * TO PUBLIC
      DENY DATABASE MANAGEMENT ON DBMS TO PUBLIC

升级集群

一次升级一个集群成员,而其余成员保持运行。

如果滚动升级期间集群丢失法定人数(quorum)且无法恢复,则可能需要停机进行灾难恢复。

对于每个集群成员
  1. (建议)使用 状态端点 中描述的流程来评估移除旧实例是否安全。

  2. 关闭该实例。

  3. 安装您要升级到的 Neo4j 版本。有关如何安装所用发行版的更多信息,请参阅您要安装版本的 操作手册 → 安装 部分。

  4. 用您在 准备供新安装使用的 neo4j.conf 文件 一节中为此实例准备好的文件替换 neo4j.conf 文件。

  5. 启动新实例并等待它追赶上集群中的其余成员。

  6. 使用 状态端点 验证新实例是否已成功加入集群并与其余成员同步。

由于 Read Replica 不属于集群共识组,因此在升级期间替换它们不会影响集群可用性和容错级别。不过,仍建议逐步添加 Read Replica,以获得结构化且易于维护的升级过程。

升级后步骤

滚动升级后必须执行以下步骤。

对于 4.0 版本内的 PATCH 升级
  1. 恢复 admin 角色停止数据库的权限。

    REVOKE DENY STOP ON DATABASE * FROM admin

    这必须针对所有已被拒绝停止数据库权限的角色执行(请参阅 针对固定数量服务器的滚动升级 的第 6 步)。有关列出权限的更多信息,请参阅 Cypher 手册 4.0 → 图和子图访问控制

  2. (可选)如果您在滚动升级的准备阶段启动了离线数据库并拒绝了一些访问权限,则也应将它们恢复到原始状态。

    1. 运行以下命令停止每个数据库:

      STOP DATABASE [database-name]
    2. 运行以下命令重新启用对数据库的访问:

      REVOKE DENY ACCESS ON DATABASE [database-name] FROM [role1],[role2]
对于 4.x 版本内的 PATCH 升级
  1. 恢复 PUBLIC 角色的停止数据库权限

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

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

    STOP DATABASE [database-name]

针对云基础设施的滚动升级

此变体适用于使用可替换云资源或容器资源的部署。它遵循与 固定数量服务器 相同的步骤,但 **您可以在关闭旧成员之前添加新成员**,从而保持集群的容错级别。由于只读副本不属于集群共识组,因此在升级期间替换它们不会影响集群的可用性和容错级别。不过,仍建议增量添加只读副本,以实现结构化且可维护的升级流程。

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