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 ?

Dernière mise à jour : 23/03/2021

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 ?

Ré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 principal 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 readonly a été initiée par le client. Cela signifie que le nœud de réplica traite la demande uniquement si la commande readonly 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 readonly 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 readonly 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>

La commande readonly doit être émise lorsque le client se connecte à un nœud pour la première fois. La commande est active uniquement tant que le client lit les clés du même nœud. Si le client se connecte à un autre nœud de réplica dans la même partition ou une partition différente, vous devrez peut-être émettre à nouveau une commande readonly.


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


Besoin d'aide pour une question technique ou de facturation ?