Wie kann ich eine unverschlüsselte Amazon RDS DB-Instance für MySQL oder MariaDB mit minimalen Ausfallzeiten verschlüsseln?

Lesedauer: 6 Minute
0

Ich habe versucht, eine verschlüsselte Read Replica meiner unverschlüsselten Amazon Relational Database Service (Amazon RDS) -Instance für MySQL oder MariaDB zu erstellen. Ich habe jedoch eine Fehlermeldung erhalten.

Kurzbeschreibung

Amazon RDS hat die folgenden Einschränkungen für verschlüsselte DB-Instances:

  • Sie können eine bestehende unverschlüsselte Amazon RDS-DB-Instance nicht ändern, um die Instance zu verschlüsseln.
  • Sie können keine verschlüsselte Read Replica aus einer unverschlüsselten Instance erstellen.

Da Sie eine bestehende Amazon RDS-Instance nicht verschlüsseln können, müssen Sie eine neue verschlüsselte Instance erstellen. Andernfalls erhalten Sie beim Erstellen einer verschlüsselten Read Replica einer unverschlüsselten Amazon RDS for MySQL-Instance die folgende Fehlermeldung:
„Sie können keine verschlüsselte Read Replica aus einer unverschlüsselten Instance erstellen. (Service: AmazonRDS; Statuscode: 400; Fehlercode: InvalidParameterCombination; Anfrage-ID:)“

Gehen Sie wie folgt vor, um eine unverschlüsselte DB-Instance mit minimaler Ausfallzeit zu verschlüsseln:

  1. Verschlüsseln Sie einen unverschlüsselten Snapshot, den Sie aus einer unverschlüsselten Read Replica der DB-Instance erstellen.
  2. Stellen Sie eine neue DB-Instance aus dem verschlüsselten Snapshot wieder her, um eine neue verschlüsselte DB-Instance bereitzustellen.
  3. Verwenden Sie die MySQL-Replikation, um Änderungen von der Quelle zur neuen verschlüsselten DB-Instance zu synchronisieren.
  4. Stellen Sie sicher, dass die neue, verschlüsselte DB-Instance mit der Quell-DB-Instance synchronisiert ist.
  5. Wechseln Sie Ihre Verbindungen und leiten Sie dann Ihren Traffic an die neue DB-Instance weiter.

Lösung

Verschlüsseln eines unverschlüsselten Snapshots

Befolgen Sie die folgenden Schritte, um einen unverschlüsselten Snapshot zu verschlüsseln, den Sie aus einer unverschlüsselten Read Replica erstellen:

  1. Erstellen Sie eine temporäre Read Replica für die unverschlüsselte Amazon RDS-DB-Instance als Quelle. In diesem Beispiel heißt die unverschlüsselte Quell-DB-Instance QUELLE-EU und die temporäre Read Replica heißt TEMP-RR.

  2. Stellen Sie eine Verbindung zu TEMP-RR her und beobachten Sie die Replikatverzögerung, bis Seconds_Behind_Master stabil auf dem Wert 0 ist. Der stabile Wert zeigt an, dass TEMP-RR mit SOURCE-EU synchronisiert ist.

    mysql> SHOW SLAVE STATUS \G
    Seconds_Behind_Master: 0
  3. Stoppen Sie den Replikations-Prozess auf TEMP-RR:

    MySQL > call mysql.rds_stop_replication;
    +---------------------------+
    | Message                   |
    +---------------------------+
    | Slave is down or disabled |
    +---------------------------+
  4. Notieren Sie sich die Werte für Relay_Master_Log_File und Exec_Master_Log_Pos von TEMP-RR:

    mysql> SHOW SLAVE STATUS \G
    Relay_Master_Log_File: mysql-bin-changelog.000012
    Exec_Master_Log_Pos: 123
  5. Stellen Sie in QUELLE-EU den Parameter Binlog-Aufbewahrungszeiten ein, um Binärprotokolle für die Zeit aufzubewahren, die für den Abschluss des Vorgangs erforderlich ist. Im folgenden Beispiel sind die Binlog-Aufbewahrungszeiten auf 24 Stunden festgelegt:

    mysql> call mysql.rds_set_configuration('binlog retention hours', 24);
  6. Machen Sie einen Snapshot von TEMP-RR. Löschen Sie optional TEMP-RR, nachdem Sie den Snapshot erstellt haben.

  7. Kopieren Sie den Snapshot von TEMP-RR und setzen Sie Enable Encryption auf Ja.

Eine neue DB-Instance aus dem verschlüsselten Snapshot wiederherstellen

Gehen Sie wie folgt vor, um eine neue DB-Instance aus dem verschlüsselten Snapshot wiederherzustellen:

  1. Stellen Sie eine neue DB-Instance aus dem kopierten Snapshot wieder her, für den die Verschlüsselung aktiviert ist. In diesem Beispiel heißt die neue verschlüsselte DB-Instance NEU-RR-EN.
  2. Ändern Sie die eingehenden Regeln in der Sicherheitsgruppe QUELLE-EU, um den Datenverkehr von NEU-RR-EN zuzulassen. Wenn Sie dieselbe Sicherheitsgruppe auf beiden DB-Instances verwenden, können Sie dieselbe Sicherheitsgruppen-ID-Referenz wie QUELLE-EU verwenden.
    Hinweis: Achten Sie darauf, ausgehenden Datenverkehr von NEU-RR-EN nach QUELLE-EU zuzulassen.

Synchronisieren Sie Änderungen von der Quell-Instance mit der neuen verschlüsselten Instance

