1. EinleitungMySQL Router ist eine leichte MySQL-Middleware, die offiziell von MySQL bereitgestellt wird, um die vorherige alte Version des SQL-Proxys zu ersetzen. Da es sich bei MySQL Router um eine Datenbank-Middleware handelt, muss es in der Lage sein, zu analysieren, ob es sich bei der SQL-Anforderung vom vorherigen Client um eine Schreib- oder eine Lese-Anforderung handelt, um zu entscheiden, ob und an welchen Master oder Slave die SQL-Anforderung gesendet wird. Auf diese Weise realisiert MySQL Router die Lese- und Schreibtrennung von MySQL und gleicht die Last von MySQL-Anfragen aus. Daher besteht die Prämisse des MySQL-Routers darin, dass das Backend die MySQL-Master-Slave-Replikation implementiert. MySQL Router ist sehr leichtgewichtig und kann nur eine einfache Trennung von Lesen und Schreiben über verschiedene Ports implementieren. Der Planungsalgorithmus für Lese-Anfragen kann nur das Standard-rr (Round-Robin) verwenden. Er verfügt nicht über erweiterte oder komplexere Funktionen. Daher müssen Sie bei der Implementierung von MySQL Router die Hochverfügbarkeit des MySQL-Backends selbst konfigurieren. Es wird empfohlen, Hochverfügbarkeit über Percona XtraDB Cluster, MariaDB Galera oder die offizielle Gruppenreplikation von MySQL zu erreichen. Wenn es keine andere Wahl gibt, kann dies auch über MHA erreicht werden. Ein einfaches MySQL Router-Bereitstellungsdiagramm sieht wie folgt aus. In diesem Artikel wird MySQL Router verwendet, um die Lese-/Schreibtrennung zu implementieren, wenn auf dem Backend keine hohe MySQL-Master-Slave-Verfügbarkeit vorhanden ist. Außerdem wird erläutert, warum die Lese-/Schreibtrennung bei der hohen MySQL-Verfügbarkeit auf dem Backend nicht implementiert wird. Meiner Meinung nach ist MySQL Router nur ein Spielzeug. Es hat nicht nur wenige Funktionen, sondern erfordert auch die Angabe verschiedener Ports zum Lesen/Schreiben im Anwendungscode (siehe später die Erklärung der Konfigurationsdatei). Niemand wird es in einer realen Umgebung verwenden. 2. MySQL-Router konfigurierenDas Folgende ist die experimentelle Umgebung.
Da die MySQL-Master-Slave-Replikation im Backend keine hohe Verfügbarkeit erreicht, ist nur ein Masterknoten für Schreibvorgänge verantwortlich. Alle MySQL-Backend-Knoten sind neu installierte MySQL-Instanzen, sodass Sie die Master-Slave-Replikation direkt aktivieren können. Wenn es sich um eine Master-Slave-Replikation vorhandener Daten handelt, müssen Sie zuerst sicherstellen, dass diese synchronisiert werden. Die Methode lautet wie folgt: Stellen Sie den Slave auf die vom Master angegebenen Koordinaten wieder her. 2.1 MySQL Router installieren Laden Sie die Binärversion von MySQL Router herunter unter: https://dev.mysql.com/downloads/router/ Hier wird die Binärversion von MySQL Router 2.1.6 verwendet. tar xf mysqlrouter-2.1.6-linux-glibc2.12-x86-64bit.tar.gz mv mysqlrouter-2.1.6-linux-glibc2.12-x86-64bit /usr/local/mysqlrouter Das ist alles, so einfach ist das. Nach dem Dekomprimieren des Binärpakets befinden sich die folgenden Dateien im dekomprimierten Verzeichnis. [root@s1 herr]# ls bin Daten include lib ausführen teilen Es gibt nur ein Binärprogramm mysqlrouter im Bin-Verzeichnis, das gleichzeitig das Hauptprogramm von MySQL Router ist. Es gibt Beispielkonfigurationsdateien und Beispiele für Startskripte im SysV-Stil im freigegebenen Verzeichnis, aber leider basiert das Skript auf der Debian-Plattform und muss geändert und installiert werden, bevor es auf der Red Hat-Serie verwendet werden kann. Also habe ich später ein SysV-Skript unter CentOS geschrieben. [root@s1 mr]# ls share/doc/mysqlrouter/ License.txt README.txt sample_mysqlrouter.conf sample_mysqlrouter.init Fügen Sie abschließend das Hauptprogramm zur Umgebungsvariable PATH hinzu. echo "PATH=$PATH:/usr/local/mysqlrouter/bin" >/etc/profile.d/mysqlrouter.sh chmod +x /etc/profile.d/mysqlrouter.sh Quelle /etc/profile.d/mysqlrouter.sh 2.2 MySQL Router starten und testen Nachfolgend sehen Sie die Konfigurationsdatei für die obige experimentelle Umgebung. Es gibt nur einen Masterknoten [STANDARD] Konfigurationsordner = /etc/mysqlrouter logging_folder = /usr/local/mysqlrouter/log Laufzeitordner = /var/run/mysqlrouter [Logger] Ebene = INFO [Routing:Sklaven] bind_address = 192.168.100.21:7001 Ziele = 192.168.100.23:3306,192.168.100.24:3306 Modus = schreibgeschützt Verbindungstimeout = 1 [Routing:Master] bind_address = 192.168.100.21:7002 Ziele = 192.168.100.22:3306 Modus = Lesen/Schreiben Verbindungstimeout = 2 Erstellen Sie dann die oben verwendeten Verzeichnisse auf dem Computer, auf dem sich MySQL Router befindet. Shell> mkdir /etc/mysqlrouter /usr/local/mysqlrouter/log /var/run/mysqlrouter Dadurch wird der MySQL Router gestartet, um Dienste bereitzustellen (stellen Sie vor dem Start sicher, dass das MySQL-Backend mit Master-Slave-Replikation konfiguriert wurde). [root@s1 mr]# mysqlrouter & [1] 16122 Überprüfen Sie den Überwachungsstatus. Die beiden hier überwachten Ports 7001 und 7002 werden vom Front-End zur Verbindung mit dem MySQL-Router verwendet. Sie werden verwendet, um vom Front-End gesendete SQL-Anfragen zu empfangen und SQL-Anfragen gemäß den Lese- und Schreibregeln an die MySQL-Master- und Slave-Knoten im Back-End weiterzuleiten. [root@s1 mr]# netstat -tnlp Aktive Internetverbindungen (nur Server) Proto Recv-Q Send-Q Lokale Adresse Fremde Adresse Status PID/Programmname tcp 0 0 0.0.0.0:6032 0.0.0.0:* LISTEN 1231/proxysql tcp 0 0 0.0.0.0:6033 0.0.0.0:* LISTEN 1231/proxysql tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1152/sshd tcp 0 0 192.168.100.21:7001 0.0.0.0:* LISTEN 16122/mysqlrouter tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2151/Master tcp 0 0 192.168.100.21:7002 0.0.0.0:* LISTEN 16122/mysqlrouter tcp6 0 0 :::22 :::* LISTEN 1152/sshd tcp6 0 0 ::1:25 :::* LISTEN 2151/Master Zeigen Sie die Protokolle an: [root@s1 mr]# cat /usr/local/mysqlrouter/log/mysqlrouter.log 2018-07-07 10:14:29 INFO [7f8a8e253700] [routing:slaves] gestartet: lauscht auf 192.168.100.21:7001; schreibgeschützt 2018-07-07 10:14:29 INFO [7f8a8ea54700] [routing:masters] gestartet: lausche auf 192.168.100.21:7002; Lese-/Schreibzugriff Testen Sie es abschließend. Autorisieren Sie vor dem Testen den MySQL Router-Knoten auf dem Backend-Master, um die Verbindung zuzulassen, die auf die beiden Slave-Knoten repliziert wird. mysql> gewähre alles auf *.* an root@'192.168.100.%', identifiziert durch 'P@ssword1!'; Stellen Sie eine Verbindung zu Port 7002 des MySQL-Routers her, dem Schreibport. Da die Master-Slave-Hochverfügbarkeit nicht konfiguriert ist, reicht ein einfacher Test auf Schreibbarkeit aus. [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e 'wählen Sie @@server_id;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. +-------------+ | @@Server-ID | +-------------+ | 110 | +-------------+ [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e 'Datenbank mytest erstellen;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7002 -e 'Datenbanken anzeigen;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | meintest | | Leistungsschema | |System| +--------------------+ Testen Sie dann jeden Slave-Knoten, um zu sehen, ob er einen Lastausgleich der Lese-Anfragen des RR-Planungsalgorithmus erreichen kann. [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e 'wählen Sie @@server_id;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. +-------------+ | @@Server-ID | +-------------+ | 120 | +-------------+ [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e 'wählen Sie @@server_id;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. +-------------+ | @@Server-ID | +-------------+ | 130 | +-------------+ [root@s1 mr]# mysql -uroot -pP@ssword1! -h192.168.100.21 -P7001 -e 'Datenbanken anzeigen;' mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | meintest | | Leistungsschema | |System| +--------------------+ Offensichtlich sind die Testergebnisse normal. Es scheint, dass MySQL Router sehr einfach ist. Und das ist er tatsächlich. Stellen Sie einfach eine sinnvolle Konfigurationsdatei bereit, und schon sind Sie fertig. Lassen Sie uns also die Konfigurationsdatei des MySQL-Routers erklären. 3. Erläuterung der MySQL Router-KonfigurationsdateiDie Konfigurationsdatei von MySQL Router ist ebenfalls sehr einfach und es müssen nicht viele Elemente konfiguriert werden. Standardmäßig sucht der MySQL-Router im Installationsverzeichnis nach „mysqlrouter.conf“ und im Home-Verzeichnis nach „.mysqlrouter.conf“. Sie können auch „-c“ oder „--config“ im Befehl des Binärprogramms mysqlrouter verwenden, um die Konfigurationsdatei manuell anzugeben. Die Konfigurationsdatei des MySQL-Routers liegt im Fragmentformat vor und es gibt drei häufig verwendete Fragmente: [DEFAULT], [logger] und [routing:NAME]. Beim Fragmentnamen wird die Groß-/Kleinschreibung beachtet und es werden nur einzeilige Kommentare vom Typ „#“ oder „;“ unterstützt. Kommentare in der Zeilenmitte oder am Zeilenende werden nicht unterstützt. Nehmen Sie die Konfigurationsdatei im obigen Beispiel. [STANDARD] Konfigurationsordner = /etc/mysqlrouter logging_folder = /usr/local/mysqlrouter/log Laufzeitordner = /var/run/mysqlrouter [Logger] Ebene = INFO [Routing:Sklaven] bind_address = 192.168.100.21:7001 Ziele = 192.168.100.23:3306,192.168.100.24:3306 Modus = schreibgeschützt Verbindungstimeout = 1 [Routing:Master] bind_address = 192.168.100.21:7002 Ziele = 192.168.100.22:3306 Modus = Lesen/Schreiben Verbindungstimeout = 2 1.Konfiguration des DEFAULT-Fragments. Der Abschnitt Zum Beispiel: [STANDARD] config_folder=/etc/mysqlrouter #Geben Sie ein zusätzliches Konfigurationsdateiverzeichnis an. Alle Konfigurationsdateien in diesem Verzeichnis werden geladen. logging_folder=/usr/local/mysqlrouter/log #Geben Sie das Protokollverzeichnis an. Der Name der Protokolldatei lautet mysqlrouter.log runtime_folder=/var/run/mysqlrouter #Geben Sie das Laufzeitverzeichnis an, der Standard ist /run/mysqlrouter 2.Konfiguration des Loggerfragments. Der Abschnitt [Logger] level=debug # debug, info (Standard), Warnung, Fehler, schwerwiegend, ohne Berücksichtigung der Groß-/Kleinschreibung 3.Konfiguration des Routing-Fragments. Im Abschnitt „Routing-Konfiguration“ können unter anderem die folgenden Optionen festgelegt werden: (1). bind_address und bind_port sind die Adresse und der Port, an denen der MySQL-Router auf Front-End-SQL-Anfragen wartet. Der Port ist für MySQL Router obligatorisch, muss aber nicht mit bind_port gebunden werden, da er mit bind_address im Darüber hinaus darf die Abhöradresse nicht in der durch die Zieldirektive angegebenen Liste erscheinen. Hier ist ein Beispiel: [Routing:Sklaven] Bindeport = 7001 [Routing:Sklaven] Bind-Adresse = 192.168.100.21 Bindeport = 7001 [Routing:Sklaven] bind_address = 192.168.100.21:7001 Generell ist es keine gute Idee, die Lese-/Schreibtrennung über unterschiedliche Ports zu implementieren. Der Hauptgrund dafür ist, dass diese Verbindungsports im Anwendungscode angegeben werden müssen. MySQL Router kann auf diese Weise jedoch nur eine Lese-/Schreibtrennung erreichen, sodass MySQL Router nur als Spielzeug verwendet werden sollte. (2). Definieren Sie das Weiterleitungsziel der Routingregel im Format [Routing:Sklaven] bind_address = 192.168.100.21:7001 Ziele = 192.168.100.23:3306,192.168.100.24:3306 [Routing:Master] bind_address = 192.168.100.21:7002 Ziele = 192.168.100.22:3306,192.168.100.100:3306 (3). Der MySQL-Router bietet zwei Modi: schreibgeschützt und Lesen/Schreiben. Diese beiden Methoden führen zu unterschiedlichen Methoden zur Weiterleitungsplanung. Auf Lesen/Schreiben eingestellt. Wird häufig verwendet, um Ziele für den Master festzulegen und so eine hohe Verfügbarkeit des Masters zu erreichen.
Auf schreibgeschützt einstellen. Wird oft verwendet, um Ziele auf Slave einzustellen und so einen Lastenausgleich für MySQL-Lese-Anfragen zu erreichen.
(4).
(5) Weitere Optionen Sie können auch einige andere Anweisungen festlegen, z. B. das verwendete Protokoll, die maximale Anzahl von Anforderungen usw., aber Sie müssen nicht die Standardwerte festlegen. Dies sind alles Optionen, die MySQL Router in Kombination mit MySQL optimiert hat, und sie sind an sich bereits perfekt. Die Konfigurationsdatei enthält ungefähr diesen Inhalt. Denken Sie nach der Konfiguration daran, zuerst die im Standardsegment enthaltenen Verzeichnisse zu erstellen. Danach können Sie den MySQL-Router starten, um Lese-/Schreibtrennungsdienste bereitzustellen. 4. SysV-Skripte für MySQL Router bereitstellenMySQL Router stellt nur ein Hauptprogramm bereit (mysqlrouter im Bin-Verzeichnis) und das Programm kann nur ohne Stoppoption gestartet werden, sodass Sie den Prozess nur mit dem Kill-Befehl beenden können. MySQL Router bietet auch ein Beispiel-Startskript, das sich unter Shell> vim /etc/init.d/mysqlrouter #!/bin/bash # chkconfig: -78 30 # Beschreibung: MySQL Router starten/stoppen DAEMON=/usr/local/mysqlrouter proc=$DAEMON/bin/mysqlrouter DAEMON_OPTIONS="-c ${DAEMON}/mysqlrouter.conf" . /etc/init.d/Funktionen Start() { wenn [ -e /var/lock/subsys/mysqlrouter ]; dann Aktion "MySQL Router funktioniert" /bin/false anders $proc $DAEMON_OPTIONS & &>/dev/null retval=$? Echo wenn [ $retval -eq 0 ]; dann berühren Sie /var/lock/subsys/mysqlrouter Aktion "MySQL Router starten" /bin/true anders echo "Fehler beim Starten des MySQL-Routers" fi fi } stoppen() { wenn [ -e /var/lock/subsys/mysqlrouter ]; dann killall $proc retval=$? Echo wenn [ $retval -eq 0 ]; dann rm -f /var/lock/subsys/mysqlrouter Aktion "MySQL Router stoppen" /bin/true fi anders Aktion "MySQL Router funktioniert nicht" /bin/false fi } status() { wenn [ -e /var/lock/subsys/mysqlrouter ]; dann echo "MySQL-Router läuft" anders echo "MySQL-Router läuft nicht" fi } Fall "$1" in Start) Start Schlaf 1 ;; stoppen) stoppen Schlaf 1 ;; Neustart) stoppen Start Schlaf 1 ;; Status) Status ;; *) echo "Verwendung: $0 {start|stop|status|restart}" retval=1 ;; esac beenden $retval Erteilen Sie dann Ausführungsberechtigungen. Shell> chmod +x /etc/init.d/mysqlrouter Dies ist das Ende dieses Artikels über die Implementierung der Lese-/Schreibtrennung von MySQL mit MySQL Router. Weitere Informationen zur Lese-/Schreibtrennung von MySQL Router finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Problem mit der Iframe-QRC-Zuweisung (serverseitig)
>>: Detaillierte Erklärung des Abstandsproblems zwischen IMG-Tags
Inhaltsverzeichnis Hintergrund Problemanalyse 1. ...
Der Erste : Code kopieren Der Code lautet wie folg...
Ich habe auf Baidu gesucht. . Manche Leute sagen,...
Inhaltsverzeichnis 1. Nachfrage 2. Wirkung 3. All...
Derzeit nutzen die meisten Linux-Benutzer entwede...
Inhaltsverzeichnis MySQL-Abfragebaumstruktur 1. Ü...
Während der Verwendung von MySQL wurde festgestel...
Webdesign ist sowohl eine Wissenschaft als auch e...
Einführung In Orm-Frameworks wie Hibernate und My...
1. Schnittstelle für die Anforderung einer Antwor...
F: Ich weiß nicht, was der Unterschied zwischen XM...
Inhaltsverzeichnis Bei der Entwicklung kann eine ...
Wenn Sie sich bei der Verwendung der MySQL-Datenb...
In diesem Artikelbeispiel wird der spezifische Co...
1. Was ist ein zweispaltiges Layout? Es gibt zwei...