Die Lese-Schreib-Trennung basiert auf der Master-Slave-Replikation. In einer tatsächlichen Anwendungsumgebung muss es viele Lesevorgänge geben. Genauso wie wenn wir etwas auf einer E-Commerce-Plattform kaufen, kaufen wir möglicherweise nur ein oder zwei, nachdem wir uns 100 Artikel angesehen haben. Daher gibt es immer viel mehr Lesevorgänge als Schreibaktualisierungsvorgänge. Daher bedeutet unsere auf Master-Slave-Replikation basierende Konfiguration der Lese-/Schreibtrennung, dass eine Master-Datenbank ausschließlich für die Änderung von Daten vorgesehen ist. Beim Schreiben werden Datenänderungen ausschließlich auf der Master-Datenbank synchronisiert Replikation über die Binlog-Bibliothek, dann werden andere Client-Abfrageanforderungen schließlich der Slave-Bibliothek zugeordnet, und wir haben eine Hauptbibliothek mit zwei oder drei Slave-Bibliotheken. Die Hauptbibliothek wird speziell zum Aktualisieren von Daten (Schreibvorgänge) und dem Slave verwendet Die Bibliothek wird speziell zum Aktualisieren von Daten (Schreibvorgängen) verwendet, wodurch der Druck beim Lesen und Schreiben gut verteilt werden kann. Sie muss sich nicht auf die Hauptdatenbank konzentrieren Darüber hinaus bietet es eine hohe Verfügbarkeit und Notfallwiederherstellung. Wenn die Hauptbibliothek ausfällt, kann die angegebene Slave-Bibliothek in die Hauptbibliothek umgewandelt werden.
Der MySQL-Client verwendet die von MySQL bereitgestellte API, um mit MySQL Server zu kommunizieren und über das angepasste TCP-basierte Datenprotokoll von MySQL (als MySQL-Protokoll bezeichnet) auf die MySQL Server-Datenbank zuzugreifen. Wenn nur ein Server vorhanden ist (eigenständige Umgebung), werden alle Datenergänzungen, -löschungen, -änderungen und -abfragen auf einem Server durchgeführt. Da unsere Dienste von immer mehr Menschen genutzt werden, nimmt der Datenverkehr allmählich zu und der Bedarf an Die Parallelität nimmt allmählich zu. Wenn wir also feststellen, dass die Datenbankleistung einen Engpass erreicht, können wir Lese-/Schreib-Trennvorgänge durchführen, um die Hintergrunddienste zu verbessern. Der MySQL-Hauptserver im Bild ist für Schreibvorgänge vorgesehen, und unten sind zwei MySQL-Slave-Server angeschlossen, die speziell Leseanforderungen an B und C und Schreibanforderungen an A weiterleiten. Wenn wir den Code direkt auf dem Client schreiben, werden Schreibvorgänge wie Einfügen und Aktualisieren auf A und Lesevorgänge wie Anzeigen und Auswählen auf B und C ausgeführt. Dies entspricht einer starken Bindung zwischen dem Code und die Master-Slave-Umgebung. Dies führt zu einer schlechten Stabilität des Codes, da er stark von der Umgebung abhängt. Wenn wir Code schreiben, müssen wir wissen, welche Maschine die Hauptbibliothek ist, die für Schreibvorgänge verantwortlich ist, und welche Maschine die Slave-Bibliothek ist, die für Lesevorgänge verantwortlich ist Code wählt . Wenn zu diesem Zeitpunkt ein bestimmter Computer auflegt, erkennt der Code dies nicht und leitet die Anfrage trotzdem auf die ursprüngliche Weise weiter, und es treten Kommunikationsprobleme auf. Daher ist es definitiv nicht angebracht, die Trennung von Lesen und Schreiben zu implementieren Code. In der eigentlichen Lösung muss sich die Lese-Schreib-Trennung also auf die Middleware der Datenbank verlassen.Zweitens stellen wir die Middleware MyCat vorTatsächlich muss die Trennung von Lesen und Schreiben sowie die Abhängigkeit von Unterdatenbanken und Tabellen auf der Datenbank-Middleware (Mycat) beruhen, und Mycat ist die Rolle des Proxyservers.
Der Client kann nicht wirklich erkennen, ob er mit MyCat oder MySQL verbunden ist, da die Kommunikation dem MySQL-Kommunikationsprotokoll folgt, so wie Sie jetzt mit MyCat kommunizieren, sodass keine Unterscheidung erforderlich ist.
Durch die Konfiguration der Lese-/Schreibtrennung auf MyCat müssen wir keine Änderungen am Code auf dem Client vornehmen. Es ist nicht erforderlich, zu unterscheiden, welche Anfrage gelesen und welche geschrieben wird. Der Code greift direkt auf MyCat zu. und MyCat analysiert die Anfrage und leitet sie entsprechend der Lese- und Schreibnatur von SQL an den Server weiter, der für die entsprechende Operation verantwortlich ist, um eine Lese- und Schreibtrennung zu erreichen.
Sie müssen die Informationen des Master-Servers und der Slave-Server auf MyCat konfigurierenEs gibt drei Situationen: Ein Master und ein Slave, ein Master und mehrere Slaves und mehrere Master und mehrere Slaves
Ein Master und Szenario mit mehreren Slaves: Wenn das Schreiben einer Bibliothek (Master) aufhängt, kann MyCat eine Slave-Bibliothek (Slave) auch sofort direkt in eine Schreibbibliothek (Master) umwandeln, was einer Rückkehr zur Verarbeitung einer Maschine entspricht, da keine vorhanden ist Master-Slave zwischen der Slave-Bibliothek und der Slave-Bibliotheks-Replikationskonfiguration, daher müssen wir auch die Slave-Bibliothek in eine Schreibbibliothek umwandeln und die Master-Slave-Replikation mit anderen Slave-Bibliotheken konfigurieren. Mehrere Master und mehrere Slaves:
Wie Sie im Bild sehen können, verfügt der MyCat-Server über zwei Gruppen von Umgebungen. Wenn die Master-Datenbank einer von ihnen ausgefallen ist (die entsprechende Slave-Datenbank ist ebenfalls ausgefallen). nicht verfügbar) , zu diesem Zeitpunkt wechselt MyCat automatisch zu einer anderen Gruppe von Umgebungen, da M1 und M2 auch als gegenseitige Master-Slave
konfiguriert sind, sodass M2 die Daten von M1 synchronisieren und genau die gleichen Dienste wie die M1-Umgebung bereitstellen kann, Daher sind die Hochverfügbarkeits- und Disaster-Recovery-Funktionen sehr gut.3. MyCat-Service-Port und Verwaltungs-Port
MySQL-Service-Port ist 3306, MyCat-Service-Port ist 8066 (dieser Port kann auch geändert werden), das heißt, der MySQL-Client stellt eine Verbindung zu Port 8066 her und meldet sich bei Port 8066 an siehe Die Schnittstelle ist dieselbe wie die Anmeldung bei MySQL Server über Port 3306.
MyCat verfügt außerdem über einen Verwaltungsport 9066Das obige ist der detaillierte Inhalt vonWas ist das Prinzip der MySQL-Lese- und Schreibtrennung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!