View a markdown version of this page

Konfiguration der Multiquellenreplikation für Amazon Aurora MySQL - Amazon Aurora

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 der Multiquellenreplikation für Amazon Aurora MySQL

Bei der Replikation mit mehreren Quellen können Sie einen Amazon Aurora MySQL-DB-Cluster als Replikat einrichten, das binäre Protokollereignisse von mehr als einer MySQL-Quelldatenbank empfängt. Bei jeder Quelle kann es sich um eine RDS for MySQL-DB-Instance, einen anderen Aurora MySQL-DB-Cluster oder eine MySQL-Datenbank handeln, die außerhalb von Amazon RDS ausgeführt wird.

Multi-source Die Replikation wird für Aurora MySQL-DB-Cluster unterstützt, auf denen die folgenden Engine-Versionen ausgeführt werden:

  • Aurora MySQL 8.4.8 und höher

Weitere Informationen zur MySQL-Replikation mit mehreren Quellen finden Sie unter Multi-Source MySQL-Replikation in der MySQL-Dokumentation.

Anmerkung

Multi-source Die Replikation auf Aurora MySQL verwendet die (primäre) Writer-Instance des Aurora-DB-Clusters als Replikationsziel. Alle gespeicherten Replikationsprozeduren müssen aufgerufen werden, während eine Verbindung zur Writer-Instance des Clusters besteht.

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

Erwägen Sie in den folgenden Fällen, die Replikation mit mehreren Quellen auf Aurora MySQL zu verwenden:

  • Shard-Konsolidierung — Anwendungen, die Daten aus mehreren Shards, die auf separaten DB-Instances gehostet werden, zu einem einzigen Aurora MySQL-DB-Cluster zusammenführen oder kombinieren müssen.

  • Konsolidiertes Reporting — Anwendungen, die Berichte aus Daten erstellen müssen, die aus mehreren Quellen konsolidiert wurden, und dabei die Vorteile der Leseskalierungsfunktionen von Aurora nutzen.

  • Long-term Backups — Anforderungen für die Erstellung konsolidierter Langzeit-Backups von Daten, die auf mehrere MySQL-compatible DB-Instances verteilt sind.

  • Cross-engine Migration — Konsolidierung von Daten aus mehreren RDS für MySQL-Instances oder externen MySQL-Servern in einem einzigen Aurora MySQL-Cluster während der Migration.

  • Multi-tenant Aggregation — Konsolidierung mehrerer Single-Tenant-Datenbanken in einem Aurora-Cluster mit mehreren Mandanten zur Kostenoptimierung und einfacheren Verwaltung.

Voraussetzungen für eine Multi-Source-Replikation

Bevor Sie die Replikation mit mehreren Quellen auf Ihrem Aurora MySQL-DB-Cluster konfigurieren, müssen Sie die Standardvoraussetzungen für die binäre Log-Replikation erfüllen, wie unter beschrieben. Einrichten einer binären Protokollreplikation für Aurora MySQL Dazu gehört das Aktivieren der Binärprotokollierung für jede Quelle, das Aufbewahren von Binärprotokollen, das Erstellen eines Replikationsbenutzers und das Erstellen einer Kopie oder eines Speicherauszugs jeder Quelle. Für eine Replikation mit mehreren Quellen wiederholen Sie diese Schritte für jede Quell-DB-Instance.

Stellen Sie zusätzlich zu den Standardvoraussetzungen sicher, dass Sie die folgenden spezifischen Anforderungen für die Replikation mit mehreren Quellen erfüllen.

  • Überprüfen Sie die Version und Konfiguration des Aurora MySQL-Zielclusters

    • Auf dem Aurora MySQL-DB-Cluster muss eine unterstützte Engine-Version (Aurora MySQL 8.4.8 und höher) ausgeführt werden.

    • Aktivieren Sie Autocommit auf der Aurora MySQL-Writer-Instance. Stellen Sie den autocommit Parameter 1 in Ihrer DB-Cluster-Parametergruppe auf ein.

  • Konfigurieren Sie die Netzwerkkonnektivität für jede Quelle

    Stellen Sie für jede Quell-DB-Instance sicher, dass die Aurora MySQL Writer-Instance über den angegebenen Port eine Verbindung zur Quelle herstellen kann. Zu den Optionen gehören:

    • Wenn sich Quelle und Ziel in derselben VPC befinden, konfigurieren Sie die Sicherheitsgruppe auf der Quell-DB-Instance so, dass eingehende Verbindungen auf Port 3306 (oder Ihrem benutzerdefinierten Port) aus der Sicherheitsgruppe des Aurora MySQL-Clusters zugelassen werden.

    • Wenn sie sich in verschiedenen VPCs befinden, richten Sie VPC-Peering ein oder verwenden Sie ein Transit-Gateway. Weitere Informationen finden Sie unter EINE DATENBANK Cluster in einer VPC, auf die von einer EC2-Instance in einer anderen VPC zugegriffen wird.

    • Wenn es sich bei der Quelle um eine externe Quelle handelt AWS, stellen Sie sicher, dass Netzwerkrouten verfügbar sind (z. B. über eine VPN-Verbindung oder eine VPN-Verbindung).

