Ich möchte Redis-Client-Leseanforderungen lösen, die an den primären Knoten eines Shards statt an einen Replikatknoten in Amazon ElastiCache for Redis umgeleitet werden.
Kurzbeschreibung
Jeder Knoten in einem ElastiCache for Redis-Cluster kann Abfragen von Redis-Clients empfangen. Wenn ein Client eine Lese- und Schreibabfrage an einen Replikatknoten sendet, überprüft der Knoten, ob es sich bei der Anforderung um eine Einzelschlüssel- oder Mehrschlüsseloperation handelt. Die Einzelschlüssel- oder Mehrschlüsseloperation muss zum gleichen Hash-Slot des Shards gehören. Standardmäßig leiten Replikatknoten mit aktiviertem Clustermodus alle Lese- und Schreibanforderungen an den primären Knoten um. Lese- und Schreibanforderungen werden an einen autoritativen Primärknoten des Shards umgeleitet, der zum Hash-Slot des Schlüssels gehört. Wenn der Shard zum Hash-Slot gehört und zuerst ein Befehl readonly initiiert wird, schließt der Replikatknoten nur die Leseanforderung ab. Der Replikatknoten verarbeitet die Leseanforderung nur, wenn readonly zuerst vom Client ausgegeben wird. Wenn die Anfrage readonly nicht zuerst gesendet wird, leitet der Replikatknoten die Anforderung an einen primären Knoten weiter.
Behebung
Gehen Sie wie folgt vor, um sicherzustellen, dass Ihre Redis-Client-Leseanforderungen vom Replikatknoten gelesen werden:
-
Melden Sie sich bei Ihrem Cluster an und legen Sie dann einen Schlüssel fest. Beispiel:
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>
-
Verbinden Sie sich mit einem Replikatknoten. Stellen Sie sicher, dass Sie einen Befehl readonly ausführen. Beispiel: Hinweis: Das folgende Beispiel zeigt einen Befehl readonly, der nicht zuerst gesendet wird, und die Anforderung wird an einen primären Knoten 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 Fehler MOVED tritt auf, wenn der Redis-Cluster-Client keine Umleitungsanfragen an den Primärknoten verarbeiten kann. Weitere Informationen zum Fehler MOVED finden Sie unter Umleitung MOVED auf der Redis-Website.
Beispiel:
Hinweis: Das folgende Beispiel zeigt einen Befehl readonly, der zuerst gesendet wird. Dadurch kann der Replikatknoten die Anforderung verarbeiten und die Anforderung nicht an einen primären Knoten umleiten.
172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>
Hinweis: Stellen Sie sicher, dass Sie den Befehl readonly ausführen, 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, stellen Sie sicher, dass ein Befehl readonly ausgegeben wird.