Konfiguration multi-source-replication für RDS for 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.

Konfiguration multi-source-replication für RDS for MySQL

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

  • Nebenversionen 8.0.35 und höher

  • Nebenversionen 5.7.44 und höher

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

Anwendungsfälle für die Replikation mit mehreren Quellen

Die folgenden Fälle eignen sich gut für die Verwendung der Multisource-Replikation auf RDS für MySQL:

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

  • Anwendungen, die Berichte aus Daten generieren müssen, die aus mehreren Quellen konsolidiert wurden.

  • Anforderungen zur Erstellung konsolidierter langfristiger Backups von Daten, die auf mehrere RDS für MySQL-DB-Instances verteilt sind.

Überlegungen und bewährte Methoden für die Replikation mehrerer Quellen

Bevor Sie die Multiquellenreplikation auf RDS for MySQL verwenden, sollten Sie sich die folgenden Überlegungen und bewährten Methoden ansehen:

  • Stellen Sie sicher, dass eine als Multiquellen-Replikat konfigurierte DB-Instance über ausreichende Ressourcen wie Durchsatz, Arbeitsspeicher, CPU und IOPS verfügt, um die Arbeitslast mehrerer Quell-Instances zu bewältigen.

  • Überwachen Sie regelmäßig die Ressourcennutzung auf Ihrem Multisource-Replikat und passen Sie die Speicher- oder Instance-Konfiguration an, um die Arbeitslast zu bewältigen, ohne Ressourcen zu belasten.

  • Sie können die Multithread-Replikation auf einem Replikat mit mehreren Quellen konfigurieren, indem Sie die Systemvariable replica_parallel_workers auf einen Wert größer als setzen. 0 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 auf einem Replikat in eine andere Datenbank zu replizieren, können Sie die --replicate-rewrite-db Option verwenden. Sie können beispielsweise alle Tabellen in Datenbank A auf einer Replikatinstanz in Datenbank B replizieren. Dieser Ansatz kann hilfreich sein, wenn alle Quellinstanzen dieselbe Schema-Benennungskonvention verwenden. Informationen zu dieser --replicate-rewrite-db Option finden Sie unter Replica Server Options and Variables in der MySQL-Dokumentation.

  • Um Replikationsfehler zu vermeiden, sollten Sie vermeiden, in das Replikat zu schreiben. Es wurde empfohlen, den read_only Parameter auf Replikaten mit mehreren Quellen 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 Sortiervorgängen und High-Load-Joins, die auf dem Replikat mit mehreren Quellen ausgeführt werden, zu erhöhen, sollten Sie die Verwendung von RDS-optimierten Lesevorgängen in Betracht ziehen. 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 Verzögerung bei der Replikation zu minimieren und die Leistung eines Replikats mit mehreren Quellen zu verbessern, sollten Sie die Aktivierung optimierter Schreibvorgänge in Betracht ziehen. Weitere Informationen finden Sie unter Verbesserung der Schreibleistung mit RDS-optimierten Schreibvorgängen für MySQL.

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

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

  • Um den Lese-Workload auf ein Replikat mit mehreren Quellen zu verteilen, können Sie Read Replicas aus einem Replikat mit mehreren Quellen erstellen. Sie können diese Read Replicas AWS-Regionen je nach den Anforderungen Ihrer Anwendung an unterschiedlichen Orten platzieren. Weitere Informationen über Lesereplikate finden Sie unter Arbeiten mit MySQL-Lesereplikaten.

Voraussetzungen für die Replikation mit mehreren Quellen

Bevor Sie die Replikation mit mehreren Quellen konfigurieren, müssen Sie die folgenden Voraussetzungen erfüllen.

  • Stellen Sie sicher, dass für jede Quell-RDS für MySQL-DB-Instance automatische Backups aktiviert sind. Durch die Aktivierung automatischer Backups wird die binäre Protokollierung aktiviert. Informationen zum Aktivieren automatischer Backups finden Sie unterAktivieren von automatisierten Backups.

  • Um Replikationsfehler zu vermeiden, wurde empfohlen, Schreibvorgänge in die Quell-DB-Instances zu blockieren. Sie können dies tun, indem Sie den read-only Parameter ON in einer benutzerdefinierten Parametergruppe, die an die RDS for MySQL-Quell-DB-Instance angehängt ist, auf setzen. Sie können das AWS Management Console oder das verwenden AWS CLI , um eine neue benutzerdefinierte Parametergruppe zu erstellen oder eine bestehende zu ändern. Weitere Informationen finden Sie unter Erstellen einer DB-Parametergruppe und Ändern von Parametern in einer DB-Parametergruppe.

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

  • Verwenden Sie für jede Quell-DB-Instance einen Client, um eine Verbindung mit der DB-Instance herzustellen und einen Datenbankbenutzer mit den erforderlichen Rechten 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';

Konfiguration von Multisource-Replikationskanälen auf RDS für MySQL-DB-Instances

Die Konfiguration von Replikationskanälen mit mehreren Quellen ähnelt der Konfiguration der Replikation aus einzelnen Quellen. Bei der Replikation mit mehreren Quellen aktivieren Sie zunächst die binäre Protokollierung auf der Quellinstanz. Anschließend importieren Sie Daten aus den Quellen in das Multiquellen-Replikat. Anschließend starten Sie die Replikation von jeder Quelle aus, indem Sie die binären Log-Koordinaten oder die automatische GTID-Positionierung verwenden.

Gehen Sie wie folgt vor, um eine RDS for MySQL-DB-Instance als Multisource-Replikat von zwei oder mehr RDS for MySQL-DB-Instances zu konfigurieren.

Schritt 1: Importieren Sie Daten aus den Quell-DB-Instances in das Multiquellen-Replikat

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

Bevor Sie die Daten aus einer Quelle in das Multiquellen-Replikat importieren, ermitteln Sie die aktuelle binäre Protokolldatei und Position, indem Sie den SHOW MASTER STATUS Befehl ausführen. Notieren Sie sich diese Details, damit Sie sie im nächsten Schritt verwenden können. In dieser Beispielausgabe ist die Datei mysql-bin-changelog.000031 und die Position ist107.

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

Kopieren Sie nun die Datenbank von der Quell-DB-Instance in das Multiquellen-Replikat, indem Siemysqldump, wie im folgenden Beispiel, Folgendes verwenden.

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 auf der Quell-DB-Instance OFF auf setzen.

Schritt 2: Starten Sie die Replikation von den Quell-DB-Instances auf das Multiquellen-Replikat

Verwenden Sie für jede Quell-DB-Instance die Master-Benutzeranmeldedaten, um eine Verbindung zur Instance herzustellen, und führen Sie die folgenden beiden gespeicherten Prozeduren aus. Diese gespeicherten Prozeduren konfigurieren die Replikation auf einem Kanal und starten die Replikation. In diesem Beispiel werden der Name und die Position der Binlog-Datei 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, 0, 'channel_1'); CALL mysql.rds_start_replication_for_channel('channel_1');

Weitere Hinweise zur Verwendung dieser und anderer gespeicherter Prozeduren zur Einrichtung und Verwaltung Ihrer Replikationskanäle finden Sie unterVerwalten der Multi-Source-Replikation.

Verwenden von Filtern bei der Replikation mit mehreren Quellen

Sie können Replikationsfilter verwenden, um anzugeben, mit welchen Datenbanken und Tabellen in einem Multiquellenreplikat 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 Replikation mit mehreren Quellen können Sie Replikationsfilter global oder auf Kanalebene konfigurieren. Die Filterung auf Kanalebene ist nur bei unterstützten DB-Instances verfügbar, auf denen Version 8.0 ausgeführt wird. Die folgenden Beispiele zeigen, wie Filter global oder auf Kanalebene konfiguriert werden.