Anmerkung

Da die Replikation mit mehreren Quellen mehrere Quellen umfasst, müssen Sie die Konnektivität zu jeder Quelle unabhängig überprüfen. Stellen Sie sicher, dass Sicherheitsgruppen und Routing alle Quellendpunkte gleichzeitig berücksichtigen.

Konfigurieren Sie Replikationskanäle aus mehreren Quellen auf Aurora MySQL-DB-Clustern

Die Konfiguration von Replikationskanälen mit mehreren Quellen auf Aurora MySQL ähnelt der Konfiguration der Einzelquellenreplikation. Für die Replikation mit mehreren Quellen aktivieren Sie zunächst die binäre Protokollierung auf den Quell-Instances, importieren Daten aus den Quellen in den Aurora MySQL-Cluster und starten dann die Replikation von jeder Quelle aus mithilfe der binären Logkoordinaten oder der automatischen GTID-Positionierung.

Wichtig

Alle gespeicherten Replikationsprozeduren mit mehreren Quellen müssen aufgerufen werden, während eine Verbindung zur Writer-Instance des Aurora MySQL-DB-Clusters besteht. Wenn ein Failover auftritt, müssen Sie sich erneut mit der neuen Writer-Instance verbinden.

Schritt 1: Importieren Sie Daten aus den Quell-DB-Instances in den Aurora MySQL-Cluster

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

  1. Ermitteln Sie die aktuelle binäre Logdatei und die Position auf der Quell-DB-Instance.

    Für MySQL 8.4
    SHOW BINARY LOG STATUS;
    Für MySQL 8.0 und früher
    SHOW MASTER STATUS;

    Beispielausgabe:

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

    Notieren Sie die Position Werte File und. Sie benötigen sie in einem späteren Schritt.

  2. Kopieren Sie die Datenbank von der Quell-DB-Instance in den Aurora MySQL-Cluster mitmysqldump.

    mysqldump --databases database_name \ --single-transaction \ --compress \ --order-by-primary \ -u RDS_user_name \ -p'RDS_password' \ --host=source-endpoint.region.rds.amazonaws.com | mysql \ --host=aurora-cluster-endpoint.cluster-xxxxxx.region.rds.amazonaws.com \ --port=3306 \ -u aurora_user_name \ -p'aurora_password'
    Tipp

    Bei großen Datenbanken sollten Sie erwägen, einen Snapshot zu verwenden AWS DMS oder zu erstellen und wiederherzustellen, um die Datenübertragungszeit zu reduzieren.

  3. Nach Abschluss des Datenimports können Sie Schreibvorgänge auf der Quell-DB-Instance wieder aktivieren, sofern Sie sie zuvor auf schreibgeschützt gesetzt hatten.

Schritt 2: Starten Sie die Replikation von den Quell-DB-Instances zum Aurora MySQL-Cluster

Stellen Sie für jede Quell-DB-Instance eine Verbindung zur Writer-Instance des Aurora MySQL-DB-Clusters her und führen Sie die gespeicherten Prozeduren aus, um die Replikation auf einem Kanal zu konfigurieren und zu starten.

