Heim Datenbank MySQL-Tutorial So entwerfen Sie die Architektur des MySQL-Binlog-Speichersystems

So entwerfen Sie die Architektur des MySQL-Binlog-Speichersystems

Jun 02, 2023 pm 10:10 PM
mysql binlog

1. Einführung in Kingbus

1.1 Was ist Kingbus?

Kingbus ist ein verteiltes MySQL-Binlog-Speichersystem, das auf dem Raft-Protokoll mit starker Konsistenz basiert. Es kann als MySQL-Slave fungieren, um Binlog vom echten Master zu synchronisieren und in einem verteilten Cluster zu speichern. Gleichzeitig fungiert es auch als MySQL-Master, um das Binlog im Cluster mit anderen Slaves zu synchronisieren. Kingbus hat die folgenden Funktionen:

Kompatibel mit dem MySQL-Replikationsprotokoll, synchronisiert das Binlog auf dem Master über Gtid und unterstützt den Slave beim Abrufen des Binlogs vom Kingbus über Gtid.

Überregionale Datenreplikation: Kingbus unterstützt die überregionale Datenreplikation über das Raft-Protokoll. Es wird garantiert, dass die in den Cluster geschriebenen Binlog-Daten über mehrere Knoten hinweg stark konsistent sind und die Binlog-Reihenfolge vollständig mit der auf dem Master übereinstimmt.

Hohe Verfügbarkeit: Da Kingbus auf dem starken Konsensprotokoll Raft basiert, kann eine hohe Verfügbarkeit des gesamten Binlog-Pull- und Push-Dienstes erreicht werden, wenn mehr als die Hälfte der Knoten im Cluster überleben.

1.2 Welche Probleme kann Kingbus lösen?

Kingbus kann den Netzwerkübertragungsverkehr des Masters reduzieren. In einer Replikationstopologie mit einem Master und mehreren Slaves muss der Master Binlog an jeden Slave senden. Wenn zu viele Slaves vorhanden sind, erreicht der Netzwerkverkehr wahrscheinlich die Obergrenze der Netzwerkkarte des Masters. Wenn der Master beispielsweise Vorgänge wie das Löschen einer großen Tabelle oder Online-DDL ausführt, kann sofort eine große Anzahl von Binlog-Ereignissen generiert werden. Wenn 10 Slaves mit dem Master verbunden sind, wird der Netzwerkkartenverkehr auf dem Master um das Zehnfache verstärkt . Wenn der Master eine Gigabit-Netzwerkkarte verwendet, kann die Netzwerkkarte voll sein, wenn mehr als 10 MB/S Datenverkehr generiert werden. Durch die Verbindung mit dem Master über Kingbus können Slaves auf mehrere Maschinen verteilt werden, um den Übertragungsverkehr auszugleichen.

Um den Master-Failover-Prozess zu vereinfachen, müssen Sie lediglich einen mit dem Kingbus verbundenen Slave zum Master hochstufen und den Kingbus zum neuen Master umleiten. Andere Slaves sind weiterhin mit dem Kingbus verbunden und die Replikationstopologie bleibt unverändert.

Sparen Sie den vom Master zum Speichern von Binlog-Dateien verwendeten Speicherplatz. Im Allgemeinen verwendet MySQL teurere SSDs. Wenn die Binlog-Datei viel Platz beansprucht, müssen die in MySQL gespeicherten Daten reduziert werden. Sie können die Anzahl der auf dem Master gespeicherten Binlog-Dateien reduzieren, indem Sie alle Binlogs in Kingbus speichern

Unterstützen Sie die heterogene Replikation. Stellen Sie eine Verbindung zu Kingbus über den Open-Source-Kanal von Alibaba her. Kingbus überträgt das Binlog kontinuierlich an den Kanal, schiebt es dann in die Kafka-Nachrichtenwarteschlange und speichert es schließlich in Hive Analyse des Geschäfts.

2. Kingbus-Gesamtstruktur

Die Gesamtstruktur von Kingbus ist in der folgenden Abbildung dargestellt:

Der Speicher ist für die Speicherung von Raft-Protokolleinträgen und Metadaten verantwortlich. Sie unterscheiden sich durch unterschiedliche Header-Informationen. Der Datenteil des Raft-Protokolls ist daher nicht erforderlich von Protokollen separat, sparen Sie Speicherplatz. Da Kingbus einige Metainformationen speichern muss, z. B. Abstimmungsinformationen für Raft-Knoten und den spezifischen Inhalt einiger spezieller Binlog-Ereignisse (FORMAT_DESCRIPTION_EVENT).

Raft repliziert die Lead-Wahl, Protokollreplikation und andere Funktionen des Kingbus-Clusters mithilfe der etcd-Raft-Bibliothek.

Der Binlog-Syncer läuft nur auf dem Lead-Knoten des Raft-Clusters. Im gesamten Cluster gibt es nur einen Syncer. Der Syncer gibt vor, ein Slave zu sein und stellt eine Master-Slave-Replikationsverbindung zum Master her. Der Master filtert die Binlog-Ereignisse, die der Syncer akzeptiert hat, basierend auf dem vom Syncer gesendeten „executed_gtid_set“ und sendet nur Binlog-Ereignisse, die der Syncer nicht akzeptiert hat Dieses Replikationsprotokoll ist vollständig kompatibel mit dem MySQL-Master-Slave-Replikationsmechanismus. Nachdem der Syncer das Binlog-Ereignis empfangen hat, führt er eine Verarbeitung entsprechend dem Binlog-Ereignistyp durch, kapselt dann das Binlog-Ereignis in eine Nachricht und sendet sie an den Raft-Cluster. Durch den Raft-Algorithmus kann dieses Binlog-Ereignis auf mehreren Knoten gespeichert werden und eine starke Konsistenz erreichen.

Der Binlog-Server ist ein Master, der das Replikationsprotokoll implementiert. Der Binlog-Server kann eine Verbindung zu dem vom Binlog-Server überwachten Port herstellen MySQL-Replikationsprotokoll. Wenn kein Binlog-Ereignis an den Slave gesendet wird, sendet der Binlog-Server regelmäßig Heartbeat-Ereignisse an den Slave, um die Replikationsverbindung aufrechtzuerhalten.

Der API-Server ist für die Verwaltung des gesamten Kingbus-Clusters verantwortlich, einschließlich der folgenden:

Rafting-Cluster-Mitgliedschaftsvorgang, Cluster-Status anzeigen, Knoten hinzufügen, Knoten entfernen, Knoteninformationen aktualisieren usw.

Binlog-Syncer-bezogene Vorgänge: Starten Sie einen Binlog-Syncer, stoppen Sie den Binlog-Syncer und überprüfen Sie den Binlog-Syncer-Status.

Vorgänge im Zusammenhang mit dem Binlog-Server: Starten eines Binlog-Servers, Stoppen des Binlog-Servers und Überprüfen des Binlog-Serverstatus. Verschiedene Anomalien in der Serverschicht wirken sich nicht auf die Raft-Schicht aus. Der Server kann als Plug-In verstanden werden, das bei Bedarf gestartet und gestoppt werden kann. Wenn Sie Kingbus in Zukunft erweitern, müssen Sie lediglich den Server mit der entsprechenden Logik implementieren. Wenn Sie beispielsweise einen Kafka-Protokollserver implementieren, können Sie die Nachrichten in Kingbus über den Kafka-Client nutzen.

​3.Kingbus-Kernimplementierung

3.1 Kernimplementierung des Speichers

Es gibt zwei Protokollformen im Speicher: Eines ist das Raft-Protokoll (im Folgenden als Raft-Protokoll bezeichnet), das vom Raft-Algorithmus generiert und verwendet wird, und das andere ist ein Benutzerformularprotokoll (dh ein MySQL-Binlog-Ereignis). . Bei der Gestaltung des Speichers werden zwei Protokollformen zu einem Protokolleintrag kombiniert. Es unterscheidet sich nur durch unterschiedliche Header-Informationen. Der Speicher besteht aus Datendateien und Indexdateien, wie in der folgenden Abbildung dargestellt:

Das Segment hat eine feste Größe (1 GB) und kann nur zusätzlich geschrieben werden. Der Name lautet first_raft_index-last_raft_index und gibt den Raft-Indexbereich des Segments an.

Nur das letzte Segment kann geschrieben werden und sein Dateiname lautet first_raft_index-inprogress. Andere Segmente sind schreibgeschützt.

Schreibgeschützte Segmente und entsprechende Indexdateien werden über mmap geschrieben und gelesen.

