Konfigurieren der Multi-Source-Replikation von Amazon RDS für MySQL - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfigurieren der Multi-Source-Replikation von Amazon RDS für MySQL

Bei der Multi-Source-Replikation können Sie eine DB-Instance von Amazon RDS für MySQL als Replikat einrichten, das binäre Protokollereignisse aus mehreren Quell-DB-Instances von RDS für MySQL empfängt. Die Multi-Source-Replikation wird für DB-Instances von RDS für MySQL unterstützt, auf denen die folgenden Engine-Versionen ausgeführt werden:

  • Alle MySQL 8.4-Versionen

  • 8.0.35 und höhere Nebenversionen

  • 5.7.44 und höhere Nebenversionen

Informationen zur MySQL-Multi-Source-Replikation finden Sie unter MySQL-Multi-Source-Replikation in der MySQL-Dokumentation. Die MySQL-Dokumentation enthält detaillierte Informationen zu dieser Funktion. In diesem Thema wird beschrieben, wie Sie die Multi-Source-Replikationskanäle auf den DB-Instances von RDS für MySQL konfigurieren und verwalten.

Anwendungsfälle für die Multi-Source-Replikation

Die folgenden Fälle eignen sich gut für die Verwendung der Multi-Source-Replikation in RDS für MySQL:

  • Anwendungen, die mehrere Shards auf separaten DB-Instances mit einem einzigen Shard zusammenführen oder kombinieren müssen.

  • Anwendungen, die Berichte anhand von Daten generieren müssen, die aus mehreren Quellen zusammengefasst wurden.

  • Anforderungen zum Erstellen zusammengefasster langfristiger Backups von Daten, die auf mehreren DB-Instances von RDS für MySQL verteilt sind.

Voraussetzungen für eine Multi-Source-Replikation

Damit Sie die Multi-Source-Replikation konfigurieren können, müssen die folgenden Voraussetzungen erfüllt sein.

  • Vergewissern Sie sich, dass für jede Quell-DB-Instance von RDS für MySQL automatische Backups aktiviert sind. Durch die Aktivierung automatischer Backups wird die binäre Protokollierung ermöglicht. Informationen zum Aktivieren von automatischen Backups finden Sie unter Aktivieren von automatisierten Backups.

  • Um Replikationsfehler zu vermeiden, wird empfohlen, Schreibvorgänge in die Quell-DB-Instances zu blockieren. Legen Sie hierzu den Parameter read-only in einer benutzerdefinierten Parametergruppe, die mit der Quell-DB-Instance von RDS für MySQL verbunden ist, auf ON fest. Sie können die AWS-Managementkonsole oder die AWS CLI verwenden, um eine neue benutzerdefinierte Parametergruppe zu erstellen oder eine vorhandene zu ändern. Weitere Informationen erhalten Sie unter Erstellen einer DB-Parametergruppe in Amazon RDS und Ändern von Parametern in einer DB-Parametergruppe in Amazon RDS.

  • Fügen Sie für die jeweilige Quell-DB-Instance die IP-Adresse der Instance zur Sicherheitsgruppe von Amazon Virtual Private Cloud (VPC) für die Multi-Source-DB-Instance hinzu. Um die IP-Adresse einer Quell-DB-Instance zu identifizieren, können Sie den Befehl dig RDS Endpoint ausführen. Führen Sie den Befehl von einer Amazon-EC2-Instance aus, die sich in derselben VPC wie die Ziel-Multi-Source-DB-Instance befindet.

  • Verwenden Sie für die jeweilige Quell-DB-Instance einen Client, um eine Verbindung mit der DB-Instance herzustellen und einen Datenbankbenutzer mit den erforderlichen Berechtigungen für die Replikation zu erstellen, wie im folgenden Beispiel gezeigt.

    CREATE USER 'repl_user' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user';
    Anmerkung

    Ab MySQL 8.4 wurde die Berechtigung REPLICATION SLAVE eingestellt und durch REPLICATION REPLICA ersetzt. Verwenden Sie für MySQL 8.4 und höhere Versionen stattdessen die folgende Syntax:

    CREATE USER 'repl_user' IDENTIFIED BY 'password'; GRANT REPLICATION CLIENT, REPLICATION REPLICA ON *.* TO 'repl_user';

Konfigurieren von Multi-Source-Replikationskanälen auf DB-Instances von RDS für MySQL

Die Konfiguration von Multi-Source-Replikationskanälen ähnelt der Konfiguration einer Single-Source-Replikation. Bei der Multi-Source-Replikation aktivieren Sie zunächst die Binärprotokollierung für die Quell-Instance. Importieren Sie anschließend die Daten aus den Quellen in das Multi-Source-Replikat. Starten Sie danach die Replikation von jeder Quelle aus, indem Sie die Binärprotokollkoordinaten oder die automatische GTID-Positionierung verwenden.

