Amazon Keyspaces 中的容量管理故障排除 - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Keyspaces 中的容量管理故障排除

在使用无服务器容量时遇到问题? 以下介绍一些常见问题以及如何解决这些问题。

无服务器容量错误

本节简要介绍如何识别与无服务器容量管理相关的错误以及如何解决这些错误。例如,如果您的应用程序超出了预置的吞吐能力,则可能会发现容量不足事件。

由于 Apache Cassandra 是基于集群的软件,专为在节点队列上运行而设计,因此它没有与无服务器功能(例如吞吐能力)相关的异常消息。大多数驱动程序只能理解 Apache Cassandra 中的错误代码,因此 Amazon Keyspaces 使用相同的错误代码集来保持兼容性。

要将 Cassandra 错误映射到底层容量事件,您可以使用亚马逊 CloudWatch 监控相关的 Amazon Keyspaces 指标。导致客户端出错的容量不足事件可根据引起事件的资源分为三类:

  • - 如果您为表选择预配置容量模式,并且您的应用程序超出了预配置的吞吐量,则可能会出现容量不足错误。有关更多信息,请参阅 Amazon Keyspaces 中的读/写容量模式

  • 分区 - 如果给定分区的流量超出 3000 RCU 或 1000 WCU,将出现容量不足事件。我们建议最佳做法是在分区之间均匀分配流量。有关更多信息,请参阅Amazon Keyspaces(Apache Cassandra 兼容)中的数据建模

  • 连接 - 如果超过每个连接每秒最大操作次数的限额,可能会出现吞吐量不足的问题。要提高吞吐量,可以在配置与驱动程序的连接时增加默认连接的数量。有关更多信息,请参阅 CQL 查询吞吐量调整负载均衡

要确定是哪个资源导致了返回客户端错误的容量不足事件,可以检查 Amazon Keyspaces 控制台中的控制面板。默认情况下,控制台在该表的 “容量” 选项卡的 “容量和相关 CloudWatch 指标” 部分中提供最常见容量和流量相关指标的汇总视图。

要使用亚马逊创建自己的控制面板 CloudWatch,请查看以下 Amazon Keyspaces 指标。

  • PerConnectionRequestRateExceeded – 向 Amazon Keyspaces 发出的超出了每个连接请求速率的限额。与 Amazon Keyspaces 的每个客户端连接每秒最多可支持 3000 个 CQL 请求。通过创建多个连接,每秒可以执行超过 3000 个请求。

  • ReadThrottleEvents – 对 Amazon Keyspaces 的请求超过了表的读取容量。

  • StoragePartitionThroughputCapacityExceeded — 对 Amazon Keyspaces 存储分区的请求超过了该分区的吞吐能力。Amazon Keyspaces 存储分区每秒最多可支持 1000 个 WCU/WRU,每秒最多可支持 3000 个 RCU/RRU。为减少这些异常情况,我们建议您重新审视数据模型,将读/写流量分配到更多分区。

  • WriteThrottleEvents – 对 Amazon Keyspaces 的请求超过了表的写入容量。

要了解更多信息 CloudWatch,请参阅使用亚马逊监控亚马逊密钥空间 CloudWatch。有关 Amazon Keyspaces 的所有可用 CloudWatch 指标的列表,请参阅。Amazon Keyspaces 指标与维度

我从客户端驱动程序接收到 NoHostAvailable 容量不足的错误

您看到某个表出现 Read_TimeoutWrite_Timeout 异常。

重复尝试向容量不足的 Amazon Keyspaces 表写入或读取数据,可能会导致特定于驱动程序的客户端错误。

CloudWatch 用于监控您的预配置吞吐量和实际吞吐量指标,以及表的容量不足事件。例如,读取请求如果没有足够的吞吐容量,就会出现 Read_Timeout 异常,并发布到 ReadThrottleEvents 指标。写入请求如果没有足够的吞吐容量,就会出现 Write_Timeout 异常,并发布到 WriteThrottleEvents 指标。有关这些指标的更多信息,请参阅 Amazon Keyspaces 指标与维度

请考虑使用以下选项之一来解决这些问题:

如果您需要增加账户的默认容量限额,请参阅 Amazon Keyspaces(Apache Cassandra 兼容)限额

您看到与超出分区容量相关的错误。

当临时超出分区容量时,可能会发生分区节流(可能会由自适应容量或按需容量自动处理)。此错误也可能表明您的数据模型存在问题。Amazon Keyspaces 存储分区每秒最多可支持 1000 个 WCU/WRU,每秒最多可支持 3000 个 RCU/RRU。要了解如何改进数据模型以在更多分区之间分布读写流量,请参阅Amazon Keyspaces(Apache Cassandra 兼容)中的数据建模

