Installation und Bereitstellung des MySQL Routers

Installation und Bereitstellung des MySQL Routers

01 Einführung in MySQL Router

Im vorherigen Artikel haben wir über das Grundkonzept von ReplicaSet, das MySQL Shell-Tool und die Verwendung von MySQL Shell zum Erstellen von Innodb Replicaset gesprochen. Heute schauen wir uns MySQL Router an, eine weitere wichtige Komponente im Bereitstellungsprozess von InnoDB ReplicaSet.

Was ist ein MySQL-Router?

Um Innodb Replicaset besser zu verstehen, verschieben wir das vorherige Bild hierher wie folgt:

Aus der obigen Abbildung ist leicht zu erkennen, dass der MySQL Router der Eingang für die Anwendungsverbindung ist. Seine Existenz macht die zugrunde liegende Architektur für die Anwendung transparent. Die Anwendung muss sich nur mit dem MySQL Router verbinden, um mit der zugrunde liegenden Datenbank zu interagieren, und die Master-Slave-Architektur der Datenbank ist in den Originalinformationen des MySQL Routers aufgezeichnet.

Version

MySQL Router ist eine leichte, leistungsstarke Middleware, die offiziell von MySQL entwickelt wurde. Sie befindet sich zwischen Anwendungen und MySQL Server. Anwendungen kommunizieren, indem sie sich mit MySQL Router und dem zugrunde liegenden MySQL Server verbinden. Für die Anwendungen ist sie transparent. Die offizielle Dokumentation empfiehlt die Verwendung mit MySQL 8.0 oder MySQL 5.7 Server. Die neueste Version ist MySQL Router 8. Wenn Sie MySQL Router 2.0 oder 2.1 verwendet haben, wird dringend empfohlen, auf MySQL Router 8 zu aktualisieren.

Was sind die Funktionen von MySQL Router?

1. Transparent für Anwendungen. Damit MySQL Router für die Anwendung transparent ist, muss es eine Verbindung zum zugrunde liegenden MySQL herstellen und wissen, welcher Knoten derzeit der primäre ist, damit es bei einem Fehler ein Failover durchführen kann.

2. Nutzungsszenarien. Basierend auf dieser Funktion kann es in Innodb Cluster-, Innodb Replicaset- oder MGR-Umgebungen verwendet werden.

3. MySQL Router führt eine Cache-Liste der Online-MySQL-Instanzen oder der Topologie des konfigurierten Innodb-Clusters. Außerdem werden diese Informationen beim Start aus der MySQL Router-Konfigurationstabelle abgerufen.

4. Um sicherzustellen, dass die Metadaten im Cache sofort aktualisiert werden können, muss MySQL Router sicherstellen, dass es mit mindestens einem normalen Knoten im Cluster kommunizieren kann. Es erhält die Originalinformationen und den Echtzeitstatus der Datenbank aus der Performance_schema-Tabelle der aktuellen Instanz.

5. Wenn der Knoten im Cluster, der mit MySQL Router kommuniziert, heruntergefahren wird, versucht MySQL Router, auf andere Knoten im Cluster zuzugreifen. Und rufen Sie relevante Metadateninformationen erneut ab.

02 Installation und Bereitstellung des MySQL Routers

Um eine bessere Leistung zu erzielen, wird MySQL Router normalerweise zusammen mit der Anwendung bereitgestellt. Dies basiert normalerweise auf den folgenden Überlegungen:

1. Sie können sich per Socket statt per TCP/IP mit dem MySQL Router verbinden

2. Reduzierte Netzwerklatenz

3. Sie können für den Zugriff auf die Datenbank ein bestimmtes Konto konfigurieren, z. B. myapp@'host', statt eines Vollnetzwerkkontos wie myapp@'%', was zur Verbesserung der Sicherheit beiträgt

4. Im Allgemeinen sind Anwendungsserver einfacher zu skalieren als Datenbankserver.

Das offizielle Diagramm der Bereitstellungsarchitektur sieht wie folgt aus:

Download- und Installationsprozess:

1. Melden Sie sich direkt auf der offiziellen Website an, um die entsprechende Version von MySQL Router herunterzuladen.

https://downloads.mysql.com/archives/router/

2. Nach dem Herunterladen dekomprimieren Sie es. Am Beispiel von 8.0.20 lautet der Dekomprimierungsbefehl wie folgt, da es sich um eine tar.xz-Datei handelt:

xz -d xxx.tar.xz (in Tar-Format dekomprimieren)

tar xvf xxx.tar (das ist es)

Als nächstes folgt der Initialisierungsprozess. Während der Initialisierung muss unser MySQL-Server bereitgestellt werden. Im vorherigen Artikel haben wir eine Innodb-Replicaset-Architektur mit einem Master und einem Slave bereitgestellt. Die IP-Adressen sind:

192.168.1.10 5607 Primär

192.168.1.20 5607 Sekundär

Initialisierungsprozess:

1. Initialisieren Sie MySQL Router mit dem Initialisierungsbefehl:

MySQL-Router
   --bootstrap superdba@'10.13.3.129':5607
    --directory /data1/yazhou5/mysql/mysql-router
   --conf-use-sockets
    --account routerfriend
    --account-create immer

Hier müssen wir einige der Parameter erklären:

--bootstrap stellt die Bootstrap-Instanz dar, gefolgt von einer URL für Verbindungsinformationen;
--directory stellt das generierte Konfigurationsverzeichnis dar. --conf-use-sockets stellt dar, ob die Socket-Verbindung aktiviert werden soll (ob eine Socket-Datei generiert werden soll).
--account gibt das Konto an, das vom MySQL Router nach der Initialisierung zur Verbindung mit dem MySQL Server verwendet wird.
--account-create stellt die Strategie zur Kontoerstellung dar. „Immer“ bedeutet, dass der Bootstrapvorgang nur ausgeführt wird, wenn das Konto nicht existiert.

Nach der Eingabe dieses Befehls wird folgende Fehlermeldung zurückgegeben:

Fehler: Sie führen das Bootstrapping als Superuser durch.
Dadurch werden alle Ergebnisdateien (Konfiguration usw.) zum Privatbesitz des Superusers.
Bitte verwenden Sie die Option --user=Benutzername, um den Benutzer anzugeben, der den Router ausführen wird.
Verwenden Sie --user=root, wenn dies wirklich der Superuser sein soll.

Das System erkennt, dass wir das Root-Konto zum Initialisieren von MySQL Router verwenden, und fordert uns auf, bei Verwendung von Root-Operationen am Ende --user=root hinzuzufügen.

2. Führen Sie den Befehl nach dem Hinzufügen von --user=root erneut aus. Das Ergebnis ist wie folgt:

[Root MySQL-Router] # /usr/local/mysql-router-8.0.20/bin/mysqlrouter --bootstrap [email protected]:5607 --Verzeichnis /data1/yazhou5/mysql/mysql-router --conf-use-sockets --account routerfriend --account-create always --user=root --force
Bitte geben Sie das MySQL-Passwort für Superdba ein: # Geben Sie hier das uns bekannte Passwort für das Superdba-Konto ein. # Bootstrapping der MySQL Router-Instanz unter „/data1/yazhou5/mysql/mysql-router“ …

Bitte geben Sie das MySQL-Passwort für Routerfriend ein: # Erstellen Sie hier ein neues Kontopasswort - Konto(s) erstellen
 - Konto verifizieren (damit SQL-Abfragen ausgeführt werden können, die sonst vom Router ausgeführt würden)
- Konto im Schlüsselbund speichern
- Anpassen der Berechtigungen generierter Dateien
- Erstellen der Konfiguration /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf

# MySQL-Router für das InnoDB-Replikatset „yeyz_test“ konfiguriert

Anschließend wurde der MySQL Router mit der generierten Konfiguration gestartet

    $ /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf

Der Cluster „yeyz_test“ kann durch Verbindung mit folgender Verbindung erreicht werden:

## MySQL Classic-Protokoll

– Lese-/Schreibverbindungen: localhost:6446, /data1/yazhou5/mysql/mysql-router/mysql.sock
– Nur-Lese-Verbindungen: localhost:6447, /data1/yazhou5/mysql/mysql-router/mysqlro.sock

## MySQL X-Protokoll

– Lese-/Schreibverbindungen: localhost:64460, /data1/yazhou5/mysql/mysql-router/mysqlx.sock
– Nur-Lese-Verbindungen: localhost:64470, /data1/yazhou5/mysql/mysql-router/mysqlxro.sock

Wie Sie sehen, gilt der Bootstrapvorgang als erfolgreich, nachdem wir zur zweimaligen Eingabe des Kennworts aufgefordert wurden.

3. Zu diesem Zeitpunkt geben wir das im Parameter angegebene Verzeichnis --directory ein und zeigen die generierte Initialisierungsdatei an. Wir können Folgendes sehen:

drwx------ 2 root root 4096 Apr 12 23:15 Daten
drwx------ 2 root root 4096 12. April 23:15 Protokoll
-rw------ 1 root root 1532 12. April 23:15 mysqlrouter.conf
-rw------ 1 root root 104 12. April 23:15 mysqlrouter.key
drwx------ 2 root root 4096 Apr 12 23:15 laufen
-rwx------ 1 root root 353 12. April 23:15 start.sh
-rwx------ 1 root root 209 12. April 23:15 stop.sh

Es werden einige Konfigurationsdateien sowie Start- und Stoppskripte generiert. Öffnen wir die Konfigurationsdatei mysqlrouter.conf und werfen einen Blick auf den Inhalt:

# Datei, die automatisch während des MySQL Router-Bootstraps generiert wird
[STANDARD]
Benutzer=root
logging_folder=/data1/yazhou5/mysql/mysql-router/log
runtime_folder=/data1/yazhou5/mysql/mysql-router/run
Datenordner = /data1/yazhou5/mysql/mysql-router/data
keyring_path=/data1/yazhou5/mysql/mysql-router/data/keyring
master_key_path=/data1/yazhou5/mysql/mysql-router/mysqlrouter.key
Verbindungstimeout = 15
Lese_Zeitüberschreitung = 30
dynamic_state=/data1/yazhou5/mysql/mysql-router/data/state.json

[Logger]
Ebene = INFO

[metadata_cache:yeyz_test]
cluster_type=rs
router_id=1
Benutzer=Routerfreund
metadata_cluster=yeyz_test
ttl = 0,5
auth_cache_ttl=-1
auth_cache_refresh_interval=2

[Routing:yeyz_test_rw]
Bind-Adresse = 0.0.0.0
bind_port=6446
socket=/data1/yazhou5/mysql/mysql-router/mysql.sock
Ziele=Metadaten-Cache://yeyz_test/?role=PRIMARY
Routing_Strategie = zuerst verfügbar
Protokoll=klassisch

[Routing:yeyz_test_ro]
Bind-Adresse = 0.0.0.0
bind_port=6447
socket=/data1/yazhou5/mysql/mysql-router/mysqlro.sock
Ziele=Metadaten-Cache://yeyz_test/?role=SECONDARY
Routing-Strategie = Round-Robin mit Fallback
Protokoll=klassisch

[Routing:yeyz_test_x_rw]
Bind-Adresse = 0.0.0.0
bind_port=64460
socket=/data1/yazhou5/mysql/mysql-router/mysqlx.sock
Ziele=Metadaten-Cache://yeyz_test/?role=PRIMARY
Routing_Strategie = zuerst verfügbar
Protokoll=x

[Routing:yeyz_test_x_ro]
Bind-Adresse = 0.0.0.0
bind_port=64470
socket=/data1/yazhou5/mysql/mysql-router/mysqlxro.sock
Ziele=Metadaten-Cache://yeyz_test/?role=SECONDARY
Routing-Strategie = Round-Robin mit Fallback
Protokoll=x

4. Bei der Analyse der generierten Konfigurationsdatei ist es nicht schwer festzustellen, dass MySQL Router mit 4 Ports konfiguriert ist, nämlich 6446, 6447, 64460, 64470 und den entsprechenden Socket-Dateien.

Natürlich können wir den Standardport und -Socket ändern, indem wir einige Parameter konfigurieren, zum Beispiel:

--conf-use-sockets: (Optional) UNIX-Domänen-Sockets für alle vier Verbindungstypen aktivieren.
--conf-skip-tcp: (Optional) Deaktivieren Sie den TCP-Port. Wenn Sie nur Sockets verwenden möchten, können Sie diese Option über --conf-use-sockets übergeben.
--conf-base-port: (Optional) Ändern Sie den Portbereich, anstatt die Standardports zu verwenden. Der Standardwert ist 6446.
--conf-bind-address: (Optional) Ändern Sie den bind_address-Wert für jede Route.

5. Verwenden Sie den Befehl, um MySQL Router lokal zu starten und die lokal generierte Konfigurationsdatei anzugeben. Der Befehl lautet wie folgt:

[root@mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf &

Nach dem Start verwenden wir das soeben erstellte Routerfriend-Konto und den Lese-/Schreibport 6446, um uns mit dem MySQL Router zu verbinden:

[root@mysql-router]# mysql -u routerfriend -h 127.0.0.1 -P 6446 -p
 Passwort eingeben:
 Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID lautet 95696
Serverversion: 8.0.19 MySQL Community Server – GPL

Copyright (c) 2000, 2013, Oracle und/oder Tochtergesellschaften. Alle Rechte vorbehalten.

Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.

Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.

[email protected] [(keine)] 23:42:00>
[email protected] [(keine)] 23:42:01>wählen Sie @@port;
+--------+
| @@Hafen |
+--------+
| 5607 |
+--------+
1 Zeile im Satz (0,00 Sek.)

Nachdem wir uns über Port 6446 mit dem MySQL Router verbunden haben, führen wir den Befehl „select @@port“ im MySQL Router aus, um die aktuellen Portnummerninformationen anzuzeigen. Wir können sehen, dass der Rückgabewert 5607 ist, was bedeutet, dass der MySQL Router uns beim Weiterleiten zum zugrunde liegenden MySQL-Server geholfen hat.

Das Routerfriend-Konto verfügt möglicherweise nicht über ausreichende Berechtigungen. Wir können auch das Superdba-Konto mit hohen Berechtigungen verwenden, um eine Verbindung zu mysqlrouter herzustellen, damit wir die Datenbanktabellen im MySQL-Server lesen und schreiben können.

03 Zeigen Sie die Metadaten des MySQL-Routers an

Nachdem MySQL Router erstellt wurde, können Sie die Tabelleninformationen in der Metainformationsbibliothek mysql_innodb_cluster_metadata anzeigen, einschließlich der Clustertabelle, der Routertabelle und der Instanztabelle, die Folgendem entsprechen:

[email protected] [mysql_innodb_cluster_metadata] 23:51:20>Wählen Sie * aus Instanzen aus;
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------------------+----------------------------------------+------------+-------------+
| Instanz-ID | Cluster-ID | Adresse | MySQL-Server-UUID | Instanzname | Adressen | Attribute | Beschreibung |
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------------------+----------------------------------------+------------+-------------+
| 1 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.10:5607 | 0609f966-690f-11eb-bd89-fa163ebd2444 | 192.168.1.10:5607 | {"mysqlClassic": "192.168.1.10:5607"} | {} | NULL |
| 2 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.20:5607 | c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c | 192.168.1.20:5607 | {"mysqlClassic": "192.168.1.20:5607"} | {} | NULL |
+-------------+--------------------------------------+--------------------+--------------------------------------+--------------------------------+----------------------------------------+------------+-------------+
2 Zeilen im Satz (0,00 Sek.)

[email protected] [mysql_innodb_cluster_metadata] 23:51:30>
[email protected] [mysql_innodb_cluster_metadata] 23:51:30>Wählen Sie * aus Clustern;
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
| Cluster-ID | Cluster-Name | Beschreibung | Optionen | Attribute | Cluster-Typ | Primärmodus | Router-Optionen |
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
| 94d5f935-990e-11eb-8832-fa163ebd2444 | yeyz_test | Standard-Replikatsatz | NULL | {"adopted": 0, "opt_gtidSetIsComplete": false} | ar | pm | NULL |
+--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+
1 Zeile im Satz (0,00 Sek.)

[email protected] [mysql_innodb_cluster_metadata] 23:51:57>
[email protected] [mysql_innodb_cluster_metadata] 23:51:58>Wählen Sie * aus Routern;
+--------------+----------+--------------+----------+---------+---------+---------+---------------------+----------------------------------------------------------------------------------------------+--------------------------------------+---------+
| Router-ID | Router-Name | Produktname | Adresse | Version | letzter Check-in | Attribute | Cluster-ID | Optionen |
+--------------+----------+--------------+----------+---------+---------+---------+---------------------+----------------------------------------------------------------------------------------------+--------------------------------------+---------+
| 1 | | MySQL-Router | 10.13.3.129 | 8.0.20 | 12.04.2021 23:52:29 | {"ROEndpoint": "6447", "RWEndpoint": "6446", "ROXEndpoint": "64470", "RWXEndpoint": "64460", "MetadataUser": "routerfriend"} | 94d5f935-990e-11eb-8832-fa163ebd2444 | NULL |
+--------------+----------+--------------+----------+---------+---------+---------+---------------------+----------------------------------------------------------------------------------------------+--------------------------------------+---------+
1 Zeile im Satz (0,00 Sek.)

Sie können auch die aktuellen Informationen zum primären Knoten aus der Tabelle anzeigen. Wenn das Feld primary_master 1 ist, handelt es sich um den primären Knoten.

[email protected] [mysql_innodb_cluster_metadata] 23:52:29>Wählen Sie * aus async_cluster_members;
+--------------------------------------+---------+-------------+--------------------------------+---------------------------------------------------------------------------------------------------+
| Cluster-ID | Ansichts-ID | Instanz-ID | Master-Instanz-ID | Primärmaster | Attribute |
+--------------------------------------+---------+-------------+--------------------------------+---------------------------------------------------------------------------------------------------+
| 94d5f935-990e-11eb-8832-fa163ebd2444 | 2 | 1 | NULL | 1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 1 | NULL | 1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} |
| 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 2 | 1 | 0 | {"instance.address": "192.168.1.20:5607", "instance.mysql_server_uuid": "c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c"} |
+--------------------------------------+---------+-------------+--------------------------------+---------------------------------------------------------------------------------------------------+
3 Zeilen im Satz (0,01 Sek.)