Führen Sie die folgenden Schritte aus, um eine DB-Instance von RDS für MySQL als Multi-Source-Replikat von zwei oder mehr DB-Instances von RDS für MySQL zu konfigurieren.

Schritt 1: Importieren von Daten aus den Quell-DB-Instances in das Multi-Source-Replikat

Führen Sie die folgenden Schritte für jede Quell-DB-Instance aus.

Bevor Sie die Daten einer Quelle in das Multi-Source-Replikat importieren, ermitteln Sie die aktuelle Binärprotokolldatei und Position, indem Sie den Befehl SHOW MASTER STATUS ausführen. Notieren Sie sich diese Details zwecks Verwendung im nächsten Schritt. In dieser Beispielausgabe ist die Datei mysql-bin-changelog.000031 und die Position 107.

Anmerkung

Ab MySQL 8.4 wurde der Befehl SHOW MASTER STATUS nicht mehr verwendet und durch SHOW BINARY LOG STATUS ersetzt. Verwenden Sie für MySQL 8.4 und höhere Versionen stattdessen SHOW BINARY LOG STATUS.

File Position ----------------------------------- mysql-bin-changelog.000031 107 -----------------------------------

Kopieren Sie nun die Datenbank von der Quell-DB-Instance mithilfe von mysqldump in das Multi-Source-Replikat, wie im folgenden Beispiel aufgeführt.

mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u RDS_user_name \ -p RDS_password \ --host=RDS Endpoint | mysql \ --host=RDS Endpoint \ --port=3306 \ -u RDS_user_name \ -p RDS_password

Nach dem Kopieren der Datenbank können Sie den schreibgeschützten Parameter in der Quell-DB-Instance auf OFF festlegen.

Schritt 2: Starten der Replikation von den Quell-DB-Instances in das Multi-Source-Replikat

Verwenden Sie für die jeweilige Quell-DB-Instance die Anmeldeinformationen des Administratorbenutzers, um eine Verbindung mit der Instance herzustellen, und führen Sie die folgenden zwei gespeicherten Prozeduren aus. Mit diesen gespeicherten Prozeduren wird die Replikation auf einem Kanal konfiguriert und dann gestartet. In diesem Beispiel wird der Name und die Position der Binärprotokolldatei aus der Beispielausgabe im vorherigen Schritt verwendet.

