部署最佳实践

在 Kubernetes 环境中将 Neo4j 投入生产的推荐实践
本材料仅涵盖在 Kubernetes 中运行 Neo4j 的具体细节。Neo4j 的其他最佳实践同样适用,并应予以参考。

使用最佳可用存储

这包含两部分: * 为你的持久卷声明选择最高的 storageClass,最好是固态硬盘 * 使用大容量磁盘(可能比你实际需要的更大)以确保获得高 IOPS/吞吐量

在云环境中,小容量磁盘通常吞吐量较低。Neo4j 的性能对存储层的性能非常敏感,因此请确保你使用的是尽可能快的磁盘。

设置 CPU 与内存请求和限制

在生产部署之前,你应该对 Neo4j 工作负载进行规划,以便提前知晓所需的 CPU 和内存。确保你的 CPU 请求和限制都已设置,并且它们是相同的,以防止使用 Kubernetes 资源“突发”,并确保数据库具有一套一致的可用资源。

特别是,避免内存请求和限制之间存在巨大差异。在某些情况下,这可能导致 Kubernetes 在工作节点面临内存压力时杀死你的 Pod。

使用 ConfigMap 进行显式配置

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

使用反亲和性规则

遵循本手册中提供的示例,定义反亲和性规则,将你的 Neo4j 集群成员分布在不同的工作节点上。这适用于 Causal Cluster,有助于确保你的 Neo4j 部署具备高可用性,因为即使底层的 Kubernetes 工作节点发生故障,集群仍将继续运行。

通过备份和恢复来支持你的 Pod

我们强烈建议你使用某种形式的定期计划备份(此仓库中提供了示例),并且所有新 Pod 都应从上次备份中恢复启动。这提供了许多好处:

  • 一致的定期备份是基本的最佳实践

  • 故障期间更快的恢复

  • 即使集群出现问题也能确保数据安全

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

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

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

© . All rights reserved.