Wie erstelle ich ein regionenübergreifendes MySQL-Replikat für Amazon RDS in einem anderen AWS-Konto?

Letzte Aktualisierung: 24.05.2022

Ich möchte ein Amazon Relational Database Service (Amazon RDS)-Replikat für MySQL in einer anderen AWS-Region und einem anderen Konto als die Quell-DB-Instance erstellen. Wie kann ich vorgehen?

Kurzbeschreibung

Sie können ein Replikat von für Amazon RDS für MySQL in einer anderen AWS-Region erstellen und von der Quell-DB-Instance aus für die folgenden Anwendungsfälle ein Konto erstellen:

  • Notfallwiederherstellung verbessern
  • Global aufskalieren
  • Migration zwischen AWS-Regionen und Konten

Hinweis: Es gibt keine direkte Möglichkeit, ein regionenübergreifendes Replikat in einem anderen AWS-Konto mithilfe der Amazon-RDS-Konsole oder der AWS Command Line Interface (AWS CLI) zu erstellen. Mit den in diesem Artikel beschriebenen Schritten wird eine externe binlog-basierte Replikation zwischen zwei Instances von RDS für MySQL in verschiedenen AWS-Konten oder -Regionen eingerichtet.

Auflösung

Gehen Sie folgendermaßen vor, um ein regionenübergreifendes Replikat von Amazon RDS für MySQL in einem anderen AWS-Konto zu erstellen.

Hinweis: Konto A enthält die primäre Instance von MySQL für RDS in der Quellregion. Konto B enthält das MySQL-Replikat für RDS in der Zielregion.

1.    Stellen Sie in Konto A (der primären Instance von Amazon RDS für MySQL) sicher, dass die binäre Protokollierung aktiviert ist. Standardmäßig sind automatische Backups und binäre Protokollierung in RDS für MySQL aktiviert. Binäre Protokollierung wird immer dann aktiviert, wenn automatische Backups aktiviert werden.

Hinweis: Ein Ausfall tritt auf, wenn Sie den Aufbewahrungszeitraum für Backups von „0" auf einen Wert ungleich Null ändern oder umgekehrt.

2.    Aktualisieren Sie den binlog-Aufbewahrungszeitraum mit dem folgenden Befehl:

mysql>  CALL mysql.rds_set_configuration(name,value);

Tipp: Wählen Sie einen Zeitraum, in dem die binären Protokolldateien auf Ihrer Replikationsquelle lange genug aufbewahrt werden, damit vor dem Löschen alle Änderungen übernommen werden können. Amazon RDS behält binlog-Dateien auf einer MySQL-Instance für bis zu 168 Stunden (7 Tage) bei. Weitere Informationen finden Sie unter mysql.rds_set_configuration.

Die folgende Syntax legt den binlog-Aufbewahrungszeitraum beispielsweise auf 24 Stunden fest:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

3.    Erstellen Sie einen Replikationsbenutzer auf der primären Instance in Konto A und erteilen Sie dann die erforderlichen Berechtigungen:

mysql> CREATE USER 'repl_user'@'<domain_name>' IDENTIFIED BY '<password>';

4.    Erteilen Sie dem in Schritt 3 erstellten Benutzer die (erforderlichen) Berechtigungen REPLICATION CLIENT und REPLICATION SLAVE:

mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO  'repl_user'@'<domain_name>';

5.    Erstellen Sie ein regionenübergreifendes Lesereplikat im primären Konto (Konto A) mit ausgewählter Zielregion.

6.    Melden Sie sich bei der erstellten Replikations-Instance in Konto A an. Bestätigen Sie dann, dass das Replikat mit der primären DB-Instance synchronisiert ist:

mysql> SHOW SLAVE STAUS\G

Hinweis: Stellen Sie sicher, dass der Wert für Seconds_Behind_Master „0“ beträgt. Wenn der Wert „0“ ist, ist das Replikat mit der primären DB-Instance synchronisiert. Weitere Informationen finden Sie unter Überwachen der Lesereplikation.

7.    Nachdem das Lesereplikat mit der primären DB-Instance synchronisiert wurde, beenden Sie die Replikation auf der in Schritt 5 erstellten Replikations-Instance. Verwenden Sie die folgende Syntax, um die Replikation zu beenden:

mysql> call mysql.rds_stop_replication();

8.    Führen Sie den Befehl SHOW SLAVE STATUS auf dem Replikat aus und notieren Sie dann die Ausgabewerte für Relay_Master_Log_File und Exec_Master_Log_Pos. Die Werte Relay_Master_Log_File und Exec_Master_Log_Pos sind Ihre binären Protokollkoordinaten, die in späteren Schritten zum Einrichten einer externen Replikation verwendet werden.

9.    Erstellen Sie einen DB-Snapshot Ihrer Replikations-Instance in Konto A.

