Methode zur Fehlererkennung im Redis-Cluster: Ändern Sie zuerst das Python-Skript, um alle 1 Sekunde ein Datenelement zu schreiben. Schreiben Sie dann Daten in einer Schleife in den Redis-Cluster und erzwingen Sie das Beenden eines Masterknotens, um die Anwendung zu beobachten Verbindungssituation; Starten Sie abschließend den ausgefallenen 8001-Knoten neu.
Methode zur Fehlererkennung im Redis-Cluster: automatischer Failover-Test
Ändern Sie das Python-Skript und schreiben Sie alle 1 Sekunde Der Zweck der Eingabe eines Datenelements besteht darin, die Beobachtung der Auswirkungen auf die Anwendung innerhalb des Zeitraums (ca. 1 Sekunde), in dem der Masterknoten ausfällt und der Cluster automatisch ausfällt, oder der Leistung der Anwendung vor und nach dem automatischen Failover zu erleichtern .
Das folgende Skript schreibt Daten in einer Schleife in den Redis-Cluster. Während der Ausführung wird ein Masterknoten zwangsweise beendet und der Anwendungsverbindungsstatus beobachtet.
Wenn eine Ausnahme auftritt, wird die Anwendung gleichzeitig für 2 Sekunden angehalten, da die oben konfigurierte Cluster-Failover-Zeit 1 Sekunde beträgt. Wenn die Anwendung für 2 Sekunden angehalten wird, kann der Failover-Prozess übersprungen werden , die Anwendung kehrte in den Normalzustand zurück, obwohl Knoten 8001 ausgefallen war, stellte die Anwendung weiterhin eine Verbindung zu Knoten 8001 her, war sich der Anwendung jedoch überhaupt nicht bewusst.
Verwandte Lernempfehlungen: Redis-Video-Tutorial
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)
Ich habe festgestellt, dass nach dem Beenden des Masterknotens nur ein Verbindungsfehler aufgetreten ist, und dann, weil von Redis Das automatische Failover des Clusters verläuft erfolgreich und für das Programm transparent, sodass die Anwendung anschließend normal funktioniert und nicht durch den Ausfall eines der Masterknoten beeinträchtigt wird.
Der Status des Clusters ist zu diesem Zeitpunkt, dass Knoten 8001 ausgefallen ist. Offensichtlich übernimmt der Slave-Knoten 8004, der 8001 entspricht, den Master-Knoten, wird zum Master aktualisiert und stellt Dienste für die Außenwelt bereit
Beobachten Sie die Protokolle der 8004-Instanz, die auf den Masterknoten aktualisiert wurde. Sie werden feststellen, dass der ursprüngliche 8001-Masterknoten im Inneren gewaltsam getötet wurde 1 Sekunde, 8001 wurde erfolgreich auf den Master-Knoten aktualisiert.
Wenn während des Failover-Prozesses keine Anwendung auf Redis zugreift und die Anwendung nicht einmal weiß, dass im Redis-Cluster ein Failover stattgefunden hat, solange der Master und der Slave Knoten eines bestimmten Knotens im Cluster fallen nicht gleichzeitig aus, es gibt kein Problem im gesamten Cluster und es hat keine Auswirkungen auf die Anwendung. Der Prozess ist vollständig transparent.
Starten Sie dann den heruntergefahrenen 8001-Knoten neu und Sie werden feststellen, dass der 8001-Knoten automatisch zum Slave-Knoten seines ursprünglichen Slave-Knotens (8004) wird
Das obige ist der detaillierte Inhalt vonWie erkennt man Fehler im Redis-Cluster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!