Beispiel für die Verwendung von mycat zur Implementierung der Lese-/Schreibtrennung in MySQL-Datenbanken

Beispiel für die Verwendung von mycat zur Implementierung der Lese-/Schreibtrennung in MySQL-Datenbanken

Was ist MyCAT

  1. Ein vollständig Open Source-Großdatenbankcluster für die Entwicklung von Unternehmensanwendungen
  2. Eine erweiterte Datenbank, die Transaktionen und ACID unterstützt und MySQL ersetzen kann
  3. Eine Datenbank der Enterprise-Klasse, die als MySQL-Cluster betrachtet werden kann und teure Oracle-Cluster ersetzt
  4. Ein neuer SQL Server, der Memory-Cache-Technologie, NoSQL-Technologie und HDFS-Big-Data integriert
  5. Eine neue Generation von Datenbankprodukten auf Unternehmensebene, die traditionelle Datenbanken mit neuen verteilten Data Warehouses kombiniert
  6. Ein neuartiges Datenbank-Middleware-Produkt

Hauptfunktionen von MyCAT

  1. Unterstützt den SQL92-Standard
  2. Unterstützt gängige SQL-Syntax für MySQL, Oracle, DB2, SQL Server, PostgreSQL usw.
  3. Ein universeller Middleware-Proxy, der dem nativen MySQL-Protokoll entspricht und sprach-, plattform- und datenbankübergreifend ist.
  4. Heartbeat-basiertes automatisches Failover, Unterstützung für Lese- und Schreibtrennung, Unterstützung für MySQL Master-Slave und Galera-Cluster.
  5. Unterstützt Galera für MySQL-Cluster, Percona-Cluster oder MariaDB-Cluster
  6. Basierend auf der Nio-Implementierung verwaltet es Threads effektiv und löst Probleme mit hoher Parallelität.
  7. Es unterstützt die automatische Weiterleitung und Aggregation mehrerer Datenstücke, allgemeine Aggregatfunktionen wie Summe, Anzahl, Maximum und datenbankübergreifende Paging.
  8. Es unterstützt beliebige Verknüpfungen innerhalb einer einzelnen Datenbank, Verknüpfungen zwischen zwei Tabellen über mehrere Datenbanken hinweg und sogar Verknüpfungen mehrerer Tabellen basierend auf Calllets.
  9. Es unterstützt Sharding-Strategien durch globale Tabellen und ER-Beziehungen und implementiert effiziente Multi-Table-Join-Abfragen.
  10. Unterstützt Multi-Tenant-Szenarien.
  11. Unterstützt verteilte Transaktionen (schwaches xa).
  12. Unterstützung für verteilte XA-Transaktionen (1.6.5).
  13. Unterstützt globale Seriennummern, um das Problem der Primärschlüsselgenerierung in verteilten Systemen zu lösen.
  14. Umfangreiche Sharding-Regeln, Plug-in-Entwicklung und einfache Erweiterung.
  15. Leistungsstarke Web- und Befehlszeilenüberwachung.
  16. Das Front-End unterstützt MySQL als allgemeinen Proxy und die JDBC-Methode des Back-Ends unterstützt Oracle, DB2, SQL Server, MongoDB und Sequoia.
  17. Unterstützt die Kennwortverschlüsselung
  18. Herabstufung des Support-Dienstes
  19. Unterstützt IP-Whitelists
  20. Unterstützt SQL-Blacklist und Abfangen von SQL-Injection-Angriffen
  21. Unterstützt die Vorbereitung von Vorkompilierungsanweisungen
  22. Unterstützt Aggregationsberechnungen im Nicht-Heap-Speicher (Direct Memory)
  23. Unterstützt das native PostgreSQL-Protokoll
  24. Unterstützt gespeicherte Prozeduren in MySQL und Oracle, Ausgabeparameter und die Rückgabe mehrerer Ergebnismengen
  25. Unterstützt die Zookeeper-Koordination von Master-Slave-Umschaltung, ZK-Sequenz und ZK-Konfiguration
  26. Unterstützt Tabellenpartitionierung innerhalb der Datenbank
  27. Der Cluster basiert auf ZooKeeper-Verwaltung, Online-Upgrade, Kapazitätserweiterung, intelligenter Optimierung und Big Data-Verarbeitung (Entwicklungsversion 2.0).

1. Hier wird mycat basierend auf der Implementierung der MySQL-Master-Slave-Replikation zur Lese- und Schreibtrennung verwendet. Das Architekturdiagramm ist wie folgt:

2. Demo

2.1 Erstellen Sie eine Datenbank auf dem MySQL-Master. Erstellen Sie db1

2.2 Tabelle „Student“ in Datenbank db1 erstellen

Da die MySQL-Master-Slave-Replikation konfiguriert ist, befinden sich gleichzeitig auch die gleichen Datenbanken und Tabellen auf dem MySQL-Slave

2.3 Bearbeiten Sie die Mycat-Konfigurationsdatei server.xml

   <!-- gibt den Login-Benutzernamen von mycat an -->
  <Benutzername="test">
        <!-- gibt das Anmeldekennwort von mycat an -->
        <property name="password">test</property>
         <!-- gibt den logischen Datenbanknamen von mycat an, der angepasst werden kann -->
        <Eigenschaftsname="schemas">TESTDB</Eigenschaft>
    </Benutzer>

    <Benutzername="Benutzer">
        <property name="password">Benutzer</property>
        <Eigenschaftsname="schemas">TESTDB</Eigenschaft>
        <Eigenschaftsname="readOnly">wahr</Eigenschaft>
    </Benutzer>

2.4 Bearbeiten Sie die mycat-Konfigurationsdatei schema.xml

<!--TESTDB stellt den logischen Datenbanknamen von mycat dar. Wenn der Schemaknoten keine untergeordnete Knotentabelle hat, muss das Attribut dataNode vorhanden sein (auf die echte MySQL-Datenbank verweisend).
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <!--Geben Sie die Masterdatenbank db1 an-->
    <dataNode name="dn1" dataHost="192.168.0.4" database="db1" />
    <!--Geben Sie die Masteret-IP an -->
    <dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3"
        writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <!--Zeigt den Heartbeat-Status von MySQL an-->
        <heartbeat>Benutzer auswählen()</heartbeat>
        <!-- Master ist für das Schreiben zuständig -->
        <writeHost host="hostM1" url="192.168.0.4:3306" Benutzer="root"
            Passwort="admin">
        <!--Slave ist für das Lesen zuständig-->
        <readHost host="hostS2" url="192.168.0.5:3306" Benutzer="root" Passwort="admin" />
        </writeHost>
</dataHost>

Zu diesem Zeitpunkt ist die Konfiguration der Verwendung von mycat zur Lese-/Schreibtrennung abgeschlossen

Beachten Sie die folgenden drei Eigenschaften des dataHost-Knotens

Balance, Schaltertyp, Schreibtyp

balance="0", der Lese-/Schreibtrennungsmechanismus ist nicht aktiviert und alle Lesevorgänge werden an den aktuell verfügbaren Schreibhost gesendet.

Balance = "1", alle ReadHosts und Standby-WriteHosts nehmen am Lastausgleich der Select-Anweisung teil. Einfach ausgedrückt, im Dual-Master- und Dual-Slave-Modus (M1->S1, M2->S2 und M1 und M2 sind gegenseitig Master und Slave) nehmen unter normalen Umständen M2, S1 und S2 alle am Lastausgleich der Select-Anweisung teil.

Balance = "2", alle Lesevorgänge werden zufällig auf WriteHost und Readhost verteilt.

Balance = "3", alle Leseanforderungen werden zur Ausführung zufällig an den Readhost unter WriteHost verteilt, und WriteHost trägt keinen Lesedruck