(Optional) Oder Sie können ein natives Tool verwenden, das logische Sicherungen erstellt (z. B. mysqldump), um Daten aus der Replikations-Instance in Konto A zu exportieren. Das native Tool kann dann verwendet werden, um die Daten in eine neu erstellte Instance von RDS für MySQL derselben Version in Konto B zu importieren. Bei diesem Ansatz müssen Sie keine Snapshots oder AWS-KMS-Schlüssel zwischen den beiden Konten kopieren und freigeben. Wenn Sie sich für diesen Ansatz entscheiden, fahren Sie mit Schritt 12 fort, um den Netzwerkzugang und die Replikation zwischen beiden Instances einzurichten. Bevor Sie diesen Ansatz wählen, müssen Sie Daten in die Amazon RDS for MySQL-Instance in Konto B importieren.

10.    Teilen Sie den DB-Snapshot mit Konto B.

Hinweis: Wenn Ihr DB-Snapshot verschlüsselt ist, muss der AWS-KMS-Schlüssel, der zur Verschlüsselung des Snapshots verwendet wird, für das Zielkonto freigegeben werden. Weitere Informationen finden Sie unter Freigeben verschlüsselter Snapshots.

11.    Stellen Sie den DB-Snapshot in Konto B wieder her.

Hinweis: Eine DB-Instance kann nicht aus einem freigegebenen verschlüsselten Snapshot wiederhergestellt werden. Erstellen Sie stattdessen eine Kopie des DB-Snapshots und stellen Sie die DB-Instance aus der kopierten Version wieder her.

12.    Richten Sie den Netzwerkzugriff zwischen Konto A (Quellkonto) und Konto B (Zielkonto) ein. Der Netzwerkzugriff ermöglicht den Datenverkehr zwischen den Quell- und Zielkonten.

13.    Konfigurieren Sie die Regeln für eingehende Sicherheitsgruppen für die primäre DB-Instance von Konto A. Mit dieser Konfiguration kann der Datenverkehr über das öffentliche Internet von der neu erstellten Instance von RDS für MySQL in Konto B (dem Zielkonto) geleitet werden. Die Sicherheitsgruppen schützen Ihre Instance von Amazon RDS für MySQL.

Für privaten Replikations-Datenverkehr muss eine VPC-Peering-Verbindung zwischen den beiden AWS-Konten erstellt und akzeptiert werden.

14.    Richten Sie die externe Replikation auf Ihrer Ziel-Instance in Konto B ein. Verwenden Sie repl_user innerhalb des Befehls als Parameter. Hinweis: Der Befehl CALL mysql.rds_set_external_master sollte von einem DB-Benutzer mit Ausführungsbefehls-Rechten ausgeführt werden.

mysql> CALL mysql.rds_set_external_master (
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , mysql_binary_log_file_name
  , mysql_binary_log_file_location
  );

Beispiel:

mysql> CALL mysql.rds_set_external_master (mytestinnstance.us-east-1.rds.amazonaws.com', 3306, 'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

mytestinnstance.us-east-1.rds.amazonaws.com: primärer Instance-Endpunkt 3306: primärer Instance-Port repl_user: Replikationsbenutzername, der in Schritt 3 erstellt wurde password: in Schritt 3 erstelltes Benutzerkennwort mysql-bin-changelog.000031: Name der binären Protokolldatei aus der Ausgabe von Schritt 8 107: binäre Protokollposition aus der Ausgabe von Schritt 8

15.    Starten Sie die Replikation auf der wiederhergestellten Instance in Konto B:

CALL mysql.rds_start_replication;

Hier ist eine Beispielausgabe:

+-------------------------+
| Message                 |
+-------------------------+
| Slave running normally. |
+-------------------------+

16.    Führen Sie den folgenden Befehl auf der Instance für Konto B aus, um den Replikationsstatus zu überprüfen:

mysql> show replica status \G

Hinweis: Für MySQL Version 8.0.22 und höher ist SHOW SLAVE STATUS veraltet. Stattdessen kann SHOW REPLICA STATUS verwendet werden. Weitere Informationen finden Sie unter Überprüfen des Replikationsstatus auf der MySQL-Website.

17.    Löschen Sie das in Schritt 5 erstellte Replikat (das als Zwischeninstance genutzt wurde). Dieses Replikat wurde verwendet, um binäre Protokollkoordinaten zu extrahieren, ohne dass Schreibvorgänge auf der primären Instance in Konto A ausgesetzt werden mussten.

Überlegungen zur regionsübergreifenden Replikation

Beachten Sie die folgenden Ansätze für die regionsübergreifende Replikation:

  • Eine Quell-DB-Instance kann regionsübergreifende Lesereplikate in mehreren AWS-Regionen haben. Weitere Informationen finden Sie unter Erstellen eines Lesereplikats in einer anderen AWS-Region.
  • Sie können mit einer höheren Verzögerungszeit für jedes Lesereplikat rechnen, das sich in einer anderen AWS-Region befindet als die Quell-Instance. Diese Verzögerung ist auf die längeren Netzwerkkanäle zwischen den regionalen Rechenzentren zurückzuführen. Informationen zur Replikationsverzögerung finden Sie unter Überwachen der Lesereplikation.
  • Für die Daten, die für die regionsübergreifende Replikation übertragen werden, fallen Amazon RDS-Datenübertragungskosten an. Weitere Informationen zu diesen Datenübertragungskosten finden Sie unter Preise für regionsübergreifende Replikationen.

War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?