本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ElastiCache 的常見故障診斷步驟和最佳實務
下列主題提供您在使用 ElastiCache 時可能遇到的錯誤和問題的疑難排解建議。如果您發現此處未列出的問題,您可以使用此頁面上的意見回饋按鈕來回報。
如需常見支援問題的更多疑難排解建議和解答,請造訪 AWS 知識中心
主題
連線問題
如果您無法連線至 ElastiCache 快取,請考慮下列其中一項:
使用 TLS:如果嘗試連線至 ElastiCache 端點時遇到掛載連線,您可能未在用戶端中使用 TLS。如果您使用的是 ElastiCache Serverless,傳輸中加密一律會啟用。請確定您的用戶端使用 TLS 連線到快取。進一步了解如何連線至已啟用 TLS 的快取。
VPC:ElastiCache 快取只能從 VPC 內存取。確定您從中存取快取和 ElastiCache 快取的 EC2 執行個體是在相同的 VPC 中建立。或者,您必須在 EC2 執行個體所在的 VPC 與您要建立快取的 VPC 之間啟用 VPC 對等互連。
安全群組:ElastiCache 使用安全群組來控制對快取的存取。考慮下列各項:
請確定 ElastiCache 快取所使用的安全群組允許從 EC2 執行個體傳入存取它。請參閱此處,了解如何在安全群組中正確設定傳入規則。
請確定 ElastiCache 快取使用的安全群組允許存取快取的連接埠 (無伺服器為 6379 和 6380,自行設計為 6379)。ElastiCache 使用這些連接埠來接受 Valkey 或 Redis OSS 命令。在此處進一步了解如何設定連接埠存取授予從 Amazon VPC 安全群組透過網路存取快取的權限。
如果連線持續困難,請參閱 持續連線問題 以取得其他步驟。
Valkey 或 Redis OSS 用戶端錯誤
ElastiCache Serverless 只能使用支援 Valkey 或 Redis OSS 叢集模式通訊協定的用戶端存取。可根據叢集組態,從任一模式的用戶端存取自行設計的叢集。
如果您的用戶端發生錯誤,請考慮下列事項:
叢集模式:如果您使用 SELECT
命令遇到 CROSSLOT 錯誤,或錯誤,則可能嘗試使用不支援叢集通訊協定的 Valkey 或 Redis OSS 用戶端存取啟用叢集模式快取。ElastiCache Serverless 僅支援支援 Valkey 或 Redis OSS 叢集通訊協定的用戶端。如果您想要在「停用叢集模式」(CMD) 中使用 Valkey 或 Redis OSS,則必須設計自己的叢集。 CROSSLOT 錯誤:如果您遇到
ERR CROSSLOT Keys in request don't hash to the same slot
錯誤,您可能會嘗試存取不屬於叢集模式快取中相同插槽的金鑰。提醒您,ElastiCache Serverless 一律以叢集模式運作。只有在涉及的所有金鑰都位於相同的雜湊槽中時,才允許涉及多個金鑰的多金鑰操作、交易或 Lua 指令碼。
如需設定 Valkey 或 Redis OSS 用戶端的其他最佳實務,請參閱此部落格文章
對 ElastiCache Serverless 中的高延遲進行故障診斷
如果您的工作負載似乎遇到高延遲,您可以分析 CloudWatch SuccessfulReadRequestLatency
和SuccessfulWriteRequestLatency
指標,以檢查延遲是否與 ElastiCache Serverless 相關。這些指標會測量 ElastiCache Serverless 內部的延遲 - 不包括用戶端與 ElastiCache Serverless 端點之間的用戶端延遲和網路跳脫時間。
針對用戶端延遲進行故障診斷
如果您在用戶端注意到延遲增加,但 CloudWatch
SuccessfulReadRequestLatency
和測量伺服器端延遲的SuccessfulWriteRequestLatency
指標沒有對應的增加,請考慮下列事項:
對伺服器端延遲進行故障診斷
某些變異性和偶爾尖峰不應造成疑慮。不過,如果Average
統計資料顯示大幅增加並持續存在,您應該檢查 AWS Health Dashboard 和個人運作狀態儀表板以取得詳細資訊。如有必要,請考慮使用 開啟支援案例 支援。
請考慮下列最佳實務和策略,以減少延遲:
啟用僅供讀取複本:如果您的應用程式允許,建議您在 Valkey 或 Redis OSS 用戶端中啟用「僅供讀取複本」功能,以擴展讀取並實現更低的延遲。啟用時,ElastiCache Serverless 會嘗試將您的讀取請求路由至與用戶端位於相同可用區域 (AZ) 的複本快取節點,以避免跨可用區域網路延遲。請注意,在用戶端中啟用僅供讀取複本功能表示您的應用程式接受資料的最終一致性。如果您在寫入金鑰後嘗試讀取,您的應用程式可能會收到較舊的資料一段時間。
確保您的應用程式部署在與快取相同的 AZs 中:如果您的應用程式未部署在與快取相同的 AZs 中,您可能會觀察到更高的用戶端延遲。當您建立無伺服器快取時,您可以提供應用程式存取快取的子網路,ElastiCache Serverless 會在這些子網路中建立 VPC 端點。確保您的應用程式部署在相同的 AZs 中。否則,您的應用程式在存取快取時可能會產生跨可用區跳轉,導致用戶端延遲增加。
重複使用連線:ElastiCache Serverless 請求是使用 RESP 通訊協定透過啟用 TLS 的 TCP 連線提出。啟動連線 (包括驗證連線,如果已設定) 需要一些時間,因此第一個請求的延遲高於一般。透過已初始化連線的請求可提供 ElastiCache 一致的低延遲。因此,您應該考慮使用連線集區或重複使用現有的 Valkey 或 Redis OSS 連線。
擴展速度:ElastiCache Serverless 會隨著請求率的增加而自動擴展。請求率突然大幅增加,速度比 ElastiCache Serverless 擴展的速度快,可能會導致延遲增加一段時間。ElastiCache Serverless 通常可以快速提高其支援的請求率,最多需要 10-12 分鐘才能將請求率加倍。
檢查長時間執行的命令:某些 Valkey 或 Redis OSS 命令,包括大型資料結構上的 Lua 指令碼或命令,可能會長時間執行。為了識別這些命令,ElastiCache 會發佈命令層級指標。透過 ElastiCache Serverless,您可以使用
BasedECPUs
指標。限流請求:當請求在 ElastiCache Serverless 中限流時,您可能會在應用程式中遇到用戶端延遲增加的情況。在 ElastiCache Serverless 中調節請求時,您應該會看到
ThrottledRequests
ElastiCache Serverless 指標增加。檢閱以下章節,以針對節流請求進行故障診斷。金鑰和請求的統一分佈:在 ElastiCache for Valkey 和 Redis OSS 中,每個槽的金鑰或請求分佈不均可能會導致熱槽,進而導致延遲增加。ElastiCache Serverless 在單一插槽上支援最高每秒 30,000 ECPUs (使用僅供讀取複本時為每秒 90,000 ECPUs)。我們建議您評估金鑰和請求分佈在各個插槽,並確保在請求率超過此限制時均勻分佈。
故障診斷 ElastiCache Serverless 中的調節問題
在服務導向架構和分散式系統中,限制各種服務元件處理 API 呼叫的速率稱為限流。這可平滑尖峰、控制元件輸送量不相符,並在發生非預期的操作事件時允許更可預測的復原。ElastiCache Serverless 專為這些類型的架構而設計,大多數的 Valkey 或 Redis OSS 用戶端都已針對限流請求內建重試。某種程度的限流對應用程式來說不一定是問題,但資料工作流程中對延遲敏感的部分如果持續遭到限流,可能會對使用者體驗造成負面影響,並降低系統的整體效率。
在 ElastiCache Serverless 中調節請求時,您應該會看到 ThrottledRequests
ElastiCache Serverless 指標增加。如果您注意到有大量限流請求,請考慮下列事項:
擴展速度: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。