CALL mysql.rds_set_external_source_for_channel('mysourcehost.example.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1, 'channel_1'); CALL mysql.rds_start_replication_for_channel('channel_1');

Weitere Informationen zur Verwendung dieser und anderer gespeicherten Prozeduren zum Einrichten und Verwalten der Replikationskanäle finden Sie unter Verwalten der Multi-Source-Replikation.

Verwenden von Filtern bei der Multi-Source-Replikation

Sie können Replikationsfilter verwenden, um festzulegen, welche Datenbanken und Tabellen mit einem Lesereplikat repliziert werden. Replikationsfilter können Datenbanken und Tabellen in die Replikation einbeziehen oder sie von der Replikation ausschließen. Weitere Informationen zu Replikationsfiltern finden Sie unter Konfigurieren von Replikationsfiltern mit MySQL.

Bei der Multi-Source-Replikation können Sie Replikationsfilter global oder auf Kanalebene konfigurieren. Die Filterung auf Kanalebene ist nur für unterstützte DB-Instances verfügbar, auf denen Version 8.0 oder Version 8.4 ausgeführt wird. In den folgenden Beispielen ist die Konfiguration von Filtern global oder auf Kanalebene angegeben.

Beachten Sie die folgenden Anforderungen und das folgende Verhalten bei der Filterung von Multi-Source-Replikationen:

  • Die Kanalnamen müssen in invertierte Anführungszeichen (``) gesetzt werden.

  • Wenn Sie die Replikationsfilter in der Parametergruppe ändern, werden die Multi-Source-Replikate von sql_thread für alle Kanäle mit den Aktualisierungen neu gestartet, um die Änderungen dynamisch zu übernehmen. Wenn eine Aktualisierung einen globalen Filter einbezieht, werden alle Replikationskanäle im Ausführungszustand neu gestartet.

  • Alle globalen Filter werden vor jeglichen kanalspezifischen Filtern angewendet.

  • Wenn ein Filter global und auf Kanalebene angewendet wird, wird nur der Filter auf Kanalebene übernommen. Wenn die Filter beispielsweise replicate_ignore_db="db1,`channel_22`:db2" lauten, wird der auf db1 festgelegte Parameter replicate_ignore_db auf alle Kanäle angewendet, mit Ausnahme von channel_22, und nur channel_22 ignoriert Änderungen von db2.

Beispiel 1: Festlegen eines globalen Filters

Im folgenden Beispiel wird die Datenbank temp_data in jedem Kanal von der Replikation ausgeschlossen.

Für Linux, macOS oder Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-ignore-db,ParameterValue='temp_data',ApplyMethod=immediate"

Beispiel 2: Festlegen eines Filters auf Kanalebene

Im folgenden Beispiel sind Änderungen der Datenbank sample22 nur im Kanal channel_22 enthalten. Ebenso sind Änderungen der Datenbank sample99 nur im Kanal channel_99 enthalten.

Für Linux, macOS oder Unix:

aws rds modify-db-parameter-group \ --db-parameter-group-name myparametergroup \ --parameters "ParameterName=replicate-do-db,ParameterValue='\`channel_22\`:sample22,\`channel_99\`:sample99',ApplyMethod=immediate"

Überwachen von Multi-Source-Replikationskanälen

Sie können einzelne Kanäle in einem Multi-Source-Replikat mithilfe der folgenden Methoden überwachen:

  • Um den Status aller Kanäle oder eines bestimmten Kanals zu überwachen, stellen Sie eine Verbindung mit dem Multi-Source-Replikat her und führen Sie den Befehl SHOW REPLICA STATUS oder SHOW REPLICA STATUS FOR CHANNEL 'channel_name' aus. Weitere Informationen finden Sie unter Überprüfen des Replikationsstatus in der MySQL-Dokumentation.

  • Verwenden Sie die RDS-Ereignisbenachrichtigung, um eine Benachrichtigung zu erhalten, wenn ein Replikationskanal gestartet, gestoppt oder entfernt wird. Weitere Informationen finden Sie unter Arbeiten mit Amazon-RDS-Ereignisbenachrichtigungen.

  • Um die Verzögerung für einen bestimmten Kanal zu überwachen, überprüfen Sie dessen Metrik ReplicationChannelLag. Datenpunkte für diese Metrik mit einem Zeitraum von 60 Sekunden (1 Minute) stehen 15 Tage lang zur Verfügung. Zum Ermitteln der Replikationskanalverzögerung für einen Kanal verwenden Sie die Instance-ID und den Namen des Replikationskanals. Um eine Benachrichtigung zu erhalten, wenn diese Verzögerung einen bestimmten Schwellenwert überschreitet, können Sie einen CloudWatch-Alarm einrichten. Weitere Informationen finden Sie unter Überwachen von Amazon RDS-Metriken mit Amazon CloudWatch.

Überlegungen und bewährte Methoden bei der Multi-Source-Replikation

Bevor Sie die Multi-Source-Replikation von RDS für MySQL verwenden, machen Sie sich mit den folgenden Faktoren und bewährten Methoden vertraut:

  • Vergewissern Sie sich, dass eine als Multi-Source-Replikat konfigurierte DB-Instance über ausreichende Ressourcen wie Durchsatz, Arbeitsspeicher, CPU und IOPS verfügt, um den Workload mehrerer Quell-Instances zu verarbeiten.

  • Überwachen Sie die Ressourcennutzung für das Multi-Source-Replikat regelmäßig und passen Sie die Speicher- oder Instance-Konfiguration an, um den Workload zu verarbeiten, ohne die Ressourcen zu belasten.

  • Sie können die Multi-Thread-Replikation für ein Multi-Source-Replikat konfigurieren, indem Sie die Systemvariable replica_parallel_workers auf einen Wert größer als 0 festlegen. In diesem Fall entspricht die Anzahl der Threads, die jedem Kanal zugewiesen sind, dem Wert dieser Variablen zuzüglich eines Koordinator-Threads zur Verwaltung der Anwender-Threads.

  • Konfigurieren Sie die Replikationsfilter entsprechend, um Konflikte zu vermeiden. Um eine gesamte Datenbank in eine andere Datenbank eines Replikats zu replizieren, können Sie die Option --replicate-rewrite-db verwenden. Sie können beispielsweise alle Tabellen von Datenbank A in Datenbank B einer Replikat-Instance replizieren. Diese Vorgehensweise kann hilfreich sein, wenn alle Quell-Instances dieselbe Schema-Benennungskonvention verwenden. Informationen zur Option --replicate-rewrite-db finden Sie unter Optionen und Variablen für Replikatserver in der MySQL-Dokumentation.

  • Um Replikationsfehler zu vermeiden, sollten Sie nicht in das Replikat schreiben. Es wird empfohlen, den Parameter read_only in Multi-Source-Replikaten zu aktivieren, um Schreibvorgänge zu blockieren. Auf diese Weise können Replikationsprobleme vermieden werden, die durch widersprüchliche Schreibvorgänge verursacht werden.

  • Um die Leistung von Lesevorgängen wie Sortierungen und Verknüpfungen mit hoher Auslastung zu verbessern, die auf dem Multi-Source-Replikat ausgeführt werden, erwägen Sie die Verwendung von RDS-optimierten Lesevorgängen. Diese Funktion kann bei Abfragen hilfreich sein, die von großen temporären Tabellen oder Sortierdateien abhängen. Weitere Informationen finden Sie unter Verbesserung der Abfrageleistung für RDS für MySQL mit Amazon RDS Optimized Reads.

  • Um die Replikationsverzögerung zu minimieren und die Leistung eines Multi-Source-Replikats zu verbessern, erwägen Sie die Aktivierung optimierter Schreibvorgänge. Weitere Informationen finden Sie unter Verbesserung der Schreibleistung mit RDS-optimierten Schreibvorgängen für MySQL.

  • Führen Sie Verwaltungsvorgänge (z. B. Konfigurationsänderungen) jeweils auf einem Kanal durch und vermeiden Sie es, an mehreren Kanälen von mehreren Verbindungen aus Änderungen vorzunehmen. Diese Vorgehensweisen können zu Konflikten bei Replikationsvorgängen führen. Beispielsweise kann die gleichzeitige Ausführung der Prozeduren rds_skip_repl_error_for_channel und rds_start_replication_for_channel von mehreren Verbindungen aus dazu führen, dass Ereignisse auf einem anderen Kanal als vorgesehen übersprungen werden.

  • Sie können Backups auf einer Multi-Source-Replikations-Instance aktivieren und Daten dieser Instance in einen Amazon-S3-Bucket exportieren, um sie für langfristige Zwecke zu speichern. Es ist jedoch wichtig, auch Backups mit entsprechender Aufbewahrungsdauer für die einzelnen Quell-Instances zu konfigurieren. Informationen zum Exportieren von Snapshot-Daten nach Amazon S3 finden Sie unter Exportieren von DB-Snapshot-Daten nach Amazon S3 für Amazon RDS.

  • Um den Workload des Lesevorgangs auf ein Multi-Source-Replikat zu verteilen, können Sie Lesereplikate eines Multi-Source-Replikats erstellen. Je nach den Anforderungen Ihrer Anwendung befinden sich diese Lesereplikate in verschiedenen AWS-Regionen. Weitere Informationen über Lesereplikate finden Sie unter Arbeiten mit MySQL-Lesereplikaten.

Einschränkungen für die Multi-Source-Replikation bei RDS für MySQL

Folgende Einschränkungen gelten für die Multi-Source-Replikation bei RDS für MySQL:

  • Derzeit unterstützt RDS für MySQL die Konfiguration von maximal 15 Kanälen für ein Multi-Source-Replikat.

  • Eine Lesereplikat-Instance kann nicht als Multi-Source-Replikat konfiguriert werden.

  • Um die Multi-Source-Replikation bei RDS für MySQL zu konfigurieren, auf dem Engine-Version 5.7 ausgeführt wird, muss das Leistungsschema auf der Replikat-Instance aktiviert sein. Die Aktivierung des Leistungsschemas ist bei RDS für MySQL mit Engine-Version 8.0 oder 8.4 optional.

  • Bei RDS für MySQL mit Engine-Version 5.7 gelten Replikationsfilter für alle Replikationskanäle. Bei RDS für MySQL mit Engine-Version 8.0 oder 8.4 können Sie Filter konfigurieren, die für alle Replikationskanäle oder für einzelne Kanäle gelten.

  • Durch die Wiederherstellung eines RDS-Snapshots oder eine Wiederherstellung zu einem bestimmten Zeitpunkt (PITR) werden Konfigurationen eines Multi-Source-Replikatkanals nicht wiederhergestellt.

  • Wenn Sie ein Lesereplikat eines Multi-Source-Replikats erstellen, werden nur Daten der Multi-Source-Instance repliziert. Kanalkonfigurationen werden nicht wiederhergestellt.

  • MySQL unterstützt nicht die Einrichtung einer unterschiedlichen Anzahl paralleler Worker des jeweiligen Kanals. Basierend auf dem Wert replica_parallel_workers erhält der Kanal die gleiche Anzahl paralleler Worker.

Die folgenden zusätzlichen Einschränkungen gelten, wenn das Multi-Source-Replikationsziel ein Multi-AZ-DB-Cluster ist:

  • Ein Kanal muss für eine Quell-Instance von RDS für MySQL konfiguriert werden, bevor Schreibvorgänge auf diese Instance ausgeführt werden.

  • Für die jeweilige Quell-Instance von RDS für MySQL muss die GTID-basierte Replikation aktiviert sein.

  • Durch ein Failover-Ereignis auf dem DB-Cluster wird die Konfiguration der Multi-Source-Replikation entfernt. Um diese Konfiguration wiederherzustellen, müssen die Konfigurationsschritte wiederholt werden.