Beachten Sie die folgenden Anforderungen und das folgende Verhalten bei der Filterung bei der Replikation mit mehreren Quellen:

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

  • Wenn Sie die Replikationsfilter in der Parametergruppe ändern, werden die Multiquellen-Replikate sql_thread für alle Kanäle mit Aktualisierungen neu gestartet, um die Änderungen dynamisch zu übernehmen. Wenn ein Update einen globalen Filter beinhaltet, werden alle Replikationskanäle im laufenden Zustand neu gestartet.

  • Alle globalen Filter werden vor allen kanalspezifischen Filtern angewendet.

  • Wenn ein Filter global und auf Kanalebene angewendet wird, wird nur der Filter auf Kanalebene angewendet. Wenn die Filter beispielsweise auf replicate_ignore_db gesetzt sindreplicate_ignore_db="db1,`channel_22`:db2", db1 wird „auf“ auf alle Kanäle mit Ausnahme channel_22 von angewendet und channel_22 ignoriert nur Änderungen von. db2

Beispiel 1: Einen globalen Filter einrichten

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

Für LinuxmacOS, oderUnix:

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

Beispiel 2: Einstellen eines Filters auf Kanalebene

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

Für LinuxmacOS, oderUnix:

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"

Überwachung von Replikationskanälen mit mehreren Quellen

Sie können einzelne Kanäle in einem Replikat mit mehreren Quellen mithilfe der folgenden Methoden überwachen:

  • Um den Status aller Kanäle oder eines bestimmten Kanals zu überwachen, stellen Sie eine Verbindung zum Multiquellen-Replikat her und führen Sie den Befehl or aus. SHOW REPLICA STATUS SHOW REPLICA STATUS FOR CHANNEL 'channel_name' 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 die ReplicationChannelLag entsprechende Metrik. Datenpunkte für diese Metrik haben einen Zeitraum von 60 Sekunden (1 Minute) und sind für 15 Tage verfügbar. Verwenden Sie die Instanz-ID und den Namen des Replikationskanals, um die Verzögerung des Replikationskanals für einen Kanal zu ermitteln. 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.

Einschränkungen für die Replikation mehrerer Quellen auf RDS for MySQL

Die folgenden Einschränkungen gelten für die Replikation mehrerer Quellen auf RDS for MySQL:

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

  • Eine Read Replica-Instanz kann nicht als Multisource-Replikat konfiguriert werden.

  • Um die Multiquellreplikation auf RDS für MySQL mit Engine-Version 5.7 zu konfigurieren, muss das Leistungsschema auf der Replikatinstanz aktiviert sein. Die Aktivierung des Leistungsschemas ist auf RDS für MySQL, auf dem die Engine-Version 8.0 ausgeführt wird, optional.

  • Für RDS for MySQL, auf dem Engine Version 5.7 ausgeführt wird, gelten Replikationsfilter für alle Replikationskanäle. Für RDS for MySQL, auf dem die Engine-Version 8.0 ausgeführt wird, können Sie Filter konfigurieren, die für alle Replikationskanäle oder für einzelne Kanäle gelten.

  • Durch das Wiederherstellen eines RDS-Snapshots oder das Durchführen eines oint-in-time P-Restore (PITR) werden keine Replikatkanalkonfigurationen mit mehreren Quellen wiederhergestellt.

  • Wenn Sie ein Read Replica eines Multisource-Replikats erstellen, werden nur Daten aus der Multiquell-Instance repliziert. Es stellt keine Kanalkonfiguration wieder her.

  • MySQL unterstützt nicht die Einrichtung einer unterschiedlichen Anzahl parallel Worker für jeden Kanal. Jeder Kanal erhält die gleiche Anzahl parallel Worker, basierend auf dem replica_parallel_workers Wert.

Die folgenden zusätzlichen Einschränkungen gelten, wenn Ihr Replikationsziel mit mehreren Quellen ein Multi-AZ-DB-Cluster ist:

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

  • Für jede Quell-RDS for MySQL-Instance muss die GTID-basierte Replikation aktiviert sein.

  • Ein Failover-Ereignis auf dem DB-Cluster entfernt die Konfiguration für die Replikation mit mehreren Quellen. Um diese Konfiguration wiederherzustellen, müssen die Konfigurationsschritte wiederholt werden.