Heim > Backend-Entwicklung > PHP-Tutorial > Verwandte Vorgänge der Redis-Master-Slave-Synchronisierung und der Lese-/Schreib-Trennungseinstellungen

Verwandte Vorgänge der Redis-Master-Slave-Synchronisierung und der Lese-/Schreib-Trennungseinstellungen

jacklove
Freigeben: 2023-04-01 12:08:02
Original
2065 Leute haben es durchsucht

In diesem Artikel wird die Verwendung der Master-Slave-Synchronisationsfunktion (Master, Slave) von Redis vorgestellt, um dem Programm die Trennung von Lesen und Schreiben zu ermöglichen, IO-Engpässe zu vermeiden und die Effizienz beim Lesen und Schreiben von Daten zu verbessern.

Redis unterstützt einen Master-Server zur Synchronisierung mehrerer Slave-Server und die Synchronisierung verwendet den Publish/Subscribe-Mechanismus.
Ein Master kann auch für mehrere Slaves geschichtet werden. Die Slaves können unter jedem Slave synchronisiert und zu einer Baumstruktur erweitert werden.

Redis Master-Slave-Synchronisierungseinstellungen

Der Standardport von Redis ist 6379 Um den ursprünglichen Redis nicht zu beeinträchtigen, verwenden wir den neuen Port

master redis_master.conf

port 6300requirepass 123456masterauth 123456daemonize yes
Nach dem Login kopieren


slave1 konfigurieren redis_slave1.conf als Slave des Masters festlegen

port 6301slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
Nach dem Login kopieren


slave2 Konfiguration redis_slave2.conf Slave

port 6302slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
Nach dem Login kopieren

daemonize als Master festlegen, um den Hintergrundstart anzuzeigen .
requirepass ist das Host-Authentifizierungskennwort.
masterauth Überprüfen Sie das Passwort für den Slave, um auf den Host zuzugreifen. Es muss mit dem Requirepass des Hosts übereinstimmen.
Da die Master-Slave-Umschaltung später demonstriert werden muss, sind die Verifizierungskennwörter der drei Conf-Sätze konsistent.

Redis-Master-Slave-Synchronisationstest

Master, Slave1, Slave2 nacheinander starten

redis-server redis_master.conf
redis-server redis_slave1.conf
redis-server redis_slave2.conf
Nach dem Login kopieren

Nach der Ausführung prüfen, ob der Start erfolgreich ist

ps aux|grep redis
root  1858  Ss  3:55  0:00.01 redis-server *:6302 root  1849  Ss  3:54  0:00.01 redis-server *:6301 root  1842  Ss  3:54  0:00.02 redis-server *:6300
Nach dem Login kopieren

Enter Master, setzen Sie den Wert des Schlüssels abc auf 123

redis-cli -p 6300127.0.0.1:6300> auth 123456OK127.0.0.1:6300> set abc 123OK127.0.0.1:6300> get abc"123"
Nach dem Login kopieren

Geben Sie Slave1 bzw. Slave2 ein, um zu überprüfen, ob die Daten synchronisiert sind
Slave1:

redis-cli -p 6301
127.0.0.1:6301> auth 123456OK127.0.0.1:6301> get abc"123"
127.0.0.1:6301>
Nach dem Login kopieren

Slave2:

redis-cli -p 6302
127.0.0.1:6302> auth 123456OK127.0.0.1:6302> get abc"123"
127.0.0.1:6302>
Nach dem Login kopieren

Geben Sie master einÄndern Sie den Wert des Schlüssels abc auf 456

127.0.0.1:6300> set abc 456OK127.0.0.1:6300> get abc"456"
Nach dem Login kopieren

Überprüfen Sie, ob Slave1 und Slave2 synchronisiert sind
Slave1:

127.0.0.1:6301> get abc"456"
Nach dem Login kopieren

Slave2:

127.0.0.1:6302> get abc"456"
Nach dem Login kopieren

Redis Master-Slave-Umschaltung

Während des Vorgangs, wenn ein Problem mit dem Master, wir können einen anderen Slave einrichten. Die Maschine wird automatisch auf Master gesetzt. Die Sentinel-Funktion von Redis wird hier hauptsächlich zur Implementierung der Master-Slave-Umschaltung verwendet.

sentinel1.conf

port 26301sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes
Nach dem Login kopieren

sentinel2.conf

