AWS 上的 Neo4j

通过使用 AWS Marketplace 中 Neo4j 企业版的官方列表,可以轻松在亚马逊云科技 (AWS) 的 EC2 实例上部署 Neo4j。

AWS Marketplace 列表使用由 Neo4j 维护的 CloudFormation 模板,该模板可以进行自定义,以满足更复杂或特定的使用场景。有关 Neo4j CloudFormation 模板的更多信息,请参阅 Neo4j CloudFormation 模板

Neo4j 不提供预装产品的亚马逊机器镜像 (AMI)。Neo4j AWS Marketplace 列表(以及 GitHub 上的列表)使用 CloudFormation 模板,通过 shell 脚本动态部署和配置 Neo4j。

支持的 Neo4j 版本

Neo4j AWS Marketplace 列表可配置为部署 Neo4j 企业版 2025.x 或 5.26 LTS。CloudFormation 模板始终安装最新可用版本。

Neo4j CloudFormation 模板

AWS CloudFormation 是一种基于 YAML 的声明式基础设施即代码 (IaC) 语言,用于指示 AWS 部署一组云资源。

Neo4j CloudFormation 模板的代码可在 GitHub 上获取。它接收多个参数作为输入,部署一组云资源,并提供可用于连接到 Neo4j DBMS 的输出。

重要注意事项

  • 部署云资源会产生费用。有关更多信息,请参考 AWS 定价计算器

  • Neo4j CloudFormation 模板会部署一个新的 VPC。

    • AWS 账户初始配额限制为 5 个 VPC(您可以在 Amazon EC2 控制台的限制页面查看当前配额)。

    • 如果需要,您可以联系 AWS 支持部门增加您的 VPC 配额。

  • Neo4j CloudFormation 模板使用 Auto Scaling 组 (ASG) 来部署 EC2 实例。这意味着要停止或终止 EC2 实例,您必须先将其从 ASG 中移除,否则 ASG 会自动重新创建它们。

  • SSH 密钥不会作为 CloudFormation 模板的一部分生成。如果需要,请使用 EC2 实例连接 (通过 EC2 控制台) 连接到部署的 EC2 实例。

输入参数

参数名称 描述 允许的值 默认值

AMI ID

用于启动 EC2 资源的 AMI。

ami-07f83a354c934b879

Neo4j 许可证类型

如果您已有 Neo4j 企业版许可证,请选择 Enterprise,否则请选择 Evaluation

EnterpriseEvaluation

Evaluation

安装图形数据科学 (GDS)

安装图形数据科学 (GDS) 的选项。

YesNo

False

图形数据科学许可证密钥

图形数据科学的许可证密钥(许可证密钥将发送至 Neo4j 并由其存储。此信息仅用于产品激活目的。)

None

安装 Bloom

安装 Neo4j Bloom。

YesNo

False

Bloom 许可证密钥

Bloom 的许可证密钥(许可证密钥将发送至 Neo4j 并由其存储。此信息仅用于产品激活目的。)

None

密码

neo4j 用户的密码(最少 8 个字符)。

节点数量

用于组成 Neo4j 集群的所需 EC2 实例数量(形成集群至少需要 3 个实例)。

1 到 10 之间

3

实例类型

EC2 实例类型。

  • t3.medium

  • t3.large

  • t3.xlarge

  • t3.2xlarge

  • r6i.large

  • r6i.xlarge

  • r6i.2xlarge

  • r6i.4xlarge

  • r6i.8xlarge

  • r6i.12xlarge

  • r6i.16xlarge

  • r6i.24xlarge

  • r6i.32xlarge

  • r6a.8xlarge

  • r7a.medium

  • r7a.large

  • r7a.xlarge

  • r7a.2xlarge

  • r7a.4xlarge

  • r7a.8xlarge

  • r7a.12xlarge

  • r7a.16xlarge

  • r7a.24xlarge

  • r7a.32xlarge

  • r7a.48xlarge

t3.medium

磁盘大小

每个 EC2 实例上 EBS 卷的大小(以 GB 为单位)。较大的 EBS 卷通常比小的更快,因此建议最小大小为 100GB。

最小值:100

100

SSH CIDR

指定可通过 SSH 在端口 22 访问 EC2 实例的地址范围。您可以使用 0.0.0.0/0 允许从任何 IP 地址进行访问。此字段还必须正确填充,以允许使用 EC2 实例连接。必须是形式为 x.x.x.x/x 的有效 CIDR 范围。

最小长度:9,最大长度:18,允许模式:1(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})

部署的云资源

CloudFormation 模板创建的环境包含以下 AWS 资源:

  • 1 个 VPC,CIDR 范围(地址空间)为 10.0.0.0/16

  • 3 个子网(如果选择了集群),均匀分布在 3 个可用区中,具有以下 CIDR 范围:

    • 10.0.1.0/24

    • 10.0.2.0/24

    • 10.0.3.0/24

  • 单个子网(如果选择了单个实例),CIDR 范围为 10.0.1.0/24

  • 一个内部和外部安全组。

  • 一个互联网网关。

  • 所有子网的路由表(及其关联)。

  • 安全组中的 Neo4j http 和 bolt 侦听器以及规则,以允许端口 74747687 上的入站流量。

  • 一个 Auto Scaling 组和启动配置,用于创建 1 个或 3 到 10 个 EC2 实例(取决于选择的是单个实例还是自动集群)。

  • 1 个网络 (第 4 层) 负载均衡器。

  • EC2 实例的目标组。

模板输出

安装成功完成后,CloudFormation 模板将提供以下输出,可以在 AWS 控制台 CloudFormation 页面的输出选项卡中找到。

输出名称 描述

Neo4jBrowserURL

Neo4j 浏览器的 http URL。

Neo4jURI

Neo4j 浏览器的 Bolt URL。

Neo4jUsername

用户名 neo4j,并提醒使用之前在填写 CloudFormation 模板时指定的密码。

AWS 上的 Neo4j 集群

集群版本一致性

当 CloudFormation 模板创建新的 Neo4j 集群时,会创建一个 Auto Scaling 组 (ASG) 并用安装的 Neo4j 数据库的月度版本进行标记。如果您向 ASG 添加更多 EC2 实例,它们将安装相同的月度版本,从而确保所有 Neo4j 集群服务器都安装了相同的版本,无论 EC2 实例是何时创建的。

Neo4j 集群和 Auto Scaling 组

Neo4j AWS CloudFormation 模板将集群部署到 ASG 中。然而,使用 ASG 管理 Neo4j 集群需要仔细规划。Neo4j 的集群依赖于稳定的服务器身份。相比之下,ASG 主要用于无状态、可互换的工作负载,这意味着它们可以随时终止并重新创建服务器,从而破坏其身份。

为了提供稳定的服务器身份,建议使用持久磁盘,例如 Amazon Elastic Block Store (EBS)。有关 EBS 卷的更多信息,请参阅 Amazon EBS 卷。Amazon EBS 提供可与 Amazon EC2 实例一起使用的块存储资源。

如果 Neo4j 集群中的服务器没有重新挂载其原始 EBS 卷,它将:

  • 在没有数据的情况下启动(存储副本问题)。

  • 无法正确重新加入集群。

    如何在具有 ASG 的 EC2 实例中运行 Neo4j 集群
    1. 创建 EBS 卷并对其进行标记。您可以按照指南 创建 Amazon EBS 卷中概述的步骤进行操作。

    2. 将 EBS 卷附加到同一可用区中的 Amazon EC2 实例。有关更多信息,请参阅 将 Amazon EBS 卷附加到 Amazon EC2 实例

    3. 确保稳定的卷重新挂载。使用实例启动脚本(通过 EC2 用户数据或 systemd 服务)来:

      1. 识别其自身的逻辑身份(例如通过私有 IP 或主机名)。

      2. 通过标签定位正确的 EBS 卷。

      3. 将卷附加到实例。

      4. 将卷挂载到 /var/lib/neo4j 或适当的数据目录。

    4. 仅使用滚动更新。在任何更新机制中设置 maxSurge = 0maxUnavailable = 1,以避免可能使集群不稳定的多次重启。

    5. 避免集群成员的自动修复。ASG 运行状况检查不应自动终止集群成员。对集群成员使用外部监控(例如 Prometheus、Neo4j 的运行状况检查)和人工干预。

从 Neo4j 集群中移除服务器

Amazon 机器镜像 (AMI) 的滚动更新通常涉及轮换镜像。但是,仅仅将 Neo4j 服务器从目标网络负载均衡器 (NLB) 中逐一移除并不能阻止请求被路由到它们。这是因为 NLB 和 Neo4j 服务器端路由独立运行,并且不共享关于服务器可用性的感知。

要正确地从集群中移除服务器并在更新后重新引入它,请按照以下概述的步骤操作:

  1. 将服务器从 AWS NLB 中移除。这可以防止外部客户端向该服务器发送请求。

  2. 由于 Neo4j 的集群路由(服务器端路由)不使用 NLB,因此您需要确保查询不会被路由到该服务器。为此,您必须干净地关闭服务器。

    1. 运行以下查询以检查服务器是否托管了其所有已分配的数据库。该查询应该返回无结果:

      SHOW SERVERS YIELD name, hosting, requestedHosting, serverId WHERE requestedHosting <> hosting
    2. 使用以下查询来检查所有数据库是否处于预期状态。该查询应该返回无结果:

      SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, statusMessage WHERE currentStatus <> requestedStatus RETURN name, address, currentStatus, requestedStatus, statusMessage
    3. 要停止 Neo4j 服务,请运行以下命令:

      sudo systemctl stop neo4j

      要配置在关闭前等待活动事务完成或被终止的超时时间,请修改 neo4j.conf 文件中的设置 db.shutdown_transaction_end_timeoutdb.shutdown_transaction_end_timeout 默认为 10 秒。

      环境变量 NEO4J_SHUTDOWN_TIMEOUT 决定了系统在强制终止进程之前等待 Neo4j 停止的时间。您可以使用 systemctl edit neo4j.service 更改此设置。默认情况下,NEO4J_SHUTDOWN_TIMEOUT 设置为 120 秒。如果关闭过程超过此限制,则视为失败。如果系统服务于长时间运行的事务,您可能需要增加该值。

    4. 通过检查 neo4j.log 中是否有确认关闭的相关日志消息,验证关闭过程是否已成功完成。

  3. 当所有内容都更新或修复后,再次逐一启动服务器。

    1. 运行 systemctl start neo4j

    2. 服务器重启后,确认其运行成功。

      运行以下命令并检查服务器状态是否为 Enabled,运行状况是否为 Available

      SHOW SERVERS WHERE name = [server-id];
    3. 确认服务器已启动所有应启动的数据库。

      此命令显示任何未处于预期状态的数据库:

      SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, serverID WHERE currentStatus <> requestedStatus AND serverID = [server-id] RETURN name, address, currentStatus, requestedStatus
  4. 将服务器重新附加到 NLB。一旦服务器稳定并赶上进度,将其添加回 AWS NLB 目标组。

许可

从 AWS Marketplace 安装并启动 Neo4j 即表示接受 Neo4j 许可协议。部署 Neo4j 时,用户需要确认他们拥有企业许可证或接受 Neo4j 评估许可证条款。

如果您需要图形数据科学或 Bloom 的企业版本,您需要提供由 Neo4j 颁发的密钥,因为这在安装期间是必需的。

要获取 Neo4j、Bloom 或 GDS 的有效许可证,请联系您的 Neo4j 客户代表或使用联系表格与我们联系。

删除 CloudFormation 堆栈并销毁资源

选择要删除的 CloudFormation 堆栈并单击删除按钮。堆栈删除将清理其部署的所有 AWS 资源。