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.
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 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.
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.
und wird weiterhin beibehalten.
OneProxy:
Vitess:
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.
Offizielle Download-Homepage http://www.mycat.org.cn/
sudo useradd -M -N -s /sbin/nologin mycat && echo "123456" |. mycat/
MYCAT_HOME=/usr/local/mycat PATH=$MYCAT_HOME/bin:$PATH
< !DOCTYPE mycat:schema SYSTEM "schema.dtd">
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 .
und dann ohne Fehler starten Von Server 192.168.2.5 Konfigurieren Sie /etc/my.cnf
vim /etc/my.cnf ock
Versuchen Sie, sich anzumelden
Öffnen Sie den Slave-Server 192.168.2.5
vim /usr/local/mycat/conf/schema.xml
tail /usr/ local/mycat/logs/wrpper.log
in wrapper.conf hinzufügen // Timeout 300 Sekunden
wrapper.ping.timeout=120Das 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!