我正在使用 ElastiCache for Redis。為什麼 Redis 客戶端讀取請求總是從碎片的主節點讀取或重新導向至該節點?

1 分的閱讀內容
0

我正在使用 Amazon ElastiCache for Redis。為什麼 Redis 客戶端讀取請求總是從碎片的主節點讀取或重新導向至該節點?

解決方案

Redis 叢集中的任何節點都可以接收來自 Redis 用戶端的查詢。當用戶端傳送讀取/寫入查詢至複本節點時,節點會分析該請求,以確認其屬於碎片相同雜湊插槽的單一金鑰或多金鑰作業。在已啟用叢集模式的叢集中,複本節點的預設行為是將所有用戶端讀取/寫入請求重新導向至屬於該金鑰雜湊插槽的碎片的授權主節點。只有當該碎片屬於該雜湊插槽且用戶端已啟用 readonly 命令時,複本節點才會提供讀取請求。這表示,只有當用戶端在請求前發出 readonly時,複本節點才會處理該請求。否則,該請求會重新導向至雜湊插槽所屬之碎片的主節點。

範例

  1. 登入叢集以設定金鑰。
172.31.21.72:6379> set key8 "This is testing for readonly"
-> Redirected to slot [13004] located at 172.31.21.72:6379
OK
172.31.21.72:6379>
  1. 連線至複本節點。

在下列範例中,不會傳送 readonly 命令,並且請求會重新導向至主節點。

172.31.30.175:6379> info replication
 # Replication
 role:slave
 master_host:172.31.21.72
 master_port:6379
 master_link_status:up
 172.31.30.175:637> CLUSTER KEYSLOT key8
 (integer) 13004
 172.31.30.175:637> get key8
 (error) MOVED 13004 172.31.21.72:6379
 172.31.30.175:637> get key8
 -> Redirected to slot [13004] located at 172.31.21.72:6379
 "This is testing for readonly"
 172.31.21.72:6379>

注意: 當 Redis 叢集用戶端不支援叢集且無法處理主節點的重新導向請求時,就會發生前述範例中顯示的 MOVED 錯誤。如需有關 MOVED 錯誤的詳細資訊,請參閱 Redis.io 網站上的 Redis 叢集規格 - 重新導向和重新分片

在下列範例中,先發送的是 readonly 命令,因此複本節點會處理該請求,而不是將其重新導向至主節點。

172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>

當用戶端首次連線至節點時,需要發出 readonly 命令。只有在用戶端從相同節點讀取金鑰之前,該命令才會處於作用中狀態。如果用戶端連線至相同或不同碎片中的另一個複本節點,則可能需要發出新的 readonly 命令。


AWS 官方
AWS 官方已更新 3 年前