Gehen Sie wie folgt vor, um mithilfe der MySQL-Replikation Änderungen von der Quelle auf die neue verschlüsselte DB-Instance zu synchronisieren:

  1. Loggen Sie sich bei SOURCE-EU ein.
  2. Richten Sie einen Replikationsbenutzer ein und gewähren Sie dem Benutzer dann die erforderlichen Berechtigungen:
    mysql> create user 'repl_user'@'%' identified by 'password123';
    mysql> grant replication slave, replication client on *.* to 'repl_user'@'%';
    mysql> show grants for 'repl_user'@'%';
    Hinweis: Ersetzen Sie repl_user durch Ihren eigenen Replikationsbenutzernamen und password123 durch Ihr eigenes Passwort.
  3. Stellen Sie eine Verbindung zu NEU-RR-EN her und stellen Sie eine Replikationsverbindung zu QUELLE-EU her:
    mysql> CALL mysql.rds_set_external_master ( 'rds-endpoint' , 3306 , 'repl_user' , 'password123' , 'mysql-bin.000012' , 123 , 0 );
    Hinweis: Ersetzen Sie den rds-Endpunkt mit dem DB-Instance-Endpunkt für QUELLE-EU. Ersetzen Sie repl\ _user und password123 durch den Benutzernamen und das Passwort, die Sie erstellt haben. Verwenden Sie die Werte Relay\ _Master\ _Log\ _File und Exec\ _Master\ _Log\ _Pos, um die Replikation mit der mysql.rds\ _set\ _external\ _master-Prozedur einzurichten. Wenn QUELLE-EUöffentlich zugänglich ist und NEU-RR-EN auf „privat“ gesetzt ist, verwenden Sie die private IP-Adresse (von QUELLE-EU) anstelle des rds-Endpunkts.
  4. Starten Sie von NEU-RR-EN aus die Replikation:
    mysql > CALL mysql.rds_start_replication;

Sicherstellen, dass die verschlüsselte Instance mit der Quell-Instance synchronisiert ist

Befolgen Sie die folgenden Schritte, um zu überprüfen, ob die neue verschlüsselte DB-Instance mit der Quell-DB-Instance synchronisiert ist:

  1. Vergewissern Sie sich von NEU-RR-EN aus, dass die Replikation erfolgreich und synchron zwischen QUELLE-EU und NEU-RR-EN war:

    mysql> SHOW SLAVE STATUS \G

    Wenn Ihre Verbindung zwischen der Quell-DB-Instance und der Read Replica erfolgreich ist, sieht Ihre Ausgabe ähnlich der folgenden aus:

    Slave_IO_State: Waiting for master to send eventSeconds Behind master: 0
  2. Nachdem Seconds_Behind_Master stabil auf dem Wert 0 ist, stoppen Sie den Datenverkehr und schließen Sie die Verbindungen auf QUELLE-EU.
    **Hinweis:**Stoppen Sie alle Anwendungsserver und Clients, die eine Verbindung zu QUELLE-EU herstellen, um sicherzustellen, dass keine neuen Änderungen an QUELLE-EU vorgenommen werden. Optional können Sie die von QUELLE-EU verwendete Sicherheitsgruppe vorübergehend sperren. Dadurch wird eingehender Datenverkehr von jeder Anwendung oder jedem Client verhindert, mit Ausnahme von NEU-RR-EN und dem Host, von dem aus der Benutzer diese Aktionen ausführt.

Wechseln Sie Ihre Verbindungen und leiten Sie Ihren Traffic an die neue DB-Instance weiter

Befolgen Sie folgende Schritte, um Ihre Verbindungen zu wechseln und Ihren Datenverkehr auf die neue DB-Instance umzuleiten:

  1. Stellen Sie als Datenbank-Leader-Benutzer eine Verbindung zu NEU-RR-EN her und beenden Sie dann die Replikation:

    MySQL > call mysql.rds_stop_replication;

    **Wichtig:**Nachdem Sie diesen Befehl ausgeführt haben, repliziert NEU-RR-EN keine Daten mehr aus QUELLE-EU.

  2. Machen Sie NEU-RR-EN zu einem eigenständigen Server, indem Sie die Replikationsbeziehung zwischen QUELLE-EU und NEU-RR-EN beenden:

    MySQL > call mysql.rds_reset_external_master;
  3. Verweisen Sie alle Anwendungen, Clients und Datenbankverbindungen auf NEU-RR-EN, indem Sie den DNS-Endpunkt NEU-RR-EN in allen Verbindungszeichenfolgen angeben. Oder benennen Sie QUELLE-EU um und ändern Sie dann NEU-RR-EN, sodass es denselben Namen verwendet, den QUELLE-EU verwendet.

  4. Vergewissern Sie sich, dass die Sicherheitsgruppenregeln auf NEU-RR-EN eingehenden Datenverkehr von den entsprechenden Anwendungen und Clients zulassen.

  5. Löschen Sie SOURCE-EU.
    Hinweis: Es hat sich bewährt, diesen Vorgang auf einer Test-Instance zu testen, bevor dieser Vorgang in einer Produktionsumgebung angewendet wird

Weitere Informationen

Arbeiten mit Read Replicas von DB-Instances

Wie verschlüssele ich Amazon RDS-Snapshots mit einem KMS-Schlüssel?

Problembehandlung bei der Replikation auf der MySQL-Website

Konfiguration der Positionsreplikation von binären Logdateien mit einer externen Quell-Instance

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr