Ich verwende ElastiCache für Redis. Warum werden meine Redis-Client-Leseanfragen immer vom Primärknoten eines Shards gelesen oder dorthin umgeleitet?

Lesedauer: 2 Minute
0

Ich verwende Amazon ElastiCache für Redis. Warum werden meine Redis-Client-Leseanfragen immer vom Primärknoten eines Shards gelesen oder dorthin umgeleitet?

Behebung

Jeder Knoten in einem Redis-Cluster kann Abfragen von Redis-Clients empfangen. Wenn ein Client eine Lese-/Schreibabfrage an einen Replikatknoten sendet, analysiert der Knoten die Anfrage, um zu bestätigen, ob es sich um eine Einzelschlüssel- oder Mehrschlüsseloperation handelt, die zum selben Hash-Slot des Shards gehört. Das Standardverhalten von Replikatknoten in Clustern, die im Clustermodus aktiviert sind, besteht darin, alle Lese-/Schreibanforderungen des Clients an einen autoritativen Primärknoten des Shards umzuleiten, der zum Hash-Slot des Schlüssels gehört. Der Replikatknoten bedient die Leseanforderung nur, wenn dieser Shard zum Hash-Slot gehört und ein Readonly-Befehl vom Client initiiert wird. Das bedeutet, dass der Replikatknoten die Anfrage nur verarbeitet, wenn der Client vor der Anfrage Readonly gesetzt hat. Andernfalls wird die Anfrage an den Primärknoten des Shards weitergeleitet, zu dem der Hash-Slot gehört.

Beispiel

1.Melden Sie sich bei Ihrem Cluster an, um einen Schlüssel festzulegen.

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>

2.Verbinden Sie sich mit einem Replikatknoten.

Im folgenden Beispiel wird der Befehl Readonly nicht gesendet und die Anfrage wird an einen Primärknoten umgeleitet.

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>

**Hinweis:**Der im vorherigen Beispiel gezeigte MOVED-Fehler tritt auf, wenn der Redis-Cluster-Client keinen Cluster erkennt und keine Umleitungsanfragen an den Primärknoten verarbeiten kann. Weitere Informationen zum MOVED-Fehler finden Sie unter Redis-Cluster-Spezifikation – Umleitung und Resharding auf der Redis.io-Website.

Im folgenden Beispiel wird der Befehl Readonly zuerst gesendet, sodass der Replikatknoten die Anfrage verarbeitet, anstatt sie an einen Primärknoten umzuleiten.

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

Der Befehl Readonly muss ausgegeben werden, wenn der Client zum ersten Mal eine Verbindung zu einem Knoten herstellt. Der Befehl ist nur so lange aktiv, bis der Client Schlüssel von demselben Knoten liest. Wenn der Client eine Verbindung zu einem anderen Replikatknoten im selben oder einem anderen Shard herstellt, müssen Sie möglicherweise einen neuen Readonly-Befehl ausführen.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren