MySQL-Datenbank implementiert MMM-Hochverfügbarkeitsclusterarchitektur

MySQL-Datenbank implementiert MMM-Hochverfügbarkeitsclusterarchitektur

Konzept

MMM (Master-Master-Replikationsmanager für MySQL) ist ein flexibles Skriptprogramm auf Perl-Basis, das zum Überwachen und Failover der MySQL-Replikation sowie zur Verwaltung der Konfiguration der MySQL Master-Master-Replikation (nur ein Knoten ist gleichzeitig beschreibbar) verwendet wird.

Beschreibung der MMM-Hochverfügbarkeitsarchitektur

  • mmm_mond: Überwachungsprozess, verantwortlich für alle Überwachungsaufgaben, Bestimmung und Handhabung aller Knotenrollenaktivitäten. Dieses Skript muss auf dem Supervisor-Computer ausgeführt werden.
  • mmm_agentd: Ein Agentenprozess, der auf jedem MySQL-Server ausgeführt wird, um die Überwachungssondenarbeiten abzuschließen und einfache Remote-Diensteinstellungen vorzunehmen. Dieses Skript muss auf der überwachten Maschine ausgeführt werden.
  • mmm_control: Ein einfaches Skript, das Befehle zur Verwaltung des mmm_mond-Prozesses bereitstellt.
  • Der Supervisor von mysql-mmm stellt mehrere virtuelle IPs (VIPs) bereit, darunter eine beschreibbare VIP und mehrere lesbare VIPs. Durch die Supervisor-Verwaltung werden diese IPs an die verfügbaren MySQLs gebunden. Wenn ein MySQL ausfällt, migriert der Supervisor die VIPs auf andere MySQLs. Während des gesamten Überwachungsprozesses müssen relevante autorisierte Benutzer in MySQL hinzugefügt werden, damit MySQL die Wartung der Überwachungsmaschine unterstützen kann. Zu den autorisierten Benutzern gehören ein mmm_monitor-Benutzer und ein mmm_agent-Benutzer.

Vor- und Nachteile von MMM

Vorteile: Hohe Verfügbarkeit, gute Skalierbarkeit, automatische Umschaltung im Fehlerfall und bei der Master-Master-Synchronisation ist nur ein Datenbank-Schreibvorgang gleichzeitig erforderlich, um die Datenkonsistenz sicherzustellen.
Nachteile: Der Monitorknoten ist ein einzelner Punkt. Er kann mit Keepalived kombiniert werden, um eine hohe Verfügbarkeit zu erreichen. Er stellt Anforderungen an die Anzahl der Hosts und muss eine Lese-/Schreibtrennung erreichen, was für das Programm eine Herausforderung darstellt.

Bereitstellung einer experimentellen Umgebung

Schritt 1: Installieren Sie die MySQL-Datenbank auf allen vier Servern

1. Konfigurieren Sie die ALI-Cloud-Quelle und installieren Sie dann die epel-release-Quelle

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@localhost ~]# yum -y installiere epel-release

[root@localhost ~]# yum alles bereinigen && yum makecache

2. Erstellen Sie eine lokale Yum-Quelle

#Installieren Sie die Datenbank [root@localhost ~]# yum -y install mariadb-server mariadb

#Firewall und Sicherheitsfunktionen deaktivieren [root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0

#Öffnen Sie die Datenbank [root@localhost ~]# systemctl start mariadb.service

3. Ändern Sie die ml-Hauptkonfigurationsdatei

[root@localhost ~]# vim /etc/my.cnf
#Löschen Sie die ersten 9 Zeilen und fügen Sie den folgenden Inhalt hinzu [mysqld]
log_error=/var/lib/mysql/mysql.err #Dateispeicherort des Fehlerloglog=/var/lib/mysql/mysql_log.log #Dateispeicherort des Zugriffsloglog_slow_queries=/var/lib/mysql_slow_queris.log #Dateispeicherort des Man-Logbinlog-ignore-db=mysql,information_schema #mysql,information_schema generiert keine binären Logdateiencharacter_set_server=utf8 #Zeichensatzlog_bin=mysql_bin #Funktion für binäre Logdatei aktiviertserver_id=1 #Unterschiedliche Host-IDs sind unterschiedlichlog_slave_updates=true #Autorisierungssynchronisierungsync_binlog=1 #Funktion für binäre Logdatei aktiviertauto_increment_increment=2 #Automatische Inkrementierungauto_increment_offset=1 #Startwert[root@localhost ~]# systemctl mariadb.service neu starten 
[root@localhost ~]# netstat -natp | grep 3306

4. Kopieren Sie die Konfigurationsdatei auf die anderen drei Datenbankserver und achten Sie darauf, die Server-ID zu ändern

[root@localhost ~]# scp /etc/my.cnf [email protected]:etc/

5. Rufen Sie die Datenbank auf und zeigen Sie die Protokolldateiinformationen an

[root@localhost ~]# mysql

#Zeigen Sie den Protokolldateinamen und den Positionswert an MariaDB [(keine)]> show master status;    
+------------------+----------+--------------+--------------------------+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql_bin.000001 | 245| | mysql,Informationsschema |
+------------------+----------+--------------+--------------------------+
1 Zeile im Satz (0,00 Sek.)

6. Erteilen Sie sich gegenseitig Zugriffsberechtigungen auf m1 und m2 und autorisieren Sie Synchronisierungsprotokolle

#Geben Sie sich gegenseitig Zugriffsberechtigungen für m1 und m2MariaDB [(keine)]> gewähren Sie Replikations-Slave auf *.* an „Replikation“@„192.168.142.%“, identifiziert durch „123456“;

#Geben Sie den Protokolldateinamen und die Positionsparameter von m2 auf m1MariaDB an [(keine)]> ändern Sie Master in master_host='192.168.142.134',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;

#Geben Sie den Protokolldateinamen und die Positionsparameter von m1 auf m2MariaDB an [(keine)]> ändern Sie Master in master_host='192.168.142.131',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;

7. Aktivieren Sie die Synchronisierung auf m1

MariaDB [(keine)]> Slave starten;

8. Überprüfen Sie den Synchronisierungsstatus. Auf beiden Master-Servern sollte „Ja“ angezeigt werden.

MariaDB [(keine)]> Slave-Status anzeigen\G;

       Slave_IO_Running: Ja
      Slave_SQL_Running: Ja

9. Erstellen Sie eine Datenbank auf m1

MariaDB [(keine)]> Datenbankschule erstellen;

10. Zeigen Sie die synchronisierte Datenbank auf m2 an

MariaDB [(keine)]> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| Schule |
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)

11. Führen Sie dies auf beiden Slaves durch. Beachten Sie die Änderungen in der Protokolldatei und den Positionsparametern (beide zeigen auf m1).

MariaDB [(keine)]> ändere Master in master_host='192.168.142.131',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;

12. Synchronisation aktivieren

MariaDB [(keine)]> Slave starten;

#Informationen zu den Synchronisierungsdaten auf dem Slave-Server MariaDB anzeigen [(keine)]> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| Schule |
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)

13. Installieren Sie MMM-bezogene Software auf vier Servern

[root@localhost ~]# yum -y install mysql-mmm*

14. Konfigurieren Sie die Konfigurationsdatei mmm_common.conf

[root@localhost ~]# vim /etc/mysql-mmm/mmm_common.conf

<Host-Standard>
#Ändern Sie die Netzwerkkarte auf ens33
  Clusterschnittstelle ens33
  pid_pfad /run/mysql-mmm-agent.pid
  bin_pfad /usr/libexec/mysql-mmm/
  Replikation_Benutzerreplikation

  #Ändern Sie das Autorisierungskennwort replication_password 123456
  agent_user mmm_agent

  #Ändern Sie das Agentenautorisierungskennwort agent_password 123456
</host>

#Geben Sie die Rollen und IP-Adressen der vier Server <host db1> an
  IP-Adresse 192.168.142.131
  Modus Master
  Peer-DB2
</host>

<Host db2>
  IP-Adresse 192.168.142.134
  Modus Master
  Peer-DB1
</host>

<Host db3>
  IP-Adresse 192.168.142.130
  Modus Slave
</host>

<Host db4>
  IP-Adresse 192.168.142.135
  Modus Slave
</host>

#Legen Sie die virtuelle IP des Hauptservers fest
<Rollenautor>
  Hosts db1, db2
  ips 192.168.142.250
  Modus exklusiv
</Rolle>

#Stellen Sie die virtuelle IP des Slave-Servers ein
<Rollenleser>
  Hosts db3, db4
  ips 192.168.142.251, 192.168.142.252
  Modus ausgeglichen
</Rolle>

15. Kopieren Sie die Konfigurationsdatei von m1 auf die anderen drei Server

[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf
[root@localhost ~]# scp mmm_common.conf/mmm_common.conf [email protected]:/etc/mysql-mmm/mmm_common.conf

Schritt 2: Konfigurieren des Monitorservers

1. Installieren Sie die Epel-Release-Quelle und die MMM-bezogene Software

[root@localhost ~]# systemctl stoppe firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# yum -y installiere epel-release
[root@localhost ~]# yum alles bereinigen && yum makecache
[root@localhost ~]# yum -y install mysql-mmm*

2. Kopieren Sie die Konfigurationsdatei von m1 auf den Überwachungsserver

[root@localhost ~]# scp mmm_common.conf [email protected]:/etc/mysql-mmm/

3. Konfigurieren Sie die Konfigurationsdatei mmm_common.conf

[root@localhost ~]# vim /etc/mysql-mmm/mmm_mon.conf

<Monitor>
  IP-Adresse 127.0.0.1
  pid_pfad /run/mysql-mmm-monitor.pid
  bin_pfad /usr/libexec/mysql-mmm
  Statuspfad /var/lib/mysql-mmm/mmm_mond.status

  #Ping_ips zeigt auf die IP-Adressen der vier Server 192.168.142.131,192.168.142.134,192.168.142.130,192.168.142.135
  auto_set_online 10

4. Autorisieren Sie mmm_agent auf allen Datenbankservern

MariaDB [(keine)]> gewährt Super, Replikationsclient, Prozess auf *.* an 'mmm_agent'@'192.168.142.%', identifiziert durch '123456';
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

5. Autorisieren Sie mmm_moniter auf allen Datenbankservern

MariaDB [(keine)]> gewährt Replikationsclient auf *.* an 'mmm_monitor'@'192.168.18.%', identifiziert durch '123456'; 
Abfrage OK, 0 Zeilen betroffen (0,02 Sek.)

6. Aktualisieren Sie die Datenbank und legen Sie den Proxy-Namen auf allen Datenbankservern fest

[root@localhost ~]# vim /etc/mysql-mmm/mmm_agent.conf #Ändern Sie die Agentenkonfigurationsdatei #m1 Standardname this db1 

#Der Name dieser db2 in m2

#s1 nenne dieses db3

#s2 nenne dies db4

7. Aktivieren Sie die Proxy-Funktion auf allen Datenbankservern und stellen Sie sie so ein, dass sie beim Booten automatisch gestartet wird

#Starten Sie die Agentenfunktion [root@localhost ~]# systemctl start mysql-mmm-agent.service

#Automatischen Start einrichten [root@localhost ~]# systemctl enable mysql-mmm-agent.service  

8. Starten Sie den Überwachungsdienst auf dem Überwachungsserver und überprüfen Sie den Status jedes Knotens

[root@localhost mysql-mmm]# systemctl start mysql-mmm-monitor.service 
[root@localhost ~]# mmm_control anzeigen
 db1(192.168.142.131) Master/ONLINE. Rollen: Writer(192.168.142.250)
 db2(192.168.142.134) master/ONLINE. Rollen: 
 db3(192.168.142.130) Slave/ONLINE. Rollen: Leser(192.168.142.252)
 db4(192.168.142.135) Slave/ONLINE. Rollen: Leser(192.168.142.251)

9. Überprüfen Sie den Status aller Server

[root@localhost ~]# mmm_control prüft alle
db4 ping [letzte Änderung: 25.11.2019 18:23:03] OK
db4 mysql [letzte Änderung: 2019/11/25 18:23:03] OK
db4 rep_threads [letzte Änderung: 2019/11/25 18:23:03] OK
db4 rep_backlog [letzte Änderung: 2019/11/25 18:23:03] OK: Backlog ist null
db2 ping [letzte Änderung: 2019/11/25 18:23:03] OK
db2 mysql [letzte Änderung: 2019/11/25 18:59:01] OK
db2 rep_threads [letzte Änderung: 2019/11/25 18:59:01] OK
db2 rep_backlog [letzte Änderung: 2019/11/25 18:59:01] OK: Backlog ist null
db3 ping [letzte Änderung: 25.11.2019 18:23:03] OK
db3 mysql [letzte Änderung: 2019/11/25 18:59:01] OK
db3 rep_threads [letzte Änderung: 2019/11/25 18:59:01] OK
db3 rep_backlog [letzte Änderung: 2019/11/25 18:59:01] OK: Backlog ist null
db1 ping [letzte Änderung: 25.11.2019 18:23:03] OK
db1 mysql [letzte Änderung: 2019/11/25 18:59:01] OK
db1 rep_threads [letzte Änderung: 2019/11/25 18:59:01] OK
db1 rep_backlog [letzte Änderung: 2019/11/25 18:59:01] OK: Backlog ist null

Drittens, Fehlerprüfung

1. Simulieren Sie die Ausfallzeit des M1-Servers und stoppen Sie den Dienst

[root@localhost ~]# systemctl stop mariadb.service

2. Wenn der m1-Server ausfällt, erhält m2 die virtuelle IP und stellt weiterhin Dienste bereit

[root@localhost ~]# mmm_control anzeigen
 db1(192.168.142.131) master/ONLINE. Rollen: 
 db2(192.168.142.134) Master/ONLINE. Rollen: Writer(192.168.142.250)
 db3(192.168.142.130) Slave/ONLINE. Rollen: Leser(192.168.142.252)
 db4(192.168.142.135) Slave/ONLINE. Rollen: Leser(192.168.142.251)

3. Wenn der S1-Server ausfällt, erhält S2 die virtuelle IP und stellt weiterhin Dienste bereit

[root@localhost ~]# mmm_control show db1(192.168.142.131) master/ONLINE. Rollen: writer(192.168.142.250) 
db2(192.168.142.134) master/ONLINE. Rollen: 
db3(192.168.142.130) slave/HARD_OFFLINE. Rollen: 
db4(192.168.142.135) Slave/ONLINE. Rollen: Leser(192.168.142.251), Leser(192.168.142.252

4. Autorisieren Sie die Anmeldung für die Überwachungsserveradresse auf dem m1-Server

MariaDB [(keine)]> gewähre alles auf *.* an „root“@„192.168.142.136“, identifiziert durch „123456“;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

5. Installieren Sie den Datenbank-Client auf dem Überwachungsserver

[root@localhost ~]# yum -y installiere MariaDB 

6. Melden Sie sich mit dem angegebenen Benutzer bei der Datenbank auf dem Überwachungsserver an und erstellen Sie Dateninformationen

[root@localhost ~]# mysql -u root -p -h 192.168.142.250
Passwort eingeben: 
#Geben Sie das Passwort ein#Erstellen Sie eine Datenbank MariaDB [(keine)]> create database BDQN;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

7. Zeitlich synchronisierte Dateninformationen können in allen Datenbanken angezeigt werden

MariaDB [(keine)]> Datenbanken anzeigen; #Datenbanken anzeigen+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
| BDQN | #Mit BDQN-Datenbank synchronisieren | mysql |
| Leistungsschema |
| Schule |
| Prüfung |
+--------------------+
6 Zeilen im Satz (0,00 Sek.)

Die MMM-Clusterarchitektur ist nun vollständig. Vielen Dank fürs Lesen!!!

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:
  • Bereitstellung eines MySQL-Hochverfügbarkeitsclusters und Implementierung eines Failovers
  • Detaillierte Bereitstellungsschritte für MySQL MHA-Hochverfügbarkeitskonfiguration und Failover
  • Erstellen Sie einen stabilen und hochverfügbaren Cluster basierend auf MySQL + MyCat, Lastausgleich, Master-Slave-Replikation und Lese-/Schreibtrennung
  • Vergleichende Analyse der Hochverfügbarkeitslösungen von Oracle und MySQL
  • MySQL-Hochverfügbarkeitslösung MMM (MySQL Multi-Master-Replikationsmanager)
  • MySQL Serie 14 MySQL Hochverfügbarkeitsimplementierung

<<:  Detaillierte Erklärung des Initialisierungsmechanismus in Bash

>>:  Vue2.x-Reaktionsfähigkeit – einfache Erklärung und Beispiele

Artikel empfehlen

Detaillierte Erklärung des Linux-Texteditors Vim

Vim ist ein leistungsstarker Vollbild-Texteditor ...

Detaillierte Einführung in das MySQL-Installationstutorial unter Windows

Inhaltsverzeichnis 1. Einige Konzepte, die Sie vo...

Detaillierte grafische Erklärung der MySQL-Abfragesteuerungsanweisungen

MySQL-Abfrage-Steueranweisungen Felddeduplizierun...

MySQL 8.0.20 Installations- und Konfigurations-Tutorial unter Win10

Super ausführliches Tutorial zur Installation und...

Zusammenfassung der @-Verwendung in CSS (mit Beispielen und Erklärungen)

Eine At-Regel ist eine Deklaration, die Anweisung...

Zusammenfassung des Wissens zum Vue V-Modell

​v-model ist eine Vue-Direktive, die eine bidirek...

So ändern Sie den Bildlaufleistenstil in Vue

Inhaltsverzeichnis Zunächst müssen Sie wissen, da...

Analyse der Protokolldateien im Tomcat-Protokollverzeichnis (Zusammenfassung)

Bei jedem Start von Tomcat werden die folgenden P...

So konvertieren Sie MySQL horizontal in vertikal und vertikal in horizontal

Daten initialisieren Tabelle löschen, wenn `test_...

Die perfekte Lösung für das AutoFill-Problem in Google Chrome

In Google Chrome werden Sie nach der erfolgreiche...

Detaillierte Erklärung zur Verwendung der Vue-Nummernschild-Eingabekomponente

Eine einfache Nummernschild-Eingabekomponente (vu...