writeType gibt den Schreibmodus an

writeType="0", alle Operationen werden an den ersten konfigurierten Writehost gesendet

writeType="1", nach dem Zufallsprinzip an alle konfigurierten Schreibhosts senden

writeType="2", es wird kein Schreibvorgang ausgeführt

switchType bezieht sich auf den Umschaltmodus und derzeit gibt es 4 mögliche Werte:

switchType='-1' bedeutet keine automatische Umschaltung

switchType='1' Standardwert, zeigt automatisches Umschalten an

switchType='2' bestimmt, ob basierend auf dem Status der MySQL-Master-Slave-Synchronisierung gewechselt werden soll. Die Heartbeat-Anweisung lautet show slave status

switchType='3' basiert auf dem Umschaltmechanismus des MySQL-Galary-Clusters (geeignet für Cluster) (1.4.1), und die Heartbeat-Anweisung zeigt den Status wie „wsrep%“ an.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Springboot + Mysql8 realisiert Lese-/Schreibtrennungsfunktion
  • Springboot implementiert Lese-/Schreibtrennung basierend auf Mybatis MySQL
  • Erstellen Sie einen stabilen und hochverfügbaren Cluster basierend auf MySQL + MyCat, Lastausgleich, Master-Slave-Replikation und Lese-/Schreibtrennung
  • Beispiel für eine in PHP implementierte Lese-/Schreibtrennungsoperation von MySQL
  • Detaillierte Erläuterung der Konfigurationsmethode der Lese-/Schreibtrennung bei der MySQL-Master-Slave-Replikation
  • PHP+MYSQL implementiert eine einfache Praxis der Lese-/Schreibtrennung
  • Allgemeine Lösungen für das Ablaufen der Lese-/Schreibtrennung in MySQL

<<:  Detaillierte Erläuterung der nahtlosen horizontalen LVM-Festplattenerweiterung basierend auf Linux

>>:  Detaillierte Erläuterung zur Verwendung von Node.js zum Implementieren einer Hot-Reload-Seite

Artikel empfehlen

Beispiel für Formularaktion und „onSubmit“

Erstens: Aktion ist ein Attribut des Formulars. HT...

js implementiert einen einfachen Rechner

Verwenden Sie natives JS, um einen einfachen Rech...

Entwicklungsdetails von Vue3-Komponenten

Inhaltsverzeichnis 1. Einleitung 2. Komponentenen...

Docker generiert Bilder über Container und übermittelt DockerCommit im Detail

Inhaltsverzeichnis Nachdem Sie einen Container lo...

Detailliertes Beispiel der CSS3-Boxschatteneigenschaft

CSS3 – Schatten hinzufügen (mithilfe von Boxschat...

So kapseln Sie Axios-Anfragen mit Vue

Tatsächlich ist es sehr einfach, Axios in Vue zu ...

Vergleichstabelle für HTML-Sondersymbole auf Webseiten

Sondersymbole Benannte Entitäten Dezimalkodierung...

Vue + SSM realisiert den Vorschaueffekt beim Hochladen von Bildern

Die aktuelle Anforderung lautet: Es gibt eine Sch...

Nginx-Lastausgleichskonfiguration, automatischer Umschaltmodus bei Ausfallzeiten

Streng genommen verfügt nginx nicht über eine Int...

So übertragen Sie Dateien zwischen Windows und Linux

Dateiübertragung zwischen Windows und Linux (1) V...

Führt diese SQL-Schreibmethode wirklich dazu, dass der Index fehlschlägt?

Vorwort Im Internet gibt es häufig Artikel, die v...

Entmystifizierung des HTML 5-Arbeitsentwurfs

Das World Wide Web Consortium (W3C) hat einen Entw...

So berechnen Sie mit Linux den von zeitgesteuerten Dateien belegten Speicherplatz

Öffnen Sie den Editor für geplante Aufgaben. Cent...