

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# ElastiCache 的常見故障診斷步驟和最佳實務
<a name="wwe-troubleshooting"></a>

下列主題提供您在使用 ElastiCache 時可能遇到的錯誤和問題的疑難排解建議。如果您發現未列在此處的問題，您可以使用此頁面上的 Feedback (意見回饋) 按鈕來報告。

如需常見支援問題的更多疑難排解建議和解答，請造訪 [AWS 知識中心](https://aws.amazon.com/premiumsupport/knowledge-center/)

**Topics**
+ [連線問題](#wwe-troubleshooting.connection)
+ [Valkey 或 Redis OSS 用戶端錯誤](#wwe-troubleshooting.clienterrors)
+ [對 ElastiCache Serverless 中的高延遲進行故障診斷](#wwe-troubleshooting.latency)
+ [故障診斷 ElastiCache Serverless 中的限流問題](#wwe-troubleshooting.throttling)
+ [持續連線問題](TroubleshootingConnections.md)
+ [相關主題](#wwe-troubleshooting.related)

## 連線問題
<a name="wwe-troubleshooting.connection"></a>

如果您無法連線至 ElastiCache 快取，請考慮下列其中一項：

1. **使用 TLS：**如果您在嘗試連線到 ElastiCache 端點時遇到掛載連線，則可能不會在用戶端中使用 TLS。如果您使用的是 ElastiCache Serverless，傳輸中的加密一律會啟用。請確定您的用戶端使用 TLS 連線到快取。[進一步了解如何連線至已啟用 TLS 的快取](connect-tls.md)。

1. **VPC：**ElastiCache 快取只能從 VPC 內存取。確定您從中存取快取和 ElastiCache 快取的 EC2 執行個體是在相同的 VPC 中建立。或者，您必須在 EC2 執行個體所在的 VPC 與您要建立快取的 VPC 之間啟用 VPC [對等](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)互連。

1. **安全群組：**ElastiCache 使用安全群組來控制對快取的存取。考慮下列各項：

   1. 請確定 ElastiCache 快取所使用的安全群組允許從 EC2 執行個體進行傳入存取。請參閱[此處](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)，了解如何在安全群組中正確設定傳入規則。

   1. 請確定 ElastiCache 快取使用的安全群組允許存取快取的連接埠 （無伺服器 6379 和 6380，節點型叢集預設 6379)。ElastiCache 使用這些連接埠來接受 Valkey 或 Redis OSS 命令。在此處進一步了解如何設定連接埠存取[授予從 Amazon VPC 安全群組透過網路存取快取的權限](set-up.md#elasticache-install-grant-access-VPN)。

如果連線持續困難，請參閱 [持續連線問題](TroubleshootingConnections.md) 以取得其他步驟。

## Valkey 或 Redis OSS 用戶端錯誤
<a name="wwe-troubleshooting.clienterrors"></a>

ElastiCache Serverless 只能使用支援 Valkey 或 Redis OSS 叢集模式通訊協定的用戶端存取。節點型叢集可透過任一模式的用戶端存取，視叢集組態而定。

如果您的用戶端發生錯誤，請考慮下列事項：

1. **叢集模式：**如果您使用 [SELECT](https://valkey.io/commands/select/) 命令遇到 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://aws.amazon.com/blogs/database/best-practices-redis-clients-and-amazon-elasticache-for-redis/)。

## 對 ElastiCache Serverless 中的高延遲進行故障診斷
<a name="wwe-troubleshooting.latency"></a>

如果您的工作負載似乎遇到高延遲，您可以分析 CloudWatch `SuccessfulReadRequestLatency`和`SuccessfulWriteRequestLatency`指標，以檢查延遲是否與 ElastiCache Serverless 相關。這些指標會測量 ElastiCache Serverless 內部的延遲 - 不包括用戶端與 ElastiCache Serverless 端點之間的用戶端延遲和網路跳脫時間。

**對用戶端延遲進行故障診斷**

如果您在用戶端注意到延遲增加，但 ``CloudWatch `SuccessfulReadRequestLatency`和測量伺服器端延遲的`SuccessfulWriteRequestLatency`指標沒有對應的增加，請考慮下列事項：
+ **確保安全群組允許存取連接埠 6379 和 6380：**ElastiCache Serverless 使用主要端點的 6379 連接埠和讀取器端點的 6380 連接埠。有些用戶端會為每個新連線建立與兩個連接埠的連線，即使您的應用程式未使用僅供讀取複本功能。如果您的安全群組不允許傳入存取這兩個連接埠，則建立連線可能需要更長的時間。在此處進一步了解如何設定連接埠存取[ 授予從 Amazon VPC 安全群組透過網路存取快取的權限授予網路存取權  ElastiCache 節點型叢集針對 Valkey 和 Redis OSS 命令使用連接埠 6379，而 ElastiCache Serverless 同時使用連接埠 6379 和連接埠 6380。為了從 EC2 執行個體成功連接和執行 Valkey 或 Redis OSS 命令，您的安全群組必須允許視需要存取這些連接埠。 對於 ElastiCache 無伺服器，具體而言：  **連接埠 6379 （主要端點）：**寫入操作和讀取需要強式一致性時需要 **連接埠 6380 （讀取最佳化端點）：**用於從複本讀取功能，提供具有最終一致性的低延遲讀取  即使未主動使用僅供讀取複本，許多用戶端仍會建立與兩個連接埠的連線，因此即使您不打算使用僅供讀取複本，也需要讓連接埠 6380 可存取。 ElastiCache for Memcached 使用 11211 和 11212 連接埠來接受 Memcached 命令。為了從 EC2 執行個體成功連線和執行 Memcached 命令，您的安全群組必須允許存取這些連接埠。  登入 AWS Command Line Interface 並開啟 [Amazon EC2 主控台](https://console.aws.amazon.com/ec2/)。 在導覽窗格中，在 **Network & Security (網路與安全)** 下，選擇 **Security Groups (安全群組)**。 從安全群組的清單中，選擇要用於 Amazon VPC 的安全群組。除非您建立了安全群組供 ElastiCache 使用，否則此安全群組將會命名為 *default*。 選擇「傳入」索引標籤，然後：   選擇**編輯**。   選擇**新增規則**。   在「類型」欄中，選擇**自訂 TCP 規則**。  如果使用 Valkey 或 Redis OSS，請在**連接埠範圍**方塊中輸入 `6379`。 如果使用 Memcached，請在**連接埠範圍**方塊中輸入 `11211`。   在**來源**方塊中，選擇具有連接埠範圍 (0.0.0.0/0) 的**隨處**，讓任何您在 Amazon VPC 內啟動的 Amazon EC2 執行個體都能連線至您的快取。   如果您使用的是 ElastiCache 無伺服器，請選擇新增規則來**新增另一個規則**。  在 **Type (類型)** 欄中，選擇 **Custom TCP rule (自訂 TCP 規則)**。   如果使用 ElastiCache for Redis OSS，請在**連接埠範圍**方塊中輸入 `6380`。 如果使用 ElastiCache for Memcached，請在**連接埠範圍**方塊中輸入 `11212`。   在**來源**方塊中，選擇具有連接埠範圍 (0.0.0.0/0) 的**隨處**，讓任何您在 Amazon VPC 內啟動的 Amazon EC2 執行個體都能連線至您的快取。  選擇**儲存**    ](set-up.md#elasticache-install-grant-access-VPN)。

**對伺服器端延遲進行故障診斷**

某些變化性和偶爾峰值不應造成疑慮。不過，如果`Average`統計資料顯示急劇增加並持續，您應該檢查 Health 儀板表 和個人運作狀態儀表板以取得詳細資訊。如有必要，請考慮使用 開啟支援案例 支援。

請考慮下列最佳實務和策略，以減少延遲：
+ **啟用僅供讀取複本：**如果您的應用程式允許，建議您在 Valkey 或 Redis OSS 用戶端中啟用「僅供讀取複本」功能，以擴展讀取並降低延遲。啟用時，ElastiCache Serverless 會嘗試將您的讀取請求路由至與用戶端位於相同可用區域 (AZ) 的複本快取節點，以避免跨可用區域網路延遲。請注意，在用戶端中啟用僅供讀取複本功能表示您的應用程式接受資料中的最終一致性。如果您在寫入金鑰後嘗試讀取，您的應用程式可能會收到較舊的資料一段時間。
+ **確保您的應用程式部署在與快取相同的 AZs 中：**如果您的應用程式未部署在與快取相同的 AZs 中，您可能會觀察到更高的用戶端延遲。當您建立無伺服器快取時，您可以提供應用程式存取快取的子網路，而 ElastiCache Serverless 會在這些子網路中建立 VPC 端點。確保您的應用程式部署在相同的 AZs 中。否則，您的應用程式在存取快取時可能會產生跨可用區跳轉，進而產生更高的用戶端延遲。
+ **重複使用連線：**ElastiCache Serverless 請求是透過啟用 TLS 的 TCP 連線使用 RESP 通訊協定提出。啟動連線 （包括驗證連線，如果已設定） 需要時間，因此第一個請求的延遲高於一般。透過已初始化連線的請求可提供 ElastiCache 一致的低延遲。因此，您應該考慮使用連線集區或重複使用現有的 Valkey 或 Redis OSS 連線。
+ **擴展速度：**ElastiCache Serverless 會隨著請求率增加而自動擴展。請求率突然大幅增加，速度比 ElastiCache Serverless 擴展的速度快，可能會導致延遲增加一段時間。ElastiCache Serverless 通常可以快速提高其支援的請求率，最多需要 10-12 分鐘才能將請求率加倍。
+ **檢查長時間執行的命令：**某些 Valkey 或 Redis OSS 命令，包括大型資料結構上的 Lua 指令碼或命令，可能會長時間執行。為了識別這些命令，ElastiCache 會發佈命令層級指標。透過 [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics)，您可以使用 `BasedECPUs`指標。
+ **限流請求：**在 ElastiCache Serverless 中限流請求時，您可能會遇到應用程式的用戶端延遲增加。在 ElastiCache Serverless 中調節請求時，您應該會看到 `ThrottledRequests` [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics) 指標增加。檢閱以下章節，以針對節流請求進行故障診斷。
+ **金鑰和請求的統一分佈：**在 ElastiCache for Valkey 和 Redis OSS 中，每個插槽的金鑰或請求分佈不均可能會導致熱槽，進而導致延遲增加。ElastiCache Serverless 在單一插槽上最多支援 30，000 ECPUs/秒 （使用僅供讀取複本時為 90，000 個 ECPUs/秒）。我們建議評估您的金鑰和請求分佈到各個槽，並確保在請求率超過此限制時分佈一致。

## 故障診斷 ElastiCache Serverless 中的限流問題
<a name="wwe-troubleshooting.throttling"></a>

在服務導向架構和分散式系統中，限制各種服務元件處理 API 呼叫的速率稱為限流。這可平滑峰值、控制元件輸送量不相符，並在發生非預期的操作事件時允許更可預測的復原。ElastiCache Serverless 專為這些類型的架構而設計，大多數 Valkey 或 Redis OSS 用戶端已針對限流請求內建重試。某種程度的限流對應用程式來說不一定是問題，但資料工作流程中對延遲敏感的部分如果持續遭到限流，可能會對使用者體驗造成負面影響，並降低系統的整體效率。

在 ElastiCache Serverless 中調節請求時，您應該會看到 `ThrottledRequests` [ElastiCache Serverless](serverless-metrics-events-redis.md#serverless-metrics) 指標增加。如果您注意到有大量限流請求，請考慮下列事項：
+ **擴展速度：**ElastiCache Serverless 會在您擷取更多資料或增加請求率時自動擴展。如果您的應用程式擴展速度比 ElastiCache Serverless 擴展的速度快，則您的請求可能會在 ElastiCache Serverless 擴展以容納工作負載時受到調節。ElastiCache Serverless 通常可以快速增加儲存大小，最多需要 10-12 分鐘才能將快取中的儲存大小加倍。
+ **金鑰和請求的統一分佈：**在 ElastiCache for Valkey 和 Redis OSS 中，每個槽的金鑰或請求分佈不均可能會導致熱槽。如果單一槽的請求率超過每秒 30，000 個 ECPUs且位於執行簡單 SET/GET 命令的工作負載中，熱槽可能會導致請求限流。同樣地，使用 ElastiCache for Memcached 時，如果請求率超過每秒 30，000 個 ECPUs熱索引鍵可能會導致請求限流。
+ **從複本讀取：**如果您的應用程式允許，請考慮使用「從複本讀取」功能。大多數 Valkey 或 Redis OSS 用戶端可以設定為「擴展讀取」，將讀取導向複本節點。此功能可讓您擴展讀取流量。此外，ElastiCache Serverless 會自動將從複本請求讀取路由到與您應用程式相同可用區域中的節點，進而降低延遲。啟用僅供讀取複本時，對於具有簡單 SET/GET 命令的工作負載，您可以在單一插槽上達到每秒高達 90，000 ECPUs。

## 相關主題
<a name="wwe-troubleshooting.related"></a>
+ [ElastiCache 最佳實務和快取策略](BestPractices.md)