Oben finden Sie detaillierte Informationen zur Installation und Bereitstellung von MySQL Router. Weitere Informationen zu MySQL Router finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Bereitstellung eines MySQL-Hochverfügbarkeitsclusters und Implementierung eines Failovers
  • Beispiel für die Bereitstellung von MySQL auf Docker
  • Docker stellt eine MySQL-Remoteverbindung bereit, um 2003-Probleme zu lösen
  • Implementierung eines Docker-Compose-Bereitstellungsprojekts basierend auf MySQL8
  • Super ausführliches Tutorial zur Installation und Bereitstellung von mysql-canal-rabbitmq
  • Detaillierte Bereitstellungsschritte für MySQL MHA-Hochverfügbarkeitskonfiguration und Failover
  • Schritte zum Erstellen der MHA-Architekturbereitstellung in MySQL
  • So installieren und implementieren Sie MySQL 8.0 unter CentOS8

<<:  Beispiel für eine Vue-Datenanzeige auf einem großen Bildschirm

>>:  CSS implementiert problemlos Container auf Blockebene mit festem Verhältnis

Artikel empfehlen

Tipps zur MySql-SQL-Optimierung teilen

Eines Tages stellte ich fest, dass die Ausführung...

Detaillierte Erklärung der neuen Hintergrundeigenschaften in CSS3

Bisher kannten wir mehrere Hintergrundattribute i...

Fünf Möglichkeiten zum Durchlaufen von Objekten in JavaScript Beispielcode

Inhaltsverzeichnis Vorbereiten Fünf Waffen für … ...

Detaillierte Erläuterung des CocosCreator-Projektstrukturmechanismus

Inhaltsverzeichnis 1. Projektordnerstruktur 1. As...

Tutorial zur HTML-Tabellenauszeichnung (48): CSS-modifizierte Tabelle

<br />Sehen wir uns nun an, wie Sie die CSS-...

Häufige Fehler beim Schreiben von HTML-Tags

Wir sollten besser aufpassen, denn die HTML-Poliz...

MySQL-Sortierung – Chinesische Details und Beispiele

Detaillierte Erklärung zur MySQL-Sortierung chine...

Analyse von drei Parametern des MySQL-Replikationsproblems

Inhaltsverzeichnis 01 sql_slave_skip_counter-Para...

MySQL-Optimierungsstrategie (empfohlen)

Zusammenfassend: 1. Berücksichtigen Sie die Leist...

Zwei Beispiele für die Verwendung von Symbolen in Vue3

Inhaltsverzeichnis 1. Verwenden Sie SVG 2. Verwen...

Detaillierte Erläuterung verschiedener Speichermethoden von Docker-Containern

Inhaltsverzeichnis Vorne geschrieben Mehrere Spei...