Amazon Neptune 数据库集群和实例 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Neptune 数据库集群和实例

Amazon Neptune 数据库集群通过查询管理对您的数据的访问。集群包括:

  • 一个主数据库实例。

  • 最多 15 个只读副本数据库实例。

集群中的所有实例共享相同的底层托管存储卷,专为实现可靠性和高可用性而设计。

您可以通过 N eptune 终端节点连接到数据库集群中的数据库实例。

Neptune 数据库集群中的主数据库实例

主数据库实例协调对数据库集群底层存储卷的所有写入操作。它还支持读取操作。

Neptune 数据库集群中只能有一个主数据库实例。如果主实例不可用,Neptune 会自动故障转移到其中一个只读副本实例,优先级可由您指定。

Neptune 数据库集群中的只读副本数据库实例

在为数据库集群创建主实例后,您可以在数据库集群中创建最多 15 个只读副本实例,以支持只读查询。

Neptune 读取副本数据库实例十分适用于扩展读取容量,因为它们完全专用于集群卷上的读取操作。所有写入操作均由主实例进行管理。每个只读副本数据库实例都有自己的终端节点。

由于集群存储量在集群中的所有实例之间共享,因此所有只读副本实例都返回相同的数据以获取查询结果,几乎没有复制延迟。在主实例写入更新之后,此滞后通常远远少于主实例写入更新的 100 毫秒。

在不同的可用区提供一个或多个只读副本实例可以提高可用性,因为只读副本是主实例的故障转移目标。也就是说,如果主实例失败,Neptune 将只读副本实例提升为主实例。当这种情况发生时,在重启提升后的实例时,将造成短暂的中断,在此期间,对主实例发出的读写请求将失败。

相比之下,如果您的数据库集群不包含任何只读副本实例,则当主实例出现故障时,您的数据库集群将保持不可用状态,直到重新创建为止。重新创建主实例所花费的时间比提升只读副本要长得多。

为确保高可用性,我们建议您创建一个或多个只读副本实例,这些实例的数据库实例类与主实例具有相同且位于与主实例不同的可用区。请参阅Neptune 数据库集群的容错能力

使用控制台,您只需在创建数据库集群时指定多可用区,即可创建多可用区部署。如果数据库集群位于单个可用区中,则可将其设置为多可用区数据库集群,网址添加 Neptune 副本。

注意

您无法为未加密的 Neptune 数据库集群创建加密的只读副本实例,也无法为加密的 Neptune 数据库集群创建未加密的只读副本实例。

有关如何创建 Neptune 只读副本数据库实例的详细信息,请参阅 “”使用控制台创建 Neptune 副本

调整 Neptune 数据库集群中数据库实例的大小

根据您的 CPU 和内存要求调整 Neptune 数据库集群中的实例大小。实例上的 vCPUs 数量决定了处理传入查询的查询线程的数量。实例上的内存量决定了缓冲区缓存的大小,缓冲区缓存用于存储从底层存储卷提取的数据页的副本。

每个 Neptune 数据库实例的查询线程数等于该实例上 vCPUs 数量的 2 倍。例如r5.4xlarge,具有 16 个 vCPUs,有 32 个查询线程,因此可以同时处理 32 个查询。

在所有查询线程被占用时到达的其他查询将放入服务器端队列中,并在查询线程可用时以 FIFO 方式进行处理。这个服务器端队列可以容纳大约 8000 个待处理的请求。装满后,Neptune 会回应其他请求ThrottlingException。您可以使用MainRequestQueuePendingRequests CloudWatch 指标监控待处理请求的数量,也可以使用带有includeWaiting参数的 Gremlin 查询状态端点

从客户端角度来看,查询执行时间除实际执行查询所花费的时间外,还包括在队列中花费的任何时间。

理想情况下,利用主数据库实例上的所有查询线程的持续并发写入负载显示 90% 或更高的 CPU 利用率,这表明服务器上的所有查询线程都在积极从事有用的工作。但是,即使在持续的并发写入负载下,实际的 CPU 利用率通常也会稍低一些。这通常是因为查询线程正在等待底层存储卷的 I/O 操作完成。Neptune 使用法定写入来在三个可用区创建六个数据副本,这六个存储节点中有四个必须确认写入才能将其视为持久写入。当查询线程等待来自存储卷的这个法定人数时,它会停滞不前,这会降低 CPU 利用率。

如果您有串行写入负载,您正在执行一次又一次的写入,等待第一次写入完成,然后再开始下一次写入,则可以预期 CPU 利用率还会降低。确切的数量将是 vCPUs 和查询线程数量的函数(查询线程越多,每次查询的总 CPU 越少),等待 I/O 会导致一些减少。

有关如何最好地调整数据库实例的更多信息选择正确的 Neptune 数据库实例类型,有关每种实例类型的定价,请参阅 Neptune 定价页面

在 Neptune 中监控数据库实例性能

您可以使用 Neptune 中的 CloudWatch 指标来监控数据库实例的性能并跟踪客户端观察到的查询延迟。请参阅 CloudWatch 用于监视 Neptune 中的数据库实例性能