01 Einführung in MySQL RouterIm 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 RoutersUm 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 anNachdem 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:
|
<<: Beispiel für eine Vue-Datenanzeige auf einem großen Bildschirm
>>: CSS implementiert problemlos Container auf Blockebene mit festem Verhältnis
1. Einleitung Der Unterschied zwischen Zeilensper...
Vorwort Nach einem Failover sind Synchronisierung...
Eines Tages stellte ich fest, dass die Ausführung...
Bisher kannten wir mehrere Hintergrundattribute i...
Verknüpfung: https://qydev.weixin.qq.com/wiki/ind...
Inhaltsverzeichnis Vorbereiten Fünf Waffen für … ...
Inhaltsverzeichnis 1. Projektordnerstruktur 1. As...
<br />Sehen wir uns nun an, wie Sie die CSS-...
Wir sollten besser aufpassen, denn die HTML-Poliz...
1. Öffnen Sie Port 2375 Bearbeiten Sie docker.ser...
Detaillierte Erklärung zur MySQL-Sortierung chine...
Inhaltsverzeichnis 01 sql_slave_skip_counter-Para...
Zusammenfassend: 1. Berücksichtigen Sie die Leist...
Inhaltsverzeichnis 1. Verwenden Sie SVG 2. Verwen...
Inhaltsverzeichnis Vorne geschrieben Mehrere Spei...