Dieser Artikel führt Sie in das relevante Wissen über die Lese- und Schreibtrennung von MySQL ein und hoffe, dass er Ihnen hilfreich sein wird.
Überblick über die Lese-/Schreibtrennung von MySQL
MySQL ist derzeit die am weitesten verbreitete kostenlose Datenbank der Welt. Ich glaube, dass alle Ingenieure, die sich mit Systembetrieb und -wartung befassen, damit in Berührung gekommen sein müssen.
In einer tatsächlichen Produktionsumgebung kann ein einzelnes MySQL als unabhängige Datenbank die tatsächlichen Anforderungen überhaupt nicht erfüllen, unabhängig von Sicherheit, hoher Verfügbarkeit und hoher Parallelität.
Daher werden Daten im Allgemeinen synchronisiert durch Master-Slave-Replikation und dann durch Lese-Schreib-Trennung (MySQL-Proxy/Amoeba), um die gleichzeitige Belastung der Datenbankfähigkeit zu erhöhen bereitstellen und umsetzen.
Das Funktionsprinzip der Lese- und Schreibtrennung
Das Grundprinzip ist:
-
Die Hauptdatenbank verarbeitet transaktionale Hinzufügungs-, Änderungs- und Löschvorgänge (INSERT, UPDATE, DELETE)
Verarbeitung von SELECT-Abfragevorgängen aus der Datenbank
Datenbankreplikation wird verwendet, um durch Transaktionsvorgänge verursachte Änderungen mit der Slave-Datenbank im Cluster zu synchronisieren.
Warum Lese- und Schreibtrennung? Nur Master-Slave. Verantwortlich für das jeweilige Schreiben und Lesen, wodurch X-(Schreib-)Sperren- und S-(Lesen-)Sperrenkonflikte erheblich gemindert werden. Die Myisam-Engine kann über die Datenbank konfiguriert werden, um die Abfrageleistung zu verbessern und Systemaufwand zu sparen Erhöhen Sie die Redundanz, verbessern Sie die Benutzerfreundlichkeit.
-
Möglichkeiten, eine Lese-/Schreibtrennung zu erreichen Und die Lese- und Schreibtrennung wird im Connector realisiert
-
Vorteile:
Die Lese- und Schreibtrennung wird innerhalb der Anwendung realisiert und die Installation kann verwendet werden, um bestimmte Bereitstellungsschwierigkeiten zu reduzieren
Der Zugriffsdruck liegt unter einem bestimmten Niveau und die Leistung ist sehr gut.
Sobald die Architektur angepasst ist, muss sich der Code entsprechend ändern Es ist schwierig, erweiterte Anwendungen wie automatische Unterbibliotheken und Untertabellen zu implementieren zur gemeinsamen Middleware, die die Lese-Schreib-Trennung in externen Middleware-Programmen implementiert. Es hat den Test in Alibaba bestanden. Aufgrund des Weggangs des Autors wurde Cobar nicht mehr aufrechterhalten, um Cobar zu ersetzen.
- MyCAT:
- Community-Enthusiasten führten eine Sekundärentwicklung auf Basis von Alibaba Cobar durch, lösten einige Probleme, die Cobar zu dieser Zeit hatte, und fügten viele neue Funktionen hinzu. Derzeit ist die MyCAT-Community sehr aktiv und einige Unternehmen nutzen MyCAT bereits. Im Allgemeinen liegt das Unterstützungsniveau über
und wird weiterhin beibehalten.
OneProxy:
- Ein großer Chef in der Datenbankbranche, der ehemalige Leiter des Alipay-Datenbankteams, Lou Zong, hat OneProxy basierend auf der offiziellen MySQL-Proxy-Idee mit c entwickelt und ist eine kommerzielle kostenpflichtige Middleware, die Lou Zong gegeben hat nach oben Einige Funktionspunkte wurden hinzugefügt, um den Schwerpunkt auf Leistung und Stabilität zu legen. Einige Leute haben es getestet und festgestellt, dass es bei hoher Parallelität sehr stabil ist.
Vitess:
-
Diese Middleware wird in der Youtube-Produktion verwendet, aber die Architektur ist sehr komplex. Anders als bei früherer Middleware sind die Anwendungsänderungen bei der Verwendung von Vitess relativ groß. Um die API-Schnittstelle der von ihm bereitgestellten Sprache zu nutzen, können wir von einigen seiner Designideen lernen.
Kingshard:
Kingshard wurde in ihrer Freizeit von Chen Fei vom ehemaligen 360Atlas-Middleware-Entwicklungsteam in der Go-Sprache entwickelt. Derzeit sind etwa drei Personen an der Entwicklung beteiligt kontinuierlich verbessert werden.
Atlas:
360-Team hat Lua in C basierend auf MySQL-Proxy neu geschrieben. Die Originalversion unterstützt Tabellen-Sharding und es wurde eine Shard-Datenbank- und Tabellenversion veröffentlicht. Ich habe einige Freunde im Internet gesehen, die oft sagten, dass es bei hoher Parallelität oft hängen bleibt. Wenn Sie es verwenden möchten, müssen Sie es im Voraus testen.
MaxScale und MySQL Route:
Diese beiden Middlewares gelten als offiziell von mariadb (eine Version, die vom ursprünglichen Autor von MySQL verwaltet wird). Die aktuelle Version unterstützt keine Sharding-Datenbanken und -Tabellen. MySQL Route ist eine Middleware, die jetzt von der offiziellen Oracle-Firma MySQL veröffentlicht wurde.
Vorteile:
Das Architekturdesign ist flexibler
Sie können einige erweiterte Steuerelemente im Programm implementieren, z. B. transparente horizontale Aufteilung, Failover und Überwachung. Sie können sich auf technische Mittel verlassen, um das zu verbessern Auswirkungen der MySQL-Leistung auf den Geschäftscode. Klein und sicher zugleich. Nachteile: Erfordert die Unterstützung eines bestimmten Entwicklungs- und Betriebsteams.
- Was ist MyCAT?? Es kann als MySQL-Cluster-Datenbank auf Unternehmensebene angesehen werden, die teure Oracle-Cluster ersetzt.
Ein neuer SQL Server, der Speicher-Caching-Technologie, NoSQL-Technologie und HDFS-Big Data integriert. Kombiniert traditionelle Datenbanken und neue verteilte Data Warehouses. Eine neue Generation von Datenbankprodukten auf Unternehmensebene. Ein neuartiges Datenbank-Middleware-Produkt. Installation und Konfiguration des MyCat-Dienstes. MyCat bietet kompilierte Installationspakete, die Windows unterstützen und Linux, Mac, Solaris und andere Systeme zum Installieren und Ausführen
Mycat herunterladen wget http:/ /dl .mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
- bin-Programmverzeichnis, zuerst chmod +x *
Hinweis: Mycat unterstützt Befehle { console start |. dump }. Konfigurationsdateien werden im conf-Verzeichnis gespeichert .xml ist die Konfigurationsdatei für die Mycat-Serverparameteranpassung und Benutzerautorisierung. schema.xml ist die Konfigurationsdatei für die Definition der logischen Bibliothek, die Tabellen- und Sharding-Regel.xml ist die Konfigurationsdatei für Sharding-Regeln und einige spezifische Parameterinformationen für das Sharding Speichern Sie es als separate Datei, ebenfalls in diesem Verzeichnis. Wenn die Konfigurationsdatei geändert wird, müssen Sie Mycat neu starten, damit sie wirksam wird.
Im lib-Verzeichnis werden hauptsächlich einige JAR-Dateien gespeichert, von denen mycat abhängt.
Das Protokoll wird in logs/mycat.log gespeichert, eine Datei pro Tag. Je nach Bedarf können Sie die Ausgabeebene auf Debug-Ebene anpassen ausgegeben, um die Fehlersuche zu erleichtern.
MyCat-Dienststart und Starteinstellungen
Starten Sie den Dienst- /usr/local/mycat/bin/mycat start
- cat /usr/local/mycat/logs/wrapper.log
-
mycat der Benutzer. Die Konto- und Autorisierungsinformationen werden in der Datei conf/server.xml konfiguriert Hier können Sie sich unter 192.168.2.2 bei mycat anmelden. Benutzername und Passwort, der Name kann angepasst werden. Der mysqld-Dienst läuft nicht auf 192.168.2.2. Der in den Schemata angegebene Datenbankname ist eine Datenbank, die auf der Serverseite vorhanden sein muss!
MyCAT-Konfigurationsdateischema bearbeiten xml{,.bak}Konfigurationsdatei bearbeiten
vim /usr/local/mycat/conf/schema.xml
< !DOCTYPE mycat:schema SYSTEM "schema.dtd"> "> Achten Sie hier auf die URL, falsches Schreiben führt dazu, dass der Start fehlschlägt!
< "mydata"/>
balance="1" writeType="0" dbType="mysql" dbDriver="native "SwitchType =" -1 " Slavethreshold =" 100 "& gt; .3: 3306" user = "mycat" password = "123456" & gt;Erzwingen Sie die Ausführung aller Lesevorgänge auf dem Leseserver und wechseln Sie nur zum Schreibserver, wenn Daten geschrieben werden
Beachten Sie, dass der mycat-Benutzer hier für die Master-Slave-Datenbank 192.168 autorisiert sein muss. 2.3 und 2.5
GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'mycat'@'%' IDENTIFIED BY '123456';
oder ein bestimmtes Netzwerksegment
GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'mycat '@' 192.168.2.%' IDENTIFIED BY '123456';
Flush-Privilegien;
Wenn dieser Fehler gemeldet wird und der Server normal läuft, prüfen Sie zunächst, ob eine Autorisierung vorliegt
ERR ODER 1184 (HY000): Ungültige Datenquelle: 0
Schema: Logische Bibliothek, entsprechend der Datenbank in MySQL, eine logische Bibliothek, definiert das Eingebundene Tisch .
Tabelle: Tabelle, d. h. eine in einer physischen Datenbank gespeicherte Tabelle. Hier muss die Tabelle den logischen Datenknoten DataNode deklarieren, den sie speichert. Dies wird durch die Definition von Sharding-Regeln für die Tabelle erreicht. Eine Tabelle kann die „childTable“ definieren, zu der sie gehört. Das Sharding der untergeordneten Tabelle hängt von der spezifischen Sharding-Adresse der „übergeordneten Tabelle“ ab. Einfach ausgedrückt handelt es sich um alle untergeordneten Tabellen, die zu einem bestimmten Datensatz A in der übergeordneten Tabelle gehören Die Datensätze werden alle auf demselben Shard wie A gespeichert.
Sharding-Regel: Es handelt sich um eine gebündelte Definition eines Felds und einer Funktion. Basierend auf dem Wert dieses Felds wird die Sequenznummer des gespeicherten Shards (DataNode) zurückgegeben. Jede Tabelle kann eine Sharding-Regel definieren Standardmäßig werden Zahlenbasierte Sharding-Regeln, String-Sharding-Regeln usw. flexibel erweitert.
dataNode: Der logische Datenknoten von MyCAT ist ein bestimmter physischer Knoten, der Tabellen speichert. Er wird im Allgemeinen über DataSource mit einer bestimmten Back-End-Datenbank verknüpft ist mit zwei DataSources eingerichtet, einer Master- und einer Slave-Knoten. Wenn der Master-Knoten ausfällt, schaltet das System automatisch auf den Slave-Knoten um.
dataHost: Definieren Sie die Zugriffsadresse einer physischen Bibliothek für die Bindung an dataNode.
MyCAT definiert derzeit logische Bibliotheken und zugehörige Konfigurationen über Konfigurationsdateien:
Logische Bibliotheken, Tabellen, Shard-Knoten und andere Inhalte sind in MYCAT_HOME/conf/schema.xml definiert;
Sharding ist in MYCAT_HOME/conf/rule.xml definiert.
Definieren Sie benutzer- und systembezogene Variablen wie Ports usw. in MYCAT_HOME/conf/server.xml.
Hinweis:
Das Schema-Tag wird verwendet, um den Namen der logischen Bibliothek in der MyCat-Instanz zu definieren: Darauf folgt der Name der logischen Bibliothek, und jede logische Bibliothek verfügt über eine eigene zugehörige Konfiguration. Sie können Schema-Tags verwenden, um diese verschiedenen logischen Bibliotheken zu unterteilen.
Das checkSQLschema-Attribut ist standardmäßig auf „false“ eingestellt. Das offizielle Dokument gibt an, ob der Name der Datenbank vor der Tabelle entfernt werden soll: „select * from db1.testtable“. Wenn der Name von db1 jedoch nicht der Name des Schemas ist, wird er nicht entfernt. Daher wird offiziell empfohlen, diese Syntax nicht zu verwenden. Standardmäßig ebenfalls auf „false“ gesetzt.
sqlMaxLimit Wenn der Wert auf eine bestimmte Zahl gesetzt ist. Wenn für jede ausgeführte SQL-Anweisung keine Limit-Anweisung hinzugefügt wird, fügt MyCat automatisch den entsprechenden Wert hinzu. Wenn Sie beispielsweise den Wert auf 100 setzen und „select * from test_table“ ausführen, ist der Effekt „select * from test_table limit 100“. Das dataNode-Tag definiert die Datenknoten in MyCat, was wir normalerweise als Daten-Sharding bezeichnen .
- Starten Sie den Dienst neu
- /usr/local/mycat/bin/mycat restart
Stoppen des Mycat-Servers...
Stoppen des Mycat-Servers.
Starten des Mycat-Servers...
tail /usr/local/ mycat/logs/wrapper.log
MySQL-Master-Slave konfigurieren
- Mariadb auf jeweils 2 Servern installieren und konfigurieren. Weitere Informationen finden Sie unter: https://blog.csdn. net/ gaofei0428/article/details/103829676?spm=1001.2014.3001.5501
Zuerst auf der Hauptdatenbankseite 192.168.2.3 Edit. /etc/my.cnf
- /etc/my .cn f
[ mysqld]
datadir =/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-bin=/data/mysql/mysql-bin
server-id =1 replicate-do- db=mydata
lower_case_table_names=1 Case Matching aktivieren
Beachten Sie, dass die Datenbank, die synchronisiert werden muss, im Voraus vorhanden sein muss
und dann ohne Fehler starten Von Server 192.168.2.5 Konfigurieren Sie /etc/my.cnf
vim /etc/my.cnf ock- symbolic-links=0
log-bin=/data/mysql/mysql-bin server-id=2 Relay-log-index=/data/mysql/slave-relay-bin.index Relay-log=/ data/mysql/slave-relay-bin
Lower_case_table_names=1 - read_only=1 Turn im schreibgeschützten Modus, um das Zurückschreiben von Daten zu verhindern und hat keinen Einfluss auf die synchrone Slave-Replikation.
lower_case_table_names=1 Aktivieren Sie den Fallvergleich den Slave des Slave-Servers und erstellen Sie einen Slave-Datenbankbenutzer
mysql -uroot -p123456 -e "Slave stoppen"
mysql -uroot -p123456 -e "Grant Replication Slave on *.* to 'slave'@'%' identifiziert von '123456'"
mysql -uroot -p123456 -e "Benutzer und Passwort von mysql.user auswählen"
- mysql -uroot -p123456 -e " Master in master_host='192.168.2.3',master_user ändern ='slave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=245;"
mysql -uroot -p123456 -e "Slave starten" - mysql -uroot -p123456 -e "Slave-Status anzeigen „
Test
Exportieren Sie zunächst das Backup aller Bibliotheken des Hauptservers 192.168.2.3
mysqldump -uroot -p --all-databases > /tmp/ all_dbs .sql Dann vom Server 192.168.2.5 importieren
mysql -uroot -p < /tmp/all_dbs.sql
- Fügen Sie 192.168.2.3 im Hauptverzeichnis hinzu Datenbankseite Beobachten Sie bei einigen Daten, ob die Slave-Datenbank synchronisiert ist dann den Master erneut wechseln
Slave-Benutzeranmeldung verwenden Zurück zum Mycat-Server 192.168.2.2
Versuchen Sie, sich anzumelden
mysql -uroot - p123456 -h192.168.2.2 -P8066
8066 ist die Portnummer, wenn mycat ausgeführt wird
- Lese- und Schreibtrennung testen
mysql -uroot -p123456 -h192 .168.2.2 -P9066 -e "show @@datasource"- 9066 ist die Mycat-Verwaltung. Port
- select * von mydata.mylist;
Daten schreiben oder Daten ändern - insert into mydata.mylist Values(10,'test');
- Simulieren Sie einen Fehler, Stoppen Sie zuerst den Slave-Server 192.168.2.5.
systemctl stoppt mariadb.service.
Auf Hauptserver 192.168.2.3 anzeigen
-
Öffnen Sie den Slave-Server 192.168.2.5
Simulieren Sie den Hauptserver. 192.168.2.3 Ausfallzeit
- Die Abfrage ist normal, es wird versucht, Daten zu schreiben.
- Die Abfrage ist normal, kann aber nicht geschrieben werden m cat /usr/ local/mycat /conf/server.xml
vim /usr/local/mycat/conf/schema.xml
< ;dataNode name="dn2" dataHost="dthost1" Database="wordpress"/>
-
-
- Nach dem Hinzufügen des Neustartdienstes
/usr/local/ mycat/bin/mycat restart
tail /usr/ local/mycat/logs/wrpper.log
FehlerbehandlungStart fehlgeschlagen: Zeitüberschreitung beim Warten auf ein Signal von der JVM. JVM wurde auf Anfrage nicht beendet, beendet-
- Lösung
-
wrapper.startup.timeout=300 in wrapper.conf hinzufügen // Timeout 300 Sekunden
wrapper.ping.timeout=120
Empfohlen Lernen: - MySQL-Video-Tutorial
Das obige ist der detaillierte Inhalt vonLassen Sie uns über Mycats Implementierung der Lese- und Schreibtrennung von MySQL-Clustern sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!