部署最佳实践

将 Neo4j 移至 Kubernetes 环境中的生产环境的推荐做法。
本材料仅涵盖运行 Neo4j 的 Kubernetes 特定内容。其他 Neo4j 最佳实践也适用,应予以参考。

使用可用的最佳存储

这分为两部分:* 您的持久卷声明的最高 storageClass,理想情况下为固态磁盘 * 大磁盘(可能大于您需要的大小)以确保您获得高 IOPS/吞吐量

在云环境中,小磁盘通常获得较低的吞吐量。Neo4j 性能对存储层的性能非常敏感,因此请确保您拥有尽可能快的磁盘。

设置 CPU 和内存请求和限制

在生产部署之前,您应该调整 Neo4j 工作负载的大小,以便可以提前知道所需的 CPU 和内存。确保设置了您的 CPU 请求和限制,并且它们相同,以防止使用 Kubernetes 资源“突增”,并确保数据库拥有稳定的一组可用资源。

特别是,**避免内存请求和限制之间存在较大差异**。在某些情况下,当工作节点承受内存压力时,这会导致 Kubernetes 终止您的 Pod。

使用 ConfigMap 进行显式配置

通过使用外部 ConfigMap 配置 Neo4j,您可以明确数据库配置的任何方面,之后可以使用 Kubernetes 内置工具对其进行版本控制和更改。

使用反亲和规则

按照本手册中提供的示例,定义反亲和规则以将 Neo4j 集群成员分散到工作节点中。这适用于因果集群,并有助于确保您的 Neo4j 部署具有高可用性,因为即使底层 Kubernetes 工作节点发生故障,集群也将继续运行。

使用备份和恢复来前端您的 Pod

我们强烈建议您以某种形式定期进行计划备份(本存储库中提供了示例),并且所有新 Pod 都应从上次备份开始恢复。这提供了许多好处

  • 持续计划备份是一项基本的最佳实践

  • 故障期间恢复速度更快

  • 即使集群遇到问题,也能确保数据安全

  • 新机器的启动时间更快,因为它们需要赶上的状态更少

  • 如果需要,更容易通过添加新的只读副本进行扩展

  • 核心成员的负载更低,因为它们不需要将数据库状态复制到“从冷启动”的新集群成员