在對我的 Redis(叢集模式已停用)叢集進行容錯移轉後,如何對 "READONLY You can't write against a read only replica" 錯誤進行疑難排解?

上次更新日期:2022 年 6 月 17 日

為什麼在容錯移轉後,在 Amazon ElastiCache for Redis (叢集模式已停用) 叢集中收到 "READONLY You can't write against a read only replica" 的錯誤訊息?

簡短描述

如果將主節點容錯移轉到 Amazon ElastiCache 叢集中的複本節點,則複本將扮演主節點的角色為傳入請求提供服務。但是,在以下情境中,您會收到 READONLY 錯誤:

  • 您在應用程式中使用的是節點 端點,而不是叢集的主端點。

    -或-

  • 應用程式節點中的 DNS 快取將流量路由到舊的主節點。

解決方案

1.    確認該叢集已停用叢集模式。操作方式:
開啟 ElastiCache 主控台,然後選取 Redis clusters (Redis 叢集)。確認該叢集的 Cluster Mode (叢集模式) 為 off (關閉)。
注意:如果 Cluster Mode (叢集模式) 為 on (打開),請參閱我正在使用 ElastiCache 或 Redis。為什麼 Redis 用戶端讀取請求時,總是會從碎片的主節點讀取,或是會重定引導至碎片的主節點?

2.    確認您將寫入命令傳送至主端點,而不是傳送至節點端點。若要驗證寫入命令是否前往主節點,請執行以下其中一個動作:
方式 1
使用 redis-cli 連接至 Redis 叢集,然後執行 get key 命令以取得更新後的金鑰。然後,確認命令輸出以確認金鑰值是否在最後一個命令之後更新。
例如,以下命令會將 key1 值設定為 hello

set key1 "hello" 
OK

若要確認金鑰是否正確設定,請執行 get 命令:

get key1
"hello"

方式 2

使用 redis-cli 連接至 Redis 叢集,然後執行 MONITOR 命令。此會列出來到叢集的所有指令。請記住,執行一個 MONITOR 用戶端可能會使輸送量降低 50% 以上。

3.    若要避免 DNS 快取問題,請依照應用程式使用之 Redis 用戶端程式庫的指南,開啟應用程式中的重試邏輯。


此文章是否有幫助?


您是否需要帳單或技術支援?