port 26302sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes
Nach dem Login kopieren

sentinel Monitor Master 127.0.0.1 6300 2< Die 2 in 🎜> bedeutet, dass die Master-Slave-Umschaltung nur durchgeführt wird, wenn mehr als 2 Sentinel-Dienste einen Master-Ausfall erkennen.

Starten Sie zwei Sentinel-Prozesse

redis-server sentinel1.conf --sentinel
redis-server sentinel2.conf --sentinel
ps aux|grep redis
root  2643  Ss  4:28 0:00.02 redis-server *:26302 [sentinel]  
root  2636  Ss  4:28 0:00.02 redis-server *:26301 [sentinel]
Nach dem Login kopieren

Das Redis-Protokoll zeigt, dass der Start erfolgreich war, und starten Sie die Überwachung

Running mode=sentinel, port=26301.
Sentinel ID is 3a23343948cd7f26662ccba1d01b92955311ef52
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300Running mode=sentinel, port=26302.
Sentinel ID is ce0ee2af6b454205a3e475763945f505a10a7d6a
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300+sentinel sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 @ master 127.0.0.1 6300+sentinel sentinel ce0ee2af6b454205a3e475763945f505a10a7d6a 127.0.0.1 26302 @ master 127.0.0.1 6300
Nach dem Login kopieren

Beenden Sie den Master und Testen Sie den Master und den Slave. Nach dem Umschalten des

Kill Master-Prozesses stellt Sentinel fest, dass der Master ungültig ist, und führt einen Master-Slave-Umschaltvorgang durch.

Das Protokoll lautet wie folgt:

+failover-state-reconf-slaves master master 127.0.0.1 6300+slave-reconf-sent slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+config-update-from sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 +switch-master master 127.0.0.1 6300 127.0.0.1 6302+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6302+slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302-odown master master 127.0.0.1 6300+slave-reconf-inprog slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave-reconf-done slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+failover-end master master 127.0.0.1 6300+switch-master master 127.0.0.1 6300 127.0.0.1 6302+convert-to-slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302
Nach dem Login kopieren

Wie aus dem Protokoll ersichtlich ist, hat der Master-Slave-Schalter die folgenden Vorgänge ausgeführt:

1 . Switch

Slave2 Für den neuen Master wird Slaveof 127.0.0.1 6300 in redis_slave2.conf automatisch gelöscht.

2. Aktualisieren Sie Slaveof 127.0.0.1 6300 in redis_slave1.conf automatisch auf Slaveof 127.0.0.1 6302 und verwenden Sie Slave2 als neuen Master.

3.

Nachdem der ursprüngliche Master neu gestartet wurde, wird er als Slave verwendet und der Slave von 127.0.0.1 6302 wird automatisch zu redis_master.conf hinzugefügt.


Master-Slave-Synchronisationstest nach Neustart des Original-Masters durchführen

Original-MasterSchlüssel abc auf 888 aktualisieren, da dies der Fall ist Jetzt ein Sklave. Das Update ist also fehlgeschlagen.

127.0.0.1:6300> set abc 888(error) READONLY You can&#39;t write against a read only slave.
Nach dem Login kopieren

Slave2Schlüssel abc auf 888 aktualisieren

127.0.0.1:6302> set abc 888OK127.0.0.1:6302> get abc"888"
Nach dem Login kopieren

Original-Master, Slave1 prüft, ob er synchronisiert ist

Original-Master

127.0.0.1:6300> get abc"888"
Nach dem Login kopieren

Slave1

127.0.0.1:6301> get abc"888"
Nach dem Login kopieren
Nach der Inspektion, nach dem Master-Slave-Wechsel, fungiert Slave2 als neuer Master und andere Server dienen als Slaves und können normal verwendet werden.

In diesem Artikel werden die relevanten Vorgänge der Redis-Master-Slave-Synchronisierung und der Lese-/Schreibtrennungseinstellungen erläutert. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Einführung in die Methode zum Wiederherstellen der Tabellenpartition durch MySQL und zum Beibehalten von Daten

Relevante Inhalte zur PHP-Generierung einer eindeutigen RequestID-Klasse

php json_encode unterstützt die Lösung zum Objektieren privater Attribute nicht

Das obige ist der detaillierte Inhalt vonVerwandte Vorgänge der Redis-Master-Slave-Synchronisierung und der Lese-/Schreib-Trennungseinstellungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage