Bei der Optimierung der Datenbankleistung wird im Allgemeinen Clustering eingesetzt. Die Investition in Oracle-Clustersoftware und -hardware ist teuer. Heute habe ich einen Tag damit verbracht, eine Clusterumgebung auf Basis von MySQL aufzubauen. Hauptideen Einfach ausgedrückt: Implementieren Sie die MySQL Master-Slave-Replikation --> verwenden Sie mycat, um einen Lastenausgleich zu erreichen. Nach einem Vergleich der häufig verwendeten Methoden zur Lese- und Schreibtrennung wird mycat aufgrund seiner aktiven Community und stabilen Leistung empfohlen. Testumgebung MYSQL-Version: Serverversion: 5.5.53. Sie können das WINDWOS-Installationspaket von der offiziellen Website herunterladen. Hinweis: Stellen Sie sicher, dass die MySQL-Version 5.5 oder höher ist. Die Konfigurationsmethode für die Master-Slave-Synchronisierung ist bei früheren Versionen anders. Die Implementierungsidee von Linux ist ähnlich, ändern Sie einfach my.cnf.
Implementierung der MySQL Master-Slave-Replikation Die Grundidee ist: Das Haupt-MySQL von A beginnt mit der Protokollierung, das Standby-MySQL von B liest das Vorgangsprotokoll und führt es synchron aus. Im Allgemeinen wird die Master-Slave-Synchronisierung verwendet, eine Master-Master-Synchronisierung wird nicht empfohlen. Konfigurieren Sie einen Master-MySQL 1) Ändern Sie my.ini. Sie müssen ein Protokollverzeichnis und eine Datei mysql-bin.log am entsprechenden Speicherort log-bin="C:/Programme/MySQL/MySQL Server 5.5/log/mysql-bin.log" erstellen. [mysqld] server-id=1 #Hostkennung, Integer-Port=3306 log-bin="C:/Programme/MySQL/MySQL Server 5.5/log/mysql-bin.log" #Stellen Sie sicher, dass diese Datei beschreibbar ist read-only=0 #Host, sowohl Lesen als auch Schreiben sind möglich binlog-do-db=sync_test #Datenbank muss gesichert werden, mehrere Zeilen schreiben binlog-ignore-db=mysql #Datenbanken, die nicht gesichert werden müssen, mehrere Zeilen schreiben 2) Erlauben Sie den MySQL-Fernzugriff #Melden Sie sich bei der MySQL-Konsole an Geben Sie %home%/bin ein und führen Sie mysql -uroot -proot aus #Genehmigung. Erlauben Sie dem Root-Benutzer den Remotezugriff auf einen MySQL-Master aus dem IP-Bereich 192.168.110.* mysql>GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'root'@'192.168.110.*', IDENTIFIZIERT DURCH 'root' MIT GRANT-OPTION; # Wirksam werden. Dieser Vorgang ist sehr wichtig! mysql> FLUSH-PRIVILEGIEN; 3) Starten Sie die A-Master-MySQL-Datenbank neu Geben Sie %home%/bin ein und führen Sie mysql -uroot -proot aus mysql>net stop mysql; mysql>net start mysql; 4) Überprüfen Sie den Hauptstatus des MySQL-Protokolls mysql> Masterstatus anzeigen\G; *************************** 1. Reihe *************************** Datei:mysql-bin.000003 Position: 107 Binlog_Do_DB: sync_test Binlog_Ignore_DB: mysql 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben Konfigurieren Sie B Standby MySQL 1) Ändern Sie my.ini. Sie müssen ein Protokollverzeichnis und eine Datei mysql-bin.log am entsprechenden Speicherort log-bin="C:/Programme/MySQL/MySQL Server 5.5/log/mysql-bin.log" erstellen. [mysqld] # für Synchronisierungstest hinzufügen server-id=2 #Slave-ID log-bin="C:/Programme/MySQL/MySQL Server 5.5/log/mysql-bin.log" #Stellen Sie sicher, dass diese Datei beschreibbar ist #master-host="192.168.110.1" #Host-IP #master-user=root #Benutzername für den Datenbankzugriff#master-pass=root #Passwort für den Datenbankzugriff#master-port=3306 #Host-Port#master-connect-retry=60 #Wenn der Slave-Server feststellt, dass die Verbindung zum Master-Server getrennt ist, die Zeitdifferenz (in Sekunden) für die erneute Verbindung replicate-do-db=sync_test #Repliziert nur eine bestimmte Datenbank replicate-ignore-db=mysql #Repliziert keine bestimmte Datenbank 2) Starten Sie die B-Standby-MySQL-Datenbank neu Geben Sie %home%/bin ein und führen Sie mysql -uroot -proot aus mysql>net stop mysql; mysql>net start mysql; 3) Konfigurieren Sie die Datenquelle der Standby-Datenbank B und überprüfen Sie, ob der Status des hervorgehobenen Bereichs normal ist. mysql>ändere Master in master_host='192.168.110.1',master_port='3306',master_user='root',master_password='root'; mysql>Slave-Start; mysql>Slave-Status anzeigen\G; *************************** 1. Reihe *************************** Slave_IO_State: Wartet auf das Senden eines Masters Master_Host: 192.168.110.1 Master_Benutzer: root Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 107 Relay_Log_File: wjt-1c698d8a032-relay-bin.00001 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replizieren_Do_DB:sync_test Replicate_Ignore_DB: mysql Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 107 Relay_Log_Space: 565 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 1 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben Überprüfen der Ergebnisse der Synchronisierungskonfiguration
Realisieren Sie die Lese-/Schreibtrennung Die Hauptidee besteht darin, Mycat-Middleware zu verwenden, um SQL-Befehle an den MySQL-Backend-Knoten weiterzuleiten. mycat ist nicht für die Datenbanksynchronisierung verantwortlich. Installieren Sie mycat Was ist Mycat? Es kann als Middleware für den Datenbankzugriff betrachtet werden, ähnelt jedoch eher Produkten wie f5 und ngnix und verfügt über Funktionen wie Zugriffsrouting, Sharding-Operationen für mehrere Tabellen usw. Auf jeden Fall sehr kraftvoll.
Installation abgeschlossen Konfigurieren Sie mycat 1) server.xml. Konfigurieren Sie Zugriffsbenutzer und Berechtigungen. Ändern Sie die hervorgehobenen Informationen, wobei „Admin“ und „User“ Benutzer sind, die auf mycat zugreifen, und „TESTDB“ die virtuelle Datenbank von mycat ist, auf die Anwendungen der höheren Ebene zugreifen können. <Benutzername="admin"> <property name="password">admin</property> <Eigenschaftsname="schemas">TESTDB</Eigenschaft> <!-- DML-Berechtigungseinstellungen auf Tabellenebene--> <!-- <Berechtigungen check="false"> <schema name="TESTDB" dml="0110" > <Tabellenname="tb01" dml="0000"></Tabelle> <Tabellenname="tb02" dml="1111"></Tabelle> </schema> </Berechtigungen> --> </Benutzer> <Benutzername="Benutzer"> <property name="password">Benutzer</property> <Eigenschaftsname="schemas">TESTDB</Eigenschaft> <Eigenschaftsname="readOnly">wahr</Eigenschaft> </Benutzer> 2) schema.xml. Dieser Teil ist nicht leicht zu verstehen, deshalb habe ich ihn vereinfacht und in drei Hauptkonfigurationen unterteilt: Schema, Datenknoten und Datenhost. Der Knoten <scheme> definiert die virtuelle Datenbank von mycat als TESTDB, balance="1": Schreibvorgänge werden an Maschine A und Lesevorgänge an Maschine B weitergeleitet. <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!-- Hier gibt es keine Konfiguration, was bedeutet, dass alle Tabellen auf den Knoten dn1 verteilt sind--> </schema> <dataNode name="dn1" dataHost="localhost1" database="sync_test" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>Benutzer auswählen()</heartbeat> <!-- kann mehrere Schreibhosts haben --> <writeHost host="hostM1" url="192.168.110.1:3306" Benutzer="root" Passwort="root"> <!-- kann mehrere Lesehosts haben --> <readHost host="hostS2" url="192.168.110.2:3306" Benutzer="root" Passwort="root" /> </writeHost> </dataHost> </mycat:schema> Starten Sie mycat 1) Starten Sie mycat Die Hintergrundinformationen sind wie folgt:
MyCAT-Server wurde erfolgreich gestartet. Siehe Protokolle in logs/mycat.log. #Bei erfolgreichem Start werden die folgenden Informationen angezeigt. Hinweis: Wenn das Protokoll Informationen wie „192.168.110.2 nicht verbunden“ enthält, erlauben Sie bitte den Remote-Zugriff auf MySQL-Server B. #Melden Sie sich bei der MySQL-Konsole an Geben Sie %home%/bin ein und führen Sie mysql -uroot -proot aus #Genehmigung. Erlauben Sie dem Root-Benutzer den Remotezugriff auf Bmysql aus dem IP-Bereich 192.168.110.* mysql>GEWÄHREN SIE ALLE PRIVILEGIEN FÜR *.* AN 'root'@'192.168.110.*', IDENTIFIZIERT DURCH 'root' MIT GRANT-OPTION; # Wirksam werden, dieser Vorgang ist sehr wichtig! mysql> FLUSH-PRIVILEGIEN; Testen der Lese-/Schreibtrennung Überprüfen der Synchronisierung
Schließen Sie die Synchronisierung von B-Standby-MySQL und überprüfen Sie die Lese-/Schreibtrennung mysql> Slave-Stopp; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Slave-Status anzeigen\G; *************************** 1. Reihe *************************** Slave_IO_State: Master_Host: 192.168.110.1 Master_Benutzer: root Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 478 Relay_Log_File: wjt-1c698d8a032-relay-bin.00001 Relay_Log_Pos: 624 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Nein Slave_SQL_Running: Nein Replizieren_Do_DB:sync_test Replicate_Ignore_DB: mysql Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 478 Relay_Log_Space: 936 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 1 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben 3) Verwenden Sie Navicat, um eine Verbindung zu Mycat herzustellen. Die Vorgehensweise ist dieselbe wie bei der Verbindung zur physischen MySQL-Datenbank. Benutzer admin, Passwort admin, Port 8066
Ursache: mycat leitet die Abfrage sq an B weiter, daher ist der gelesene Ergebnissatz inkonsistent. Informationen zur Verwendung von mycat finden Sie in der maßgeblichen Anleitung auf der offiziellen Website. Die Dual-Active-Dual-Standby-Architektur wird später aktualisiert. Zusammenfassen Oben habe ich Ihnen den Aufbau eines stabilen und hochverfügbaren Cluster-Lastausgleichs, der primären und sekundären Replikation und der Lese-/Schreibtrennung auf Basis von MySQL+MyCat vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: So legen Sie eine Verzeichnis-Whitelist und eine IP-Whitelist in Nginx fest
>>: JS realisiert einfachen Bildkarusselleffekt
Inhaltsverzeichnis 1. v-wenn 2. Verwenden Sie v-i...
mysql5.5.28 Installations-Tutorial zu Ihrer Infor...
Dokumentation: https://github.com/hilongjw/vue-la...
Was ist HTML? Um es einfach auszudrücken: HTML wi...
Gut funktionierende Einstellungen für Tabelleneige...
Heute werden wir Origami-Flugzeuge basteln (die A...
Inhaltsverzeichnis Vorwort Initialisieren des Pro...
In diesem Artikel finden Sie das grafische Tutori...
Einführung Als ich mehr über die Datenbanktheorie...
<button>-Tag <br />Definition und Verw...
Inhaltsverzeichnis 1. JSONP domänenübergreifend 2...
<br />In vielen kleinen Unternehmen besteht ...
Einführung in die Sicherheitslücke Die SigRed-Sic...
Fügen Sie die Datei jvm.options zur Elasticsearch...
Durch die Verwendung des prozentualen Padding-Top...