So entwerfen Sie die Architektur des MySQL-Binlog-Speichersystems
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Fähigkeiten zur Verarbeitung von Big-Data-Strukturen: Chunking: Teilen Sie den Datensatz auf und verarbeiten Sie ihn in Blöcken, um den Speicherverbrauch zu reduzieren. Generator: Generieren Sie Datenelemente einzeln, ohne den gesamten Datensatz zu laden, geeignet für unbegrenzte Datensätze. Streaming: Lesen Sie Dateien oder fragen Sie Ergebnisse Zeile für Zeile ab, geeignet für große Dateien oder Remote-Daten. Externer Speicher: Speichern Sie die Daten bei sehr großen Datensätzen in einer Datenbank oder NoSQL.

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Oracle-Datenbank und MySQL sind beide Datenbanken, die auf dem relationalen Modell basieren, aber Oracle ist in Bezug auf Kompatibilität, Skalierbarkeit, Datentypen und Sicherheit überlegen, während MySQL auf Geschwindigkeit und Flexibilität setzt und eher für kleine bis mittlere Datensätze geeignet ist. ① Oracle bietet eine breite Palette von Datentypen, ② bietet erweiterte Sicherheitsfunktionen, ③ ist für Anwendungen auf Unternehmensebene geeignet; ① MySQL unterstützt NoSQL-Datentypen, ② verfügt über weniger Sicherheitsmaßnahmen und ③ ist für kleine bis mittlere Anwendungen geeignet.