Write_Timeout 异常也可能是由于在同一逻辑分区中包含静态和非静态数据的并发写入操作速率过高造成的。如果预计流量会在同一逻辑分区中运行多个包含静态和非静态数据的并发写入操作,我们建议将静态和非静态数据分别写入。分别写入数据还有助于优化吞吐量成本。

您看到与超出连接请求速率相关的错误。

连接节流可能由以下原因造成。

  • 您可能没有为每个会话配置足够的连接。

  • 由于没有正确配置 VPC 端点权限,获得的连接可能少于可用的对等节点。有关 VPC 端点策略的更多信息,请参阅将接口 VPC 端点用于 Amazon Keyspaces

  • 如果使用的是 4.x 驱动程序,请检查是否启用了主机名验证。默认情况下,该驱动程序启用 TLS 主机名验证。此配置会导致 Amazon Keyspaces 在驱动程序中显示为单节点集群。我们建议您关闭主机名验证。

我们建议您遵循以下最佳实践,以确保优化连接和吞吐量:

  • 配置 CQL 查询吞吐量调整。

    Amazon Keyspace 支持每个 TCP 连接每秒最多 3,000 次 CQL 查询,但对驱动程序可建立的连接数没有限制。

    大多数开源 Cassandra 驱动程序都会建立一个连接到 Cassandra 的连接池,并在该连接池上对查询进行负载均衡。Amazon Keyspaces 向驱动程序公开 9 个对等 IP 地址。大多数驱动程序的默认行为是为每个对等 IP 地址建立一个连接。因此,使用默认设置的驱动程序的最大 CQL 查询吞吐量将是每秒 27,000 次 CQL 查询。

    要增大此数字,我们建议增加驱动程序在其连接池中维护的每个 IP 地址的连接数。例如,如果将每个 IP 地址的最大连接数设置为 2,则将使驱动程序的最大吞吐量增加一倍,达到每秒 54,000 次 CQL 查询。

  • 优化您的单节点连接。

    默认情况下,大多数开源 Cassandra 驱动程序在建立会话时会与 system.peers 表中公布的每个 IP 地址建立一个或多个连接。但是,某些配置可能会导致驱动程序连接到单个 Amazon Keyspaces IP 地址。如果驱动程序尝试对对等节点(例如 DataStax Java 驱动程序)进行 SSL 主机名验证,或者通过 VPC 终端节点进行连接,则可能会发生这种情况。

    要获得与连接到多个 IP 地址的驱动程序相同的可用性和性能,建议您执行以下操作:

    • 根据所需的客户端吞吐量,将每个 IP 的连接数增加到 9 或更高。

    • 创建自定义重试策略,确保针对同一个节点运行重试。

    • 如果使用 VPC 端点,请向用于连接 Amazon Keyspaces 的 IAM 实体授予访问权限,以查询您的 VPC 的端点和网络接口信息。这样可以改善负载均衡并提高读/写吞吐量。有关更多信息,请参阅使用接口 VPC 端点信息填充 system.peers 表条目

我在数据导入期间收到写入超时错误

使用 cqlsh COPY 命令上传数据时,您收到超时错误。

Failed to import 1 rows: WriteTimeout - Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'write_type': 'SIMPLE', 'consistency': 'LOCAL_QUORUM'}, will retry later, attempt 1 of 100

Amazon Keyspaces 使用 ReadTimeoutWriteTimeout 异常指示写入请求何时因吞吐容量不足而失败。为了帮助诊断容量不足异常,Amazon Keyspaces 在亚马逊上发布了以下指标。 CloudWatch

  • WriteThrottleEvents

  • ReadThrottledEvents

  • StoragePartitionThroughputCapacityExceeded

要解决数据加载期间容量不足的错误,请降低每个工作线程的写入速率或总摄取速率,然后重试上传各行。有关更多信息,请参阅步骤 4:配置 cqlsh COPY FROM 设置。要获得更强大的数据上传选项,可以考虑使用GitHub 存储库中提供的 DSBulk。有关 step-by-step说明,请参阅教程:使用 DSBulk 将数据加载到 Amazon Keyspaces

我看不到键空间或表的实际存储大小

您看不到键空间或表的实际存储大小。

您可以通过计算表中的行大小来估算存储大小。有关计算行大小的详细说明,请参阅计算 Amazon Keyspaces 中的行大小