Der Indexinhalt des letzten Segments wird sowohl auf der Festplatte als auch im Speicher gespeichert. Das Lesen des Index erfordert nur das Lesen aus dem Speicher.

3.2 Nutzung der etcd-Raft-Bibliothek

Die Etcd-Raft-Bibliothek ist Single-Threaded, wenn angewendete Protokolle, festgeschriebene Einträge usw. verarbeitet werden. Informationen zu bestimmten Funktionen finden Sie unter dem Link. Die Verarbeitungszeit dieser Funktion muss so kurz wie möglich sein. Wenn die Verarbeitungszeit die Raft-Wahlzeit überschreitet, wird der Cluster neu gewählt. Dieser Punkt erfordert besondere Aufmerksamkeit.

3.3 Kernimplementierung des Binlog-Syncers

Die Hauptaufgabe des Binlog-Syncers ist:

Pull-Binlog-Ereignis

Binlog-Ereignis analysieren und verarbeiten

Senden Sie Binlog-Ereignisse an den Raft-Cluster. Offensichtlich kann der Pipeline-Mechanismus verwendet werden, um die Verarbeitungsgeschwindigkeit des gesamten Prozesses zu verbessern. Kingbus verwendet für die Verarbeitung jeder Phase eine separate Goroutine und verbindet verschiedene Phasen über Pipelines. Da der Binlog-Syncer die Binlog-Ereignisse einzeln empfängt, kann der Master nach dem Aufhängen des Syncers erneut verbunden werden. Zu diesem Zeitpunkt muss der Binlog-Syncer möglicherweise unvollständig sein Mit seinen einzigartigen Fähigkeiten implementiert Kingbus die Funktion der Transaktionsintegritätsanalyse, die vollständig unter Bezugnahme auf den MySQL-Quellcode implementiert ist.

3.4 Kernimplementierung des Binlog-Servers

Der Binlog-Server implementiert die Funktion eines Masters. Wenn der Slave eine Replikationsverbindung mit dem Binlog-Server herstellt, sendet der Slave relevante Befehle, und der Binlog-Server muss auf diese Befehle antworten. Senden Sie abschließend das Binlog-Ereignis an den Slave. Für jeden Slave startet der Binlog-Server eine Goroutine, um das Raft-Protokoll kontinuierlich zu lesen, die relevanten Header-Informationen zu entfernen und es in ein Binlog-Ereignis umzuwandeln, das dann an den Slave gesendet wird.

Das obige ist der detaillierte Inhalt vonSo entwerfen Sie die Architektur des MySQL-Binlog-Speichersystems. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Beziehung zwischen MySQL -Benutzer und Datenbank Die Beziehung zwischen MySQL -Benutzer und Datenbank Apr 08, 2025 pm 07:15 PM

In der MySQL -Datenbank wird die Beziehung zwischen dem Benutzer und der Datenbank durch Berechtigungen und Tabellen definiert. Der Benutzer verfügt über einen Benutzernamen und ein Passwort, um auf die Datenbank zuzugreifen. Die Berechtigungen werden über den Zuschussbefehl erteilt, während die Tabelle durch den Befehl create table erstellt wird. Um eine Beziehung zwischen einem Benutzer und einer Datenbank herzustellen, müssen Sie eine Datenbank erstellen, einen Benutzer erstellen und dann Berechtigungen erfüllen.

MySQL: Die einfache Datenverwaltung für Anfänger MySQL: Die einfache Datenverwaltung für Anfänger Apr 09, 2025 am 12:07 AM

MySQL ist für Anfänger geeignet, da es einfach zu installieren, leistungsfähig und einfach zu verwalten ist. 1. Einfache Installation und Konfiguration, geeignet für eine Vielzahl von Betriebssystemen. 2. Unterstützung grundlegender Vorgänge wie Erstellen von Datenbanken und Tabellen, Einfügen, Abfragen, Aktualisieren und Löschen von Daten. 3. Bereitstellung fortgeschrittener Funktionen wie Join Operations und Unterabfragen. 4. Die Leistung kann durch Indexierung, Abfrageoptimierung und Tabellenpartitionierung verbessert werden. 5. Backup-, Wiederherstellungs- und Sicherheitsmaßnahmen unterstützen, um die Datensicherheit und -konsistenz zu gewährleisten.

Kann ich das Datenbankkennwort in Navicat abrufen? Kann ich das Datenbankkennwort in Navicat abrufen? Apr 08, 2025 pm 09:51 PM

Navicat selbst speichert das Datenbankkennwort nicht und kann das verschlüsselte Passwort nur abrufen. Lösung: 1. Überprüfen Sie den Passwort -Manager. 2. Überprüfen Sie Navicats "Messnot Password" -Funktion; 3.. Setzen Sie das Datenbankkennwort zurück; 4. Kontaktieren Sie den Datenbankadministrator.

Die Abfrageoptimierung in MySQL ist für die Verbesserung der Datenbankleistung von wesentlicher Bedeutung, insbesondere im Umgang mit großen Datensätzen Die Abfrageoptimierung in MySQL ist für die Verbesserung der Datenbankleistung von wesentlicher Bedeutung, insbesondere im Umgang mit großen Datensätzen Apr 08, 2025 pm 07:12 PM

1. Verwenden Sie den richtigen Index, um das Abrufen von Daten zu beschleunigen, indem die Menge der skanierten Datenmenge ausgewählt wird. Wenn Sie mehrmals eine Spalte einer Tabelle nachschlagen, erstellen Sie einen Index für diese Spalte. Wenn Sie oder Ihre App Daten aus mehreren Spalten gemäß den Kriterien benötigen, erstellen Sie einen zusammengesetzten Index 2. Vermeiden Sie aus. Auswählen * Nur die erforderlichen Spalten. Wenn Sie alle unerwünschten Spalten auswählen, konsumiert dies nur mehr Serverspeicher und veranlasst den Server bei hoher Last oder Frequenzzeiten, beispielsweise die Auswahl Ihrer Tabelle, wie beispielsweise die Spalten wie innovata und updated_at und Zeitsteuer und dann zu entfernen.

So erstellen Sie Navicat Premium So erstellen Sie Navicat Premium Apr 09, 2025 am 07:09 AM

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

So kopieren Sie Tabellen in MySQL So kopieren Sie Tabellen in MySQL Apr 08, 2025 pm 07:24 PM

Durch das Kopieren einer Tabelle in MySQL müssen neue Tabellen erstellt, Daten eingefügt, Fremdschlüssel festgelegt, Indizes, Auslöser, gespeicherte Verfahren und Funktionen kopiert werden. Zu den spezifischen Schritten gehören: Erstellen einer neuen Tabelle mit derselben Struktur. Fügen Sie Daten aus der ursprünglichen Tabelle in eine neue Tabelle ein. Legen Sie die gleiche fremde Schlüsselbeschränkung fest (wenn die Originaltabelle eine hat). Erstellen Sie den gleichen Index. Erstellen Sie denselben Auslöser (wenn die ursprüngliche Tabelle eine hat). Erstellen Sie dieselbe gespeicherte Prozedur oder Funktion (wenn die ursprüngliche Tabelle verwendet wird).

Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Wie kann ich das Datenbankkennwort in Navicat für Mariadb anzeigen? Apr 08, 2025 pm 09:18 PM

Navicat für MariADB kann das Datenbankkennwort nicht direkt anzeigen, da das Passwort in verschlüsselter Form gespeichert ist. Um die Datenbanksicherheit zu gewährleisten, gibt es drei Möglichkeiten, Ihr Passwort zurückzusetzen: Setzen Sie Ihr Passwort über Navicat zurück und legen Sie ein komplexes Kennwort fest. Zeigen Sie die Konfigurationsdatei an (nicht empfohlen, ein hohes Risiko). Verwenden Sie Systembefehlsleitungs -Tools (nicht empfohlen, Sie müssen die Befehlszeilen -Tools beherrschen).

Wie man MySQL sieht Wie man MySQL sieht Apr 08, 2025 pm 07:21 PM

Zeigen Sie die MySQL -Datenbank mit dem folgenden Befehl an: Verbindung zum Server: MySQL -U -Benutzername -P -Kennwort ausführen STEILE -Datenbanken; Befehl zum Abrufen aller vorhandenen Datenbanken auswählen Datenbank: Verwenden Sie den Datenbanknamen. Tabelle Ansicht: Tabellen anzeigen; Tabellenstruktur anzeigen: Beschreiben Sie den Tabellennamen; Daten anzeigen: Wählen Sie * aus Tabellenname;

See all articles