Option A: Verwenden der Position der binären Protokolldatei
CALL mysql.rds_set_external_source_for_channel( 'source-endpoint.region.rds.amazonaws.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 0, 'channel_1' ); CALL mysql.rds_start_replication_for_channel('channel_1');
Option B: Verwendung der automatischen GTID-Positionierung

Wenn Ihre Quell-DB-Instances GTID-based Replikation verwenden, können Sie die automatische Positionierung verwenden, anstatt binäre Log-Koordinaten anzugeben:

CALL mysql.rds_set_external_source_with_auto_position_for_channel( 'source-endpoint.region.rds.amazonaws.com', 3306, 'repl_user', 'password', 0, 0, 'channel_1' ); CALL mysql.rds_start_replication_for_channel('channel_1');
Anmerkung

Wenn Sie die automatische GTID-Positionierung verwenden, stellen Sie sicher, dass die enforce_gtid_consistency Parameter gtid_mode und für alle Quell-Instances und den Aurora MySQL-Cluster konsistent konfiguriert sind.

Wiederholen Sie diese Schritte für jede Quell-DB-Instance und geben Sie für jede Instanz einen eindeutigen Kanalnamen an (z. B., channel_1channel_2,channel_3).

Verwenden Sie Filter bei der Replikation mit mehreren Quellen

Sie können Replikationsfilter verwenden, um anzugeben, welche Datenbanken und Tabellen auf das Aurora MySQL-Replikat mit mehreren Quellen repliziert werden. Weitere Informationen zu Replikationsfiltern finden Sie unter. Konfigurieren von Replikationsfiltern mit Aurora MySQL Im Folgenden werden zusätzliche Filterfunktionen auf Kanalebene beschrieben, die bei der Replikation mit mehreren Quellen verfügbar sind.

Bei der Replikation mit mehreren Quellen können Sie Replikationsfilter auf zwei Ebenen konfigurieren:

  • Globale Filter — Auf alle Kanäle anwenden. Wird mithilfe der Aurora MySQL-DB-Cluster-Parametergruppe festgelegt (z. B.replicate-do-db,replicate-ignore-db).

  • Channel-level Filter — Gilt nur für bestimmte Kanäle und überschreibt globale Filter für diesen Kanal.

Wichtiges Verhalten
  • Sie müssen die Replikation neu starten, nachdem Sie die Filter auf Kanalebene geändert haben.

  • Wenn kein kanalspezifischer Filter konfiguriert ist, wendet Aurora MySQL die globalen Filter für diesen Kanal an.

  • Wenn ein Filter sowohl global als auch auf Kanalebene angewendet wird, wird nur der Filter auf Kanalebene für diesen Kanal angewendet.

Überwachen Sie Replikationskanäle aus mehreren Quellen

Sie können einzelne Kanäle auf einem Aurora MySQL-Replikat mit mehreren Quellen mithilfe der folgenden Methoden überwachen.

Verwenden Sie SHOW REPLICA STATUS

Stellen Sie eine Verbindung zur Writer-Instance des Aurora MySQL-DB-Clusters her und führen Sie Folgendes aus:

-- View status for all channels SHOW REPLICA STATUS\G -- View status for a specific channel SHOW REPLICA STATUS FOR CHANNEL 'channel_1'\G

Wichtige zu überwachende Felder:

Feld Description
Replica_IO_Running Ob der I/O Thread für den Kanal läuft
Replica_SQL_Running Ob der SQL-Thread für den Kanal läuft
Seconds_Behind_Source Verzögerung der Replikation für den Kanal in Sekunden
Last_IO_Error Letzter I/O Fehler auf dem Kanal
Last_SQL_Error Letzter SQL-Fehler auf dem Kanal
Source_Log_File Die aktuelle binäre Protokolldatei wird aus der Quelle gelesen
Exec_Source_Log_Pos Die Position im Binärlog, die der SQL-Thread angewendet hat

Verwenden Sie CloudWatch Metriken

Überwachen Sie die ReplicationChannelLag CloudWatch Metrik für jeden Replikationskanal. Diese Metrik liefert Daten zur Replikationsverzögerung pro Kanal mit einem Zeitraum von 60 Sekunden und ist 15 Tage lang verfügbar. Um die Verzögerung des Replikationskanals zu ermitteln, verwenden Sie die Aurora-DB-Cluster-Instance-ID und den Namen des Replikationskanals als Dimensionen. Sie können CloudWatch Alarme so konfigurieren, dass sie benachrichtigt werden, wenn die Verzögerung einen bestimmten Schwellenwert überschreitet. Weitere Informationen finden Sie unter Überwachung von Metriken in einem Amazon-Aurora-Cluster.

Verwalten Sie gespeicherte Replikationsprozeduren aus mehreren Quellen

Informationen zur Verwendung von gespeicherten Prozeduren zur Einrichtung und Verwaltung Ihrer Replikationskanäle aus mehreren Quellen finden Sie unter. Verwalten der Multi-Source-Replikation

Überlegungen und bewährte Methoden

Allgemeine Empfehlungen zur Replikationsoptimierung, einschließlich Binärprotokollformat, Parallel Workers und Enhanced Binlog, finden Sie unter. Optimieren einer binären Protokollreplikation für Aurora MySQL Die folgenden Überlegungen beziehen sich speziell auf die Replikation mit mehreren Quellen.

Planung der Ressourcen

Wenn mehrere Replikationskanäle ausgeführt werden, beträgt die Gesamtzahl der dem Replikat zugewiesenen Replikations-Threads: (replica_parallel_workers+ 1 Koordinator-Thread) × Anzahl der Kanäle. Mit dem replica_parallel_workers Standardwert von 4 und 10 Kanälen weist Aurora MySQL beispielsweise 50 Replikations-Threads zu. Erwägen Sie die Verwendung einer größeren DB-Instance-Klasse (z. B. db.r6g.2xlarge oder größer), die auf Ihrem gesamten Quelldurchsatz und der Kanalanzahl basiert. Jeder Kanal erhält die gleiche Anzahl an parallelen Workern. MySQL unterstützt nicht die Einstellung unterschiedlicher Anzahl paralleler Worker pro Kanal.

Konflikte vermeiden

Die MySQL-Replikation mit mehreren Quellen bietet keine Konflikterkennung oder -lösung. Sie müssen sicherstellen, dass Änderungen aus verschiedenen Quellen keine Konflikte verursachen. Zu den gängigen Strategien gehören:

  • Jede Quelle schreibt in eine andere Datenbank oder eine andere Gruppe von Tabellen.

  • Verwenden Sie Replikationsfilter (replicate-do-db), um sicherzustellen, dass jeder Kanal nur die Datenbanken repliziert, für die er verantwortlich ist.

  • Verwenden Sie die replicate-rewrite-db Option, um bei Bedarf einen Schemanamen aus der Quelle einem anderen Namen im Replikat zuzuordnen.

Um widersprüchliche Schreibvorgänge von Anwendungen zu verhindern, die sich direkt mit dem Multiquellen-Replikat verbinden, aktivieren Sie den schreibgeschützten Modus auf dem Aurora MySQL-Cluster: CALL mysql.rds_set_read_only(1);

Bewährte Betriebspraktiken

  • Ein Kanal nach dem anderen — Führen Sie Verwaltungsvorgänge (wie Konfigurationsänderungen, Überspringen von Fehlern oder starting/stopping Replikation) jeweils für einen Kanal durch. Vermeiden Sie gleichzeitige Änderungen an mehreren Kanälen über verschiedene Verbindungen.

  • Verzögerung pro Kanal überwachen — Überwachen Sie die Replikationsverzögerung für jeden Kanal mithilfe der ReplicationChannelLag CloudWatch Metrik.

  • Umgang mit Quell-Failover — Wenn eine Quell-DB-Instance ausfällt (z. B. ein Amazon Multi-AZ RDS-Failover), wird der Replikationskanal möglicherweise mit einem Fehler beendet. I/O Nachdem die Quelle wieder verfügbar ist:

    • Rufen Sie anmysql.rds_start_replication_for_channel, um die Replikation fortzusetzen.

    • Wenn der Fehler 1236 auftritt (Protokolldatei nicht gefunden), rufen Sie auf, mysql.rds_next_source_log_for_channel um mit der nächsten binären Protokolldatei fortzufahren.

  • Aurora Writer-Failover — Wenn die Aurora MySQL Writer-Instance zu einem Reader wechselt, werden die Konfigurationen der Replikationskanäle im gemeinsam genutzten Speicher des Clusters beibehalten. Nach Abschluss des Failovers werden die Replikations-Threads automatisch auf der neuen Writer-Instance neu gestartet.

Einschränkungen

Die folgenden Einschränkungen gelten speziell für die Aurora MySQL-Replikation mit mehreren Quellen. Allgemeine Einschränkungen der MySQL-Replikation mit mehreren Quellen (wie z. B. die parallele Worker-Konfiguration pro Kanal) finden Sie in der MySQL-Dokumentation unter Multi-Source MySQL-Replikation.

  • Multi-source Die Replikation wird nur in Aurora MySQL Version 8.4.8 und höher unterstützt.

  • Aurora MySQL unterstützt die Konfiguration von maximal 15 Kanälen für ein Replikat aus mehreren Quellen.

Fehlerbehebung

Informationen zur allgemeinen Problembehandlung bei der Replikation finden Sie unter. Amazon Aurora MySQL-Replikationsprobleme Im Folgenden finden Sie spezifische Hinweise zur Problembehandlung bei Replikationen aus mehreren Quellen.

Die Kanalkonfiguration wurde nach der Snapshot-Wiederherstellung nicht wiederhergestellt

DB-Cluster-Snapshots enthalten keine Kanalkonfigurationen mit mehreren Quellen. Nach der Wiederherstellung aus einem Snapshot:

  • Konfigurieren Sie jeden Kanal mit mysql.rds_set_external_source_for_channel oder mysql.rds_set_external_source_with_auto_position_for_channel neu.

  • Wenn Sie die automatische GTID-Positionierung verwenden, kann das Replikat automatisch an der Stelle fortgesetzt werden, an der es aufgehört hat.

  • Wenn Sie Binärprotokolldateipositionen verwenden, ermitteln Sie die aktuelle Position, indem Sie das Binärlog der Quelle mit der zuletzt angewendeten Transaktion auf dem wiederhergestellten Cluster vergleichen.

Die Verzögerung bei der Replikation nimmt auf einem oder mehreren Kanälen zu

  • Überprüfen Sie die CPU und die I/O Metriken der Writer-Instanz. Wenn die Ressourcenauslastung hoch ist, skalieren Sie die Instanzklasse.

  • Erwägen Siereplica_parallel_workers, den Durchsatz der SQL-Threads zu erhöhen.

  • Stellen Sie sicher, dass auf dem Kanal keine lang andauernden Transaktionen oder DDL-Operationen vorhanden sind, die den SQL-Thread blockieren könnten.

  • Suchen Sie nach widersprüchlichen Filterkonfigurationen, die dazu führen könnten, dass die Replikation verarbeitet wird, und verwerfen Sie dann eine große Anzahl von Ereignissen.

Beispiel: Vollständiges Setup mit mehreren Quellen mit drei Quellen

Das folgende Beispiel zeigt die Konfiguration eines Aurora MySQL-DB-Clusters als Multisource-Replikat von drei RDS für MySQL-Quell-Instances.

Schritt 1: Notieren Sie die Binärprotokollpositionen auf jeder Quelle

Stellen Sie eine Verbindung zu jeder Quelle her und zeichnen Sie die Binärlogkoordinaten auf:

-- On source 1 (orders-db.xxxxx.us-east-1.rds.amazonaws.com) SHOW BINARY LOG STATUS; -- Result: mysql-bin-changelog.000045, Position: 3892 -- On source 2 (inventory-db.xxxxx.us-east-1.rds.amazonaws.com) SHOW BINARY LOG STATUS; -- Result: mysql-bin-changelog.000012, Position: 1567 -- On source 3 (analytics-db.xxxxx.us-east-1.rds.amazonaws.com) SHOW BINARY LOG STATUS; -- Result: mysql-bin-changelog.000078, Position: 9421

Schritt 2: Daten aus jeder Quelle importieren

# Import from source 1 mysqldump --databases orders_db --single-transaction --compress \ -u admin -p --host=orders-db.xxxxx.us-east-1.rds.amazonaws.com | \ mysql --host=my-aurora-cluster.cluster-xxxxx.us-east-1.rds.amazonaws.com -u admin -p # Import from source 2 mysqldump --databases inventory_db --single-transaction --compress \ -u admin -p --host=inventory-db.xxxxx.us-east-1.rds.amazonaws.com | \ mysql --host=my-aurora-cluster.cluster-xxxxx.us-east-1.rds.amazonaws.com -u admin -p # Import from source 3 mysqldump --databases analytics_db --single-transaction --compress \ -u admin -p --host=analytics-db.xxxxx.us-east-1.rds.amazonaws.com | \ mysql --host=my-aurora-cluster.cluster-xxxxx.us-east-1.rds.amazonaws.com -u admin -p

Schritt 3: Replikationskanäle konfigurieren und starten

Stellen Sie eine Verbindung zur Aurora MySQL Writer-Instanz her:

-- Configure channel for source 1 (orders) CALL mysql.rds_set_external_source_for_channel( 'orders-db.xxxxx.us-east-1.rds.amazonaws.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000045', 3892, 0, 'orders_channel' ); -- Configure channel for source 2 (inventory) CALL mysql.rds_set_external_source_for_channel( 'inventory-db.xxxxx.us-east-1.rds.amazonaws.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000012', 1567, 0, 'inventory_channel' ); -- Configure channel for source 3 (analytics) CALL mysql.rds_set_external_source_for_channel( 'analytics-db.xxxxx.us-east-1.rds.amazonaws.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000078', 9421, 0, 'analytics_channel' ); -- Start all channels CALL mysql.rds_start_replication_for_channel('orders_channel'); CALL mysql.rds_start_replication_for_channel('inventory_channel'); CALL mysql.rds_start_replication_for_channel('analytics_channel');

Schritt 4: Überprüfen Sie den Replikationsstatus

SHOW REPLICA STATUS\G

Bestätigen Sie für jeden Kanal Folgendes:

  • Replica_IO_Running: Yes

  • Replica_SQL_Running: Yes

  • Seconds_Behind_Source: 0(oder ein niedriger Wert)

Zugehörige Ressourcen