2012-04-24 3 views
3

Nous avons 1 master avec Redis. Et 2 esclaves de ce maître. Esclaves également utilisés comme WebServer. Nous utilisons des sessions Redis pour PHP. Nous équilibrons la charge en utilisant le DNS Round Robin. Cela signifie donc que les requêtes sont demandées sur un serveur "aléatoire".Éviter les interruptions lors de l'utilisation de la réplication - Redis

Comment je devrais configurer quelque chose comme une session PHP pour ne pas rompre l'expérience utilisateur. Par exemple, j'ai une période de réplication pour redis toutes les 10 secondes. Connexions utilisateur et session créées. Après quelques secondes, l'utilisateur demande une nouvelle page et frappe sur l'autre serveur. Mais dans ce serveur Redis n'est pas encore répliqué.

Que faire dans ce cas lorsque les données sont critiques à cet égard? Nous avons également des données non critiques dans redis, donc nous ne voulons pas définir la période de réplication sur une très petite période et faire charger à master.

En fait, ceci n'est pas applicable uniquement pour Redis. Je ne sais pas encore, peut-être que nous aurons le même problème avec MySQL.

Répondre

4

Par exemple, j'ai période de réplication pour Redis chaque 10 secondes

Je suppose que vous faites référence à la mise repl-ping-slave-period - qui est l'intervalle de temps pour un ping de maître à l'esclave confirmez que le lien est en place.

Redis n'a pas de période de réplication. Maître envoie des commandes aux esclaves dès que possible. L'esclave peut toujours être en retard, mais ce décalage n'est pas dû au réglage 10s que vous avez spécifié.

Vous pouvez le vérifier localement. Ouvrez une session Telnet, connectez-vous à l'hôte local 6379 (ou à l'endroit où se trouve votre maître). Entrez sync. Le maître envoie d'abord un fichier de vidage, puis vous envoie des commandes au fur et à mesure que vous modifiez les données sur le maître. Vous verrez également un ping toutes les 10s.

Comment je configurer PHP chose comme la session pour ne pas casser l'expérience utilisateur?

Il est préférable d'avoir un serveur dédié pour le maître et l'esclave Redis. N'installez pas Redis sur la machine qui a votre serveur web.

Les 3 serveurs Web doivent se connecter directement au maître Redis. Si le maître tombe en panne pour une raison quelconque, les serveurs Web doivent basculer vers les esclaves.

Comment passer du maître à l'esclave? Pour l'instant, vous devriez le faire manuellement. Salvatore a parlé de Redis-Sentinel, ce qui va résoudre ce problème, mais cette solution n'existe pas aujourd'hui.

Plusieurs personnes ont implémenté des solutions qui automatisent le basculement, mais pour une configuration aussi petite, je conseillerais d'aller avec les scripts de surveillance et de faire le basculement manuellement.

Questions connexes