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

Zuletzt aktualisiert: 08.09.2021

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

Kurzbeschreibung

Sie können ein MySQL-Replikat von Amazon RDS 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 regionsü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 RDS-MySQL-Instances in verschiedenen AWS-Konten oder -Regionen eingerichtet.

Auflösung

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

Hinweis: Konto A enthält die Haupt-RDS-MySQL-Instance in der Quellregion. Konto B enthält das RDS-MySQL-Replikat in der Zielregion.

1.    Stellen Sie in Konto A (der primären Amazon-RDS-MySQL-Instance) sicher, dass die binäre Protokollierung aktiviert ist. Standardmäßig sind automatisierte Backups und die binäre Protokollierung in RDS MySQL aktiviert. Die binäre Protokollierung wird immer dann aktiviert, wenn automatisierte Backups aktiviert sind.

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 RDS-MySQL-Instance 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 eines verschlüsselten 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 von der neu erstellten RDS-MySQL-Instance in Konto B (dem Zielkonto) über das öffentliche Internet geleitet werden. Die Sicherheitsgruppen schützen Ihre Amazon-RDS-MySQL-Instance.

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

14.    Richten Sie auf Ihrer Ziel-Instance in Konto B eine externe Replikation ein:

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: Endpunkt der primären Instance
3306: Port der primären Instance
repl_user: In Schritt 3 erstellter Benutzername für die Replikation
Passwort: In Schritt 3 erstelltes Benutzerpasswort
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?