J'utilise ElastiCache for Redis. Pourquoi les demandes de lecture d’un client Redis sont-elles toujours lues depuis le nœud principal d'une partition, ou redirigées vers ce nœud ?

Date de la dernière mise à jour : 09/07/2020

J'utilise Amazon ElastiCache for Redis. Pourquoi les demandes de lecture d’un client Redis sont-elles toujours lues depuis le nœud principal d'une partition, ou redirigées vers ce nœud ?

Solution

Tout nœud d'un cluster Redis peut recevoir des requêtes de clients Redis. Lorsqu'un client envoie une requête de lecture/écriture à un nœud de réplica, le nœud analyse la demande pour définir s'il s'agit d'une opération à clé unique, ou d’une opération à plusieurs clés appartenant au même emplacement de hachage de la partition. Par défaut, les nœuds de réplica dans les clusters activés en mode cluster redirigent toutes les demandes de lecture/écriture des clients vers un nœud maître faisant autorité au sein de la partition qui appartient à l'emplacement de hachage de la clé. Le nœud de réplica ne sert la demande de lecture que si cette partition appartient à l'emplacement de hachage et qu'une commande lecture seule a été initiée par le client. Cela signifie que le nœud de réplica traite la demande uniquement si la commande lecture seule est émise par le client avant la demande. Sinon, la demande est redirigée vers le nœud principal de la partition à laquelle appartient l'emplacement de hachage.

Exemple

1.    Connectez-vous à votre cluster pour définir une clé.

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.    Connectez-vous à un nœud de réplica.

Dans l'exemple suivant, la commande lecture seule n'est pas envoyée et la demande est redirigée vers un nœud principal.

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>

Remarque : L'erreur MOVED illustrée dans l'exemple précédent se produit lorsque le client de cluster Redis ne prend pas en charge les clusters, et ne peut donc pas gérer les demandes de redirection vers le nœud principal. Pour plus d'informations sur l'erreur MOVED, consultez Spécification des clusters Redis - Redirection et création d’une nouvelle partition sur le site Web Redis.io.

Dans l'exemple suivant, la commande lecture seule est envoyée en premier, de sorte que le nœud de réplica traite la demande au lieu de la rediriger vers un nœud principal.

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

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?