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

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

对 Amazon Keyspaces 中的一般错误进行故障排除

遇到一般错误? 以下介绍一些常见问题以及如何解决这些问题。

一般错误

您会遇到以下顶级异常之一,这些异常可能由于许多不同的原因而发生。

  • NoNodeAvailableException

  • NoHostAvailableException

  • AllNodesFailedException

这些异常是由客户端驱动程序生成的,可能发生在您建立控制连接或执行读/写/准备/执行/批处理请求时。

当您在建立控制连接时发生错误时,这表明您的应用程序中指定的所有联系点都无法访问。如果在执行读/写/准备/执行查询时出现错误,则表示该请求的所有重试次数都已用完。使用默认重试策略时,每次重试都是在不同的节点上尝试的。

如何将底层错误与顶级 Java 驱动程序异常区分开来

这些一般错误可能是由连接问题引起的,也可能是由执行读/写/准备/执行操作引起的。在分布式系统中,必须预料到会出现暂时故障,并且应通过重试请求来处理。遇到连接错误时,Java 驱动程序不会自动重试,因此建议在应用程序中建立驱动程序连接时实施重试策略。有关连接最佳实践的详细概述,请参阅客户端驱动程序与 Amazon Keyspaces(Apache Cassandra 兼容)的连接

默认情况下,Java 驱动程序将所有请求设置idempotence为 false,这意味着 Java 驱动程序不会自动重试失败的读/写/准备请求。idempotence要设置为true并告诉驱动程序重试失败的请求,您可以通过几种不同的方式执行此操作。以下是如何在 Java 应用程序中以编程方式为单个请求设置等性的示例。

Statement s = new SimpleStatement("SELECT * FROM my_table WHERE id = 1"); s.setIdempotent(true);

或者,您可以通过编程方式为整个 Java 应用程序设置默认的等性,如以下示例所示。

// Make all statements idempotent by default: cluster.getConfiguration().getQueryOptions().setDefaultIdempotence(true); //Set the default idempotency to true in your Cassandra configuration basic.request.default-idempotence = true

另一项建议是在应用程序级别创建重试策略。在这种情况下,应用程序需要 catch the NoNodeAvailableException 并重试请求。我们建议重试 10 次,指数退避从 10 毫秒开始,最长可达 100 毫秒,所有重试的总时间为 1 秒。

另一种选择是在建立 Github 上可用的 Java 驱动程序连接时应用 Amazon Keyspaces 指数重试策略。

使用默认重试策略时,请确认您已与多个节点建立了连接。您可以在 Amazon Keyspaces 中使用以下查询来执行此操作。

SELECT * FROM system.peers;

如果此查询的响应为空,则表示您正在使用 Amazon Keyspaces 的单个节点。如果您使用的是默认重试策略,则不会重试,因为默认重试总是发生在不同的节点上。要了解有关通过 VPC 终端节点建立连接的更多信息,请参阅如何在 Amazon Keyspaces 中通过 VPC 端点配置连接

有关演示如何使用 Datastax 4.x Cassandra 驱动程序与亚马逊密钥空间建立连接的 step-by-step 教程,请参阅。使用适用于 Apache Cassandra 的 4.x DataStax Java 驱动程序和 Sigv4 身份验证插件连接亚马逊密钥空间的tep-by-step 教程