web-dev-qa-db-fra.com

Réplication maître / esclave Redis - point de défaillance unique?

Comment effectuer une mise à niveau vers une version plus récente de Redis sans interruption de service? Les esclaves Redis sont en lecture seule, il semble donc que vous deviez supprimer le maître et votre site serait en lecture seule pendant 45 secondes ou plus pendant que vous attendez qu'il recharge la base de données.

Y a-t-il un moyen de contourner ceci?

37
nornagon

Lorsque vous mettez le nœud hors ligne, promouvez l'esclave à maître à l'aide de la commande SLAVEOF, puis lorsque vous le remettez en ligne, vous le configurez comme esclave et il copiera toutes les données du nœud en ligne.

Vous devrez peut-être également vous assurer que votre client peut gérer correctement les nœuds maîtres modifiés/manquants.

Si vous voulez vraiment devenir fantaisiste, vous pouvez configurer votre client pour promouvoir un esclave s'il détecte une erreur d'écriture sur le maître.

22
Tom Clarkson

Redis Team a une très bonne documentation à ce sujet

Étapes principales:

  • Configurez votre nouvelle instance Redis en tant qu'esclave pour votre instance Redis actuelle. Pour ce faire, vous avez besoin d'un serveur différent ou d'un serveur qui a suffisamment de RAM pour que deux instances de Redis fonctionnent en même temps.
  • Si vous utilisez un seul serveur, assurez-vous que l'esclave est démarré sur un port différent de celui de l'instance maître, sinon l'esclave ne pourra pas démarrer du tout.
  • Attendez la fin de la synchronisation initiale de la réplication (consultez le fichier journal esclave).
  • Assurez-vous en utilisant INFO qu'il y a le même nombre de clés dans le maître et dans l'esclave. Vérifiez avec redis-cli que l'esclave fonctionne comme vous le souhaitez et répond à vos commandes.
  • Configurez tous vos clients afin d'utiliser la nouvelle instance (c'est-à-dire l'esclave).
  • Une fois que vous êtes sûr que le maître ne reçoit plus de requête (vous pouvez le vérifier avec la commande MONITOR), élisez l'esclave à maîtriser à l'aide de la commande SLAVEOF NO ONE et arrêtez votre maître.

Documentation complète:

Mise à niveau ou redémarrage d'une instance Redis sans temps d'arrêt

29
kaji

Vous pouvez utiliser Redis Sentinel pour ce faire, la sentinelle promouvra automatiquement un esclave en tant que nouveau maître. vous pouvez trouver plus d'informations ici http://redis.io/topics/sentinel .

Sentinel est un système utilisé pour gérer les serveurs redis, il surveille le maître et les esclaves redis en continu, et chaque fois qu'un maître tombe en panne, il promeut automatiquement un esclave en maître. et lorsque l'ancien maître est UP, il sera fait comme esclave du nouveau maître.

Ici, il n'y aura pas de temps d'arrêt ni de configuration manuelle du fichier de configuration. Vous pouvez visiter le lien ci-dessus pour savoir comment configurer sentinelle pour vos serveurs redis.

10
Abhi

Remarque, vous devrez peut-être vérifier et définir la configuration suivante pour écrire sur votre esclave. ("Depuis Redis 2.6, les esclaves par défaut sont en lecture seule")

redis-cli config set slave-read-only no

-- Exemple

-bash-4.1$ redis-cli info
 Server
redis_version:2.6.9

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
(error) READONLY You can't write against a read only slave.

-bash-4.1$ redis-cli slaveof no one
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"


-bash-4.1$ redis-cli config set slave-read-only no
OK

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"
6
Ed J