Méthode de détection des erreurs dans le cluster Redis : modifiez d'abord le script Python pour écrire une donnée toutes les 1 seconde ; puis écrivez les données dans le cluster Redis en boucle et forcez la suppression d'un nœud maître pour observer l'application. situation de connexion Enfin, redémarrez le nœud 8001 en panne.
Méthode de détection de pannes dans le cluster Redis : test de basculement automatique
Modifier le script Python et écrire toutes les 1s le but de la saisie d'une donnée est de faciliter l'observation de l'impact sur l'application pendant la période (environ 1 seconde) pendant laquelle le nœud maître tombe en panne et le cluster bascule automatiquement, ou les performances de l'application avant et après le basculement automatique .
Le script suivant écrit les données sur le cluster Redis en boucle Pendant l'exécution, un nœud maître est supprimé de force et l'état de connexion de l'application est observé.
Dans le même temps, si une exception se produit, l'application est suspendue pendant 2 s, car le temps de basculement du cluster configuré ci-dessus est de 1 s. Si l'application est suspendue pendant 2 s, le processus de basculement peut être ignoré une fois le basculement terminé. , l'application est revenue à son état normal. Bien que le nœud 8001 soit en panne, l'application a continué à se connecter au nœud 8001, mais l'application l'ignorait complètement.
Recommandations d'apprentissage associées : Tutoriel vidéo Redis
import timefrom time import ctime,sleepfrom rediscluster import StrictRedisCluster startup_nodes = [ {"host":"111.231.253.***", "port":8001}, {"host":"111.231.253.***", "port":8002}, {"host":"111.231.253.***", "port":8003}, {"host":"111.231.253.***", "port":8004}, {"host":"111.231.253.***", "port":8005}, {"host":"111.231.253.***", "port":8006} ] redis_conn= StrictRedisCluster(startup_nodes=startup_nodes, decode_responses=True,password="root")for i in range(0, 100000): try: redis_conn.set('name' + str(i), str(i)) print('setting name' + str(i) +"--->" + time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) time.sleep(1) except: print("connect to redis cluster error") time.sleep(2)
J'ai découvert qu'après avoir tué le nœud maître, une seule erreur de connexion s'est produite, et puis parce que de Redis Le basculement automatique du cluster est réussi et transparent pour le programme, donc l'application fonctionne alors normalement et n'est pas affectée par la panne de l'un des nœuds maîtres.
L'état du cluster à ce moment est que le nœud 8001 est en panne. Évidemment, le nœud esclave 8004 correspondant à 8001 prend le relais du nœud maître, passe au maître et. fournit des services au monde extérieur
Observez les journaux de l'instance 8004 qui a été mise à niveau vers le nœud maître. Vous constaterez qu'après avoir tué de force le nœud maître 8001 d'origine, à l'intérieur. 1 seconde, 8001 a été mis à niveau avec succès vers le nœud maître.
Si pendant le processus de basculement, aucune application n'accède à Redis, et l'application ne sait même pas qu'un basculement s'est produit dans le cluster Redis Tant que le maître et l'esclave. Les nœuds d'un certain nœud du cluster ne tombent pas en panne en même temps, il n'y aura aucun problème dans l'ensemble du cluster et cela n'affectera pas l'application. Le processus est complètement transparent.
Redémarrez ensuite le nœud 8001 en panne, et vous constaterez que le nœud 8001 devient automatiquement le nœud esclave de son nœud esclave d'origine (8004)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!