

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

# 常见故障排除步骤和最佳实践 ElastiCache
<a name="wwe-troubleshooting"></a>

以下主题针对您在使用时可能遇到的错误和问题提供了疑难解答建议 ElastiCache。如果您发现某个问题未在此处列出，可以使用此页上的反馈按钮来报告。

有关更多故障排除建议和常见支持问题的答案，请访问 [Amazon知识中心](https://www.amazonaws.cn/premiumsupport/knowledge-center/)

**Topics**
+ [连接问题](#wwe-troubleshooting.connection)
+ [Valkey 或 Redis OSS 客户端错误](#wwe-troubleshooting.clienterrors)
+ [对 ElastiCache 无服务器中的高延迟进行故障排除](#wwe-troubleshooting.latency)
+ [对无服务器中的限制问题进行故障排除 ElastiCache](#wwe-troubleshooting.throttling)
+ [持续连接问题](TroubleshootingConnections.md)
+ [相关主题](#wwe-troubleshooting.related)

## 连接问题
<a name="wwe-troubleshooting.connection"></a>

如果您无法连接到 ElastiCache 缓存，请考虑以下方法之一：

1. **使用 TLS：**如果您在尝试连接到 ElastiCache 终端节点时遇到连接挂起的情况，则可能没有在客户端中使用 TLS。如果您使用的是 ElastiCache 无服务器，则传输中的加密始终处于启用状态。请确保您的客户端使用 TLS 连接到缓存。[了解有关连接到启用了 TLS 的缓存的更多信息](connect-tls.md)。

1. **VP ElastiCache C：**只能从 VPC 内部访问缓存。确保您访问缓存的 EC2 实例和缓存是在同一 VPC 中创建的。 ElastiCache 或者，您必须在您的 EC2 实例所在的 [V](https://docs.amazonaws.cn/vpc/latest/peering/what-is-vpc-peering.html) PC 和创建缓存的 VPC 之间启用 VPC 对等关系。

1. **安全组：**ElastiCache 使用安全组来控制对缓存的访问权限。请考虑以下事项：

   1. 确保您的 ElastiCache 缓存使用的安全组允许从您的 EC2 实例对其进行入站访问。请参阅[此处](https://docs.amazonaws.cn/vpc/latest/userguide/security-group-rules.html)，了解如何在安全组中正确设置入站规则。

   1. 确保缓存使用的安全组允许访问 ElastiCache 缓存的端口（无服务器端口 6379 和 6380，基于节点的集群默认为 6379 和 6379）。 ElastiCache 使用这些端口接受 Valkey 或 Redis OSS 命令。点击[此处](set-up.md#elasticache-install-grant-access-VPN)详细了解如何设置端口访问权限。

如果连接仍然有问题，请参阅[持续连接问题](TroubleshootingConnections.md)了解其他步骤。

## Valkey 或 Redis OSS 客户端错误
<a name="wwe-troubleshooting.clienterrors"></a>

ElastiCache 只有使用支持 Valkey 或 Redis OSS 集群模式协议的客户端才能访问无服务器。基于节点的集群可通过客户端以任一模式访问，具体取决于集群配置。

如果您在客户端中遇到错误，请考虑以下事项：

1. **集群模式：**如果您在使用 SE [LE](https://valkey.io/commands/select/) CT 命令时遇到 CROSSLOT 错误或错误，则可能正在尝试使用不支持集群协议的 Valkey 或 Redis OSS 客户端访问启用集群模式的缓存。 ElastiCache Serverless 仅支持支持 Valkey 或 Redis OSS 集群协议的客户端。如果您想使用“已禁用集群模式”（CMD）的 Valkey 或 Redis OSS，则必须创建基于节点的集群。

1. **CROSSLOT 错误：**如果遇到 `ERR CROSSLOT Keys in request don't hash to the same slot` 错误，可能是因为您正在尝试访问不属于集群模式缓存中同一槽的键。提醒一下， ElastiCache Serverless 始终在集群模式下运行。仅当涉及的所有键都在同一个哈希槽中时，才允许使用涉及多个键的多键操作、事务或 Lua 脚本。

有关配置 Valkey 或 Redis OSS 客户端的其他最佳实践，请查看本[博客文章](https://www.amazonaws.cn/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/)。

## 对 ElastiCache 无服务器中的高延迟进行故障排除
<a name="wwe-troubleshooting.latency"></a>

如果您的工作负载出现高延迟，则可以分析 CloudWatch `SuccessfulReadRequestLatency`和`SuccessfulWriteRequestLatency`指标，以检查延迟是否与 ElastiCache 无服务器有关。这些指标衡量的是 ElastiCache 无服务器内部的延迟，不包括客户端延迟以及您的客户端和 ElastiCache 无服务器端点之间的网络访问时间。

**对客户端延迟进行故障排除**

如果您注意到客户端的延迟时间有所增加，但没有相应的增加``CloudWatch `SuccessfulReadRequestLatency`以及衡量服务器端延迟的`SuccessfulWriteRequestLatency`指标，请考虑以下几点：
+ **确保安全组允许访问端口 6379 和 6380：** ElastiCache Serverless 使用 6379 端口作为主端点，6380 端口作为读取器端点。某些客户端会为每个新连接建立与这两个端口的连接，即使您的应用程序没有使用“从副本读取”功能也是如此。如果您的安全组不允许对这两个端口进行入站访问，那么建立连接可能需要更长的时间。点击[此处](set-up.md#elasticache-install-grant-access-VPN)详细了解如何设置端口访问权限。

**对服务器端延迟进行故障排除**

一些变化和偶尔的峰值不用担心 但是，如果`Average`统计数据显示急剧增长并持续存在，则应查看和您的 Personal Health Dashboard 以获取更多信息。Amazon Health Dashboard如有必要，可以考虑向提出支持案例Amazon Web Services 支持。

考虑采用以下最佳实践和策略来减少延迟：
+ **启用从副本读取：**如果您的应用程序允许，我们建议您在 Valkey 或 Redis OSS 客户端中启用“从副本读取”功能，以扩展读取并降低延迟。启用后， ElastiCache Serverless 会尝试将您的读取请求路由到与您的客户端位于同一可用区 (AZ) 的副本缓存节点，从而避免跨可用区网络延迟。请注意，在客户端启用“从副本读取”功能意味着您的应用程序接受数据的最终一致性。如果在写入键后尝试读取，您的应用程序可能会在一段时间内收到较旧的数据。
+ **确保您的应用程序部署在与缓存 AZs 相同的环境中：如果您的**应用程序部署在与缓存 AZs 相同的环境中，您可能会观察到更高的客户端延迟。创建无服务器缓存时，您可以提供您的应用程序将从中访问缓存的子网， ElastiCache Serverless 将在这些子网中创建 VPC 终端节点。确保您的应用程序部署在同一位置 AZs。否则，您的应用程序在访问缓存时可能会产生跨可用区跳转，导致客户端延迟增加。
+ **重用连接：**ElastiCache 无服务器请求是使用 RESP 协议通过启用 TLS 的 TCP 连接发出的。启动连接（包括验证连接，如果已配置）需要时间，因此第一个请求的延迟会高于一般延迟。通过已初始化的连接发出的请求可提供始终如一 ElastiCache的低延迟。因此，您应该考虑使用连接池或重复使用现有的 Valkey 或 Redis OSS 连接。
+ **扩展速度：**ElastiCache Serverless 会随着请求速率的增长而自动扩展。请求速率的突然大幅增加（快 ElastiCache 于 Serverless 的扩展速度）可能会在一段时间内导致延迟升高。 ElastiCache Serverless 通常可以快速提高其支持的请求速率，最多需要 10-12 分钟才能将请求速率提高一倍。
+ **检查长时间运行的命令：**某些 Valkey 或 Redis OSS 命令（包括 Lua 脚本或大型数据结构上的命令）可能会运行很长时间。要识别这些命令，请 ElastiCache 发布命令级指标。借助[ElastiCache 无服务器](serverless-metrics-events-redis.md#serverless-metrics)，您可以使用这些`BasedECPUs`指标。
+ 受@@ **限制的请求：**在 ElastiCache Serverless 中限制请求时，您的应用程序中的客户端延迟可能会增加。[当请求在 ElastiCache Serverless 中受到限制时，您应该会看到无服务器指标有所增加。`ThrottledRequests` ElastiCache ](serverless-metrics-events-redis.md#serverless-metrics)请查看以下部分，了解如何对节流的请求进行故障排除。
+ **密钥和请求的均匀分布：** ElastiCache 对于 Valkey 和 Redis OSS，每个插槽的密钥或请求分布不均会导致热槽，从而导致延迟增加。 ElastiCache 在执行简单命令的工作负载中，Serverless 在单个插槽上最多支持 30,000 ECPUs/second （使用从副本读取 ECPUs/second 时为 90,000）。 SET/GET 建议您评估键和请求在槽中的分布情况，并确保在您的请求速率超过此限制时实现均匀分配。

## 对无服务器中的限制问题进行故障排除 ElastiCache
<a name="wwe-troubleshooting.throttling"></a>

在服务导向型架构和分布式系统中，限制各种服务组件处理 API 调用的速率称为“限制”。这可以平滑峰值，控制组件吞吐量中的不匹配情况，并在出现意外操作事件时实现更可预测的恢复。 ElastiCache Serverless 专为这些类型的架构而设计，大多数 Valkey 或 Redis OSS 客户端都内置了针对受限请求的重试功能。一定程度上的限制对应用程序而言不一定是问题，但是持续限制数据工作流中对延迟敏感的部分可能会对用户体验产生负面影响，并会降低系统的整体效率。

[当请求在 ElastiCache Serverless 中受到限制时，您应该会看到无服务器指标有所增加。`ThrottledRequests` ElastiCache ](serverless-metrics-events-redis.md#serverless-metrics)如果您发现被节流的请求数量较多，请考虑以下事项：
+ **扩展速度：**ElastiCache Serverless会随着您摄取更多数据或请求速率的增长而自动扩展。如果您的应用程序的扩展速度快于Serverless的扩展速度，则您的请求可能会受到限制，而 ElastiCache ElastiCache Serverless可以扩展以适应您的工作负载。 ElastiCache Serverless 通常可以快速增加存储大小，最多需要 10-12 分钟才能将缓存中的存储大小增加一倍。
+ **密钥和请求的均匀分布：** ElastiCache 对于 Valkey 和 Redis OSS，每个插槽的密钥或请求分布不均可能会导致出现热槽。如果单个插槽的请求速率超过 30,000， ECPUs/second 并且处于执行简单命令的工作负载中，则热插槽可能会导致请求受限。 SET/GET 同样， ElastiCache 对于 Memcached，如果请求速率超过 30,000 /秒，热键可能会导致请求受限。 ECPUs
+ **从副本读取：**如果您的应用程序允许，可以考虑“从副本读取”功能。大多数 Valkey 或 Redis OSS 客户端都可以配置为“扩展读取”，将读取定向到副本节点。通过该功能，您可以扩展读取流量。此外， ElastiCache Serverless 会自动将副本请求中的读取路由到与您的应用程序位于同一可用区的节点，从而降低延迟。启用从副本读取后，对于使用简单 SET/GET 命令的工作负载，您可以在单个插槽 ECPUs/second 上实现多达 90,000 个。

## 相关主题
<a name="wwe-troubleshooting.related"></a>
+ [ElastiCache 最佳实践和缓存策略](BestPractices.md)