Wie kann ich eine unverschlüsselte Amazon RDS DB-Instance für MySQL oder MariaDB mit minimalen Ausfallzeiten verschlüsseln?
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. Wie kann ich das lösen?
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 kein verschlüsseltes Lesereplikat 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:
"You cannot create an encrypted Read Replica from an unencrypted DB instance. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterCombination; Request ID:)"
Gehen Sie wie folgt vor, um eine unverschlüsselte DB-Instance mit minimalen Ausfallzeiten 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 Ihren Traffic an die neue DB-Instance weiter.
Behebung
Einrichtung der Replikation mit minimalen Ausfallzeiten
1.Erstellen Sie ein temporäres 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 das 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. Dies deutet darauf hin, dass TEMP-RR mit QUELLE-EU synchronisiert ist:
mysql> SHOW SLAVE STATUS \G Seconds_Behind_Master: 0
3.Stoppen Sie den Replikation-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.
8.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.
9.Ä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.
10.Melden Sie sich bei QUELLE-EU an, 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.
11.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 );
Der rds-Endpunkt ist der DB-Instance-Endpunkt für QUELLE-EU.
Der Benutzername (repl_user) und das Passwort (password123) sind der Benutzername und das Passwort, die Sie in Schritt 10 erstellt haben. Verwenden Sie die erfassten Werte von Relay_Master_Log_File und Exec_Master_Log\ _Pos aus Schritt 4, um die Replikation mit der Prozedur mysql.rds_set_external_master einzurichten.
Hinweis: Wenn QUELLE-EUöffentlich zugänglich ist und NEU-RR-EN (neue verschlüsselte DB-Instance) auf „privat“ gesetzt ist, verwenden Sie die private IP-Adresse (von QUELLE-EU) anstelle von rds-endpoint.
12.Starten Sie von NEU-RR-EN aus die Replikation:
mysql > CALL mysql.rds_start_replication;
13.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 wie folgt aus:
Slave_IO_State: Waiting for master to send event Seconds Behind master: 0
14.Nachdem Seconds_Behind_Master stabil auf dem Wert 0 ist, stoppen Sie den Datenverkehr und schließen Sie die Verbindungen auf QUELLE-EU. Dann beginnt die Ausfallzeit.
**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.
15.Stellen Sie als Datenbank-Master-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.
16.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;
17.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.
18.Vergewissern Sie sich, dass die Sicherheitsgruppenregeln auf NEU-RR-EN eingehenden Datenverkehr von den entsprechenden Anwendungen und Clients zulassen.
19.Nachdem Sie die Anwendungen und Clients auf NEU-RR-EN verwiesen und die Umgebung getestet haben, löschen Sie QUELLE-EU.
**Tipp:**Es hat sich bewährt, diesen Vorgang auf einer Test-Instance zu testen, bevor dieser Vorgang in einer Produktionsumgebung angewendet wird.
Weitere Informationen
Wie verschlüssele ich Amazon RDS-Snapshots?
Problembehandlung bei der Replikation in der MySQL-Dokumentation
Konfiguration der Positionsreplikation von binären Logdateien mit einer externen Master-Instance
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 2 Jahren