AWS 上的 Neo4j
通过使用 AWS Marketplace 上的 Neo4j 官方列表,可以轻松地将 Neo4j 部署到 Amazon Web Services (AWS) 中的 EC2 实例。
AWS Marketplace 列表使用由 Neo4j 维护的 CloudFormation 模板。该模板的代码可在 GitHub 上获取,并且可以根据更复杂或定制的用例进行自定义。
Neo4j 不提供预装了产品版本的 Amazon Machine Images (AMI)。Neo4j AWS Marketplace 列表(以及 GitHub 上的列表)使用 CloudFormation 模板,这些模板通过 shell 脚本动态部署和配置 Neo4j。 |
支持的 Neo4j 版本
Neo4j AWS marketplace 列表 可以配置为部署 Neo4j Enterprise Edition 5 或 4.4。CloudFormation 模板始终安装最新的可用版本。
Neo4j CloudFormation 模板
AWS CloudFormation 是一种基于 YAML 的声明式基础设施即代码 (IaC) 语言,它指示 AWS 部署一组云资源。Neo4j CloudFormation 模板仓库的 main
分支包含 Neo4j 5 的代码,Neo4j-4.4
分支包含 Neo4j 4.4 的代码。
Neo4j CloudFormation 模板接受多个参数作为输入,部署一组云资源,并提供可用于连接到 Neo4j DBMS 的输出。
重要注意事项
-
云资源的部署会产生费用。
-
有关更多信息,请参阅 AWS 定价计算器。
-
-
Neo4j CloudFormation 模板部署一个新的 VPC。
-
AWS 账户的初始 VPC 配额限制为 5 个(您可以通过查看 Amazon EC2 控制台的 限制 页面来查看当前的配额)。
-
如果需要,可以通过联系 AWS 支持来增加 VPC 配额。
-
-
Neo4j CloudFormation 模板使用自动扩缩组 (ASG) 来部署 EC2 实例。
-
这意味着要停止或终止 EC2 实例,您必须首先将它们从 ASG 中移除,否则 ASG 将自动替换它们。
-
-
SSH 密钥不作为 CloudFormation 模板的一部分生成。
-
如果需要,可以使用 EC2 实例连接(通过 EC2 控制台)连接到已部署的 EC2 实例。
-
输入参数
参数名称 | 描述 |
---|---|
堆栈名称 |
要部署的 CloudFormation 堆栈的名称,例如 |
安装图数据科学 |
安装图数据科学 (GDS) 的选项。可接受的值为 |
图数据科学许可证密钥 |
有效的 GDS 许可证密钥可以粘贴到此字段中。许可证密钥将发送给 Neo4j 并由其存储。此信息仅用于产品激活目的。 |
安装 Bloom |
可选安装 Neo4j Bloom。可接受的值为 |
Bloom 许可证密钥 |
有效的 Bloom 许可证密钥可以粘贴到此字段中。许可证密钥将发送给 Neo4j 并由其存储。此信息仅用于产品激活目的。 |
密码 |
|
服务器数量 |
指定用于形成 Neo4j 集群的所需 EC2 实例数量(至少需要 3 个实例才能形成集群)。 |
实例类型 |
要使用的 EC2 实例类别。 |
磁盘大小 |
每个 EC2 实例上的 EBS 卷大小(以 GB 为单位)。较大的 EBS 卷通常比小卷速度更快,因此建议最小大小为 100GB。 |
SSH CIDR |
指定可以通过 SSH 在端口 |
已部署的云资源
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
-
-
一个安全组。
-
一个互联网网关。
-
所有子网的路由表(及关联)。
-
-
一个自动扩缩组和启动配置,用于创建
-
1 到 10 个 EC2 实例(取决于选择的是单个实例还是自主集群,如果选择集群,则为 3 到 10 个)。
-
-
1 个网络 (Layer 4) 负载均衡器。
-
一个 EC2 实例的目标组。
-
AWS 上的 Neo4j 集群
集群版本一致性
当 CloudFormation 模板创建新的 Neo4j 集群时,会自动创建一个自动扩缩组 (ASG),并用已安装的 Neo4j 数据库的月度版本进行标记。如果您向 ASG 添加更多 EC2 实例,它们将安装相同的月度版本,确保所有 Neo4j 集群服务器都安装相同的版本,无论 EC2 实例何时创建。
Neo4j 集群与自动扩缩组
Neo4j AWS CloudFormation 模板将集群部署到 ASG 中。然而,使用 ASG 管理 Neo4j 集群需要仔细规划。从 5.x 系列开始,Neo4j 的集群依赖于稳定的服务器身份。相比之下,ASG 主要设计用于无状态、可互换的工作负载,这意味着它们可以随时终止和重新创建服务器,从而破坏其身份。
为了提供稳定的服务器身份,建议使用持久性磁盘,例如 Amazon Elastic Block Store (EBS)。有关 EBS 卷的更多信息,请参阅 Amazon EBS 卷。Amazon EBS 提供可与 Amazon EC2 实例配合使用的块存储资源。
如果 Neo4j 集群中的服务器没有重新挂载其原始 EBS 卷,它将:
-
以无数据状态启动(存储副本问题)。
-
未能正确重新加入集群。
- 如何在带有 ASG 的 EC2 实例中运行 Neo4j 集群
-
-
创建一个 EBS 卷并打上标签。您可以按照指南 创建 Amazon EBS 卷 中概述的步骤进行操作。
-
将 EBS 卷附加到同一可用区中的 Amazon EC2 实例。有关更多信息,请参阅 将 Amazon EBS 卷附加到 Amazon EC2 实例。
-
确保稳定的卷重新附加。使用实例启动脚本(通过 EC2 用户数据或
systemd
服务)来-
识别其自身的逻辑身份(例如,通过私有 IP 或主机名)。
-
通过标签定位正确的 EBS 卷。
-
将卷附加到实例。
-
将卷挂载到
/var/lib/neo4j
或适当的数据目录。
-
-
仅使用滚动更新。在任何更新机制中将
maxSurge = 0
和maxUnavailable = 1
,以避免多次重启可能导致集群不稳定。 -
避免集群成员自动修复。ASG 健康检查不应自动终止集群成员。对集群成员使用外部监控(例如 Prometheus、Neo4j 的健康检查)和手动干预。
-
从 Neo4j 集群中移除服务器
Amazon Machine Images (AMI) 上的滚动更新通常涉及轮换镜像。然而,简单地将 Neo4j 服务器逐个从目标网络负载均衡器 (NLB) 中移除,并不能阻止请求路由到它们。这是因为 NLB 和 Neo4j 服务器端路由独立运行,并且不共享服务器可用性的感知。
要正确地从集群中移除服务器并在更新后重新引入,请按照以下步骤操作
-
从 AWS NLB 中移除服务器。这可以防止外部客户端向服务器发送请求。
-
由于 Neo4j 的集群路由(服务器端路由)不使用 NLB,因此您需要确保查询不会路由到该服务器。为此,您必须干净地关闭服务器。
-
运行以下查询以检查服务器是否托管了所有分配的数据库。查询应返回空结果
SHOW SERVERS YIELD name, hosting, requestedHosting, serverId WHERE requestedHosting <> hosting
-
使用以下查询检查所有数据库是否处于预期状态。查询应返回空结果
SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, statusMessage WHERE currentStatus <> requestedStatus RETURN name, address, currentStatus, requestedStatus, statusMessage
-
要停止 Neo4j 服务,请运行以下命令
sudo systemctl stop neo4j
要配置等待活动事务完成或终止的超时时间(在关闭之前),请修改 neo4j.conf 文件中的设置
db.shutdown_transaction_end_timeout
。db.shutdown_transaction_end_timeout
默认为 10 秒。环境变量
NEO4J_SHUTDOWN_TIMEOUT
决定了系统在强制终止进程之前等待 Neo4j 停止的时间。您可以使用systemctl edit neo4j.service
更改此值。默认情况下,NEO4J_SHUTDOWN_TIMEOUT
设置为 120 秒。如果关闭过程超过此限制,则视为失败。如果系统处理长时间运行的事务,您可能需要增加此值。 -
通过检查 neo4j.log 中确认关闭的相关日志消息,验证关闭过程是否成功完成。
-
-
当所有内容都更新或修复后,再次逐一启动服务器。
-
运行
systemctl start neo4j
。 -
服务器重启后,确认其成功运行。
运行以下命令,检查服务器状态是否为
Enabled
,健康状况是否为Available
。SHOW SERVERS WHERE name = [server-id];
-
确认服务器已启动所有应启动的数据库。
此命令显示所有未处于预期状态的数据库
SHOW DATABASES YIELD name, address, currentStatus, requestedStatus, serverID WHERE currentStatus <> requestedStatus AND serverID = [server-id] RETURN name, address, currentStatus, requestedStatus
-
-
重新将服务器附加到 NLB。一旦服务器稳定并赶上进度,将其重新添加到 AWS NLB 目标组。
许可
从 AWS Marketplace 安装和启动 Neo4j 即表示接受 Neo4j 许可协议。部署 Neo4j 时,用户需要确认他们拥有企业许可证或接受 Neo4j 评估许可证的条款。
如果您需要 Graph Data Science 或 Bloom 的企业版本,您需要提供 Neo4j 颁发的密钥,因为这在安装过程中是必需的。
要获取 Neo4j、Bloom 或 GDS 的有效许可证,请联系您的 Neo4j 客户代表或使用 联系表 取得联系。