Come posso creare una replica tra regioni di Amazon RDS per MySQL in un altro account AWS?

Ultimo aggiornamento: 24/05/2022

Desidero creare una replica del Servizio di database relazionale Amazon (Amazon RDS) per MySQL in una regione e un account AWS diversi dall'istanza database di origine. In che modo posso farlo?

Breve descrizione

È possibile creare una replica Amazon RDS per MySQL in una regione e un account AWS diversi dall'istanza database di origine per i seguenti casi d'uso:

  • Miglioramento del ripristino di emergenza
  • Scalabilità orizzontale a livello globale
  • Migrazione tra regioni AWS e account

Nota: non esiste un modo diretto per creare una replica tra regioni in un altro account AWS utilizzando la console Amazon RDS o l'Interfaccia della linea di comando AWS (AWS CLI). I passaggi descritti in questo articolo consentono di impostare una replica esterna basata su binlog tra due istanze RDS per MySQL in account o regioni AWS diversi.

Risoluzione

Per creare una replica tra regioni di Amazon RDS per MySQL in un altro account AWS, attieniti alla seguente procedura.

Nota: l'Account A contiene l'istanza principale di RDS per MySQL nella regione di origine. L'Account B contiene la replica RDS per MySQL nella regione di destinazione.

1.    Nell'Account A (l'istanza principale di Amazon RDS per MySQL), assicurati che la registrazione binaria sia abilitata. Per impostazione predefinita, i backup automatici e la registrazione binaria sono abilitati in RDS per MySQL. La registrazione binaria viene attivata ogni volta che si attivano i backup automatici.

Nota: se modifichi il periodo di conservazione del backup da "0" a un valore diverso da zero, o viceversa, si verifica un'interruzione.

2.    Aggiorna il periodo di conservazione di binlog usando il seguente comando:

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

Suggerimento: scegliere un periodo di tempo che conservi i file di registro binari nell'origine di replica abbastanza a lungo da consentire l'applicazione delle modifiche prima dell'eliminazione. Amazon RDS conserva i file binlog su un'istanza MySQL per un massimo di 168 ore (7 giorni). Per ulteriori informazioni, vedere mysql.rds_set_configuration.

Ad esempio, la seguente sintassi imposta il periodo di conservazione binlog su 24 ore:

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

3.    Creare un utente di replica sull'istanza principale nell'Account A, quindi concedere i privilegi richiesti:

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

4.    Concedere i privilegi (obbligatori) REPLICATION CLIENT e REPLICATION SLAVE all'utente creato nel passaggio 3:

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

5.    Creare una replica di lettura tra regioni nel conto principale (Account A) con la regione di destinazione selezionata.

6.    Accedere all'istanza di replica creata nell'account A. Quindi, verificare che la replica sia stata rilevata con l'istanza database primaria:

mysql> SHOW SLAVE STAUS\G

Nota: verificare che il valore di Seconds_Behind_Master sia “0". Quando il valore è “0”, la replica viene rilevata fino all'istanza database primaria. Per ulteriori informazioni, vedere Monitoraggio della replica di lettura.

7.    Dopo che la replica di lettura è stata rilevata nell'istanza database primaria, interrompere la replica sull'istanza di replica creata nel passaggio 5. Per interrompere la replica, utilizzare la seguente sintassi:

mysql> call mysql.rds_stop_replication();

8.    Eseguire il comandoSHOW SLAVE STATUS sulla replica, quindi registrare i valori di output per Relay_Master_Log_File ed Exec_Master_Log_Pos. I valori Relay_Master_Log_File ed Exec_Master_Log_Pos sono le coordinate del registro binario, che vengono utilizzate per impostare la replica esterna nei passaggi successivi.

9.    Crea uno snapshot DB dell'istanza di replica nell'Account A.

(Facoltativo) In alternativa, puoi utilizzare uno strumento nativo che genera backup logici (ad esempio mysqldump) per esportare i dati dall'istanza di replica nell'Account A. Lo strumento nativo può quindi essere utilizzato per importare i dati in un'istanza RDS per MySQL creata ad hoc della stessa versione nell'Account B. Con questo approccio, non è necessario copiare e condividere snapshot o chiavi AWS KMS tra i due account. Se decidi di utilizzare questo approccio, vai al passaggio 12 per impostare l'accesso alla rete e la replica tra le due istanze. Prima di adottare questo approccio, è necessario importare i dati nell'istanza Amazon RDS for MySQL nell'Account B.

10.    Condividi l'istantanea del DB con l'Account B.

Nota: se lo snapshot DB è crittografato, la chiave AWS KMS utilizzata per crittografare lo snapshot deve essere condivisa con l'account di destinazione. Per ulteriori informazioni, consulta la sezione Condivisione di snapshot crittografati.

11.    Ripristina lo snapshot DB nell'account B.

Nota: un'istanza DB non può essere ripristinata da uno snapshot crittografato condiviso. Effettuare invece una copia dello snapshot DB e ripristinare l'istanza DB dalla versione copiata.

12.    Impostare l'accesso alla rete tra l'Account A (l'account di origine) e l'Account B (account di destinazione). L'accesso alla rete consente il flusso del traffico tra gli account di origine e di destinazione.

13.    Configura le regole del gruppo di sicurezza in entrata per l'istanza database principale dell'Account A. Questa configurazione consente al traffico di fluire su Internet pubblico dall'istanza RDS per MySQL creata ad hoc nell'Account B (l'account di destinazione). I gruppi di sicurezza proteggono l'istanza Amazon RDS per MySQL.

Per il traffico di replica privato, è necessario creare e accettare una connessione peering VPC tra i due account AWS.

14.    Imposta la replica esterna sull'istanza di destinazione nell'Account B. Utilizza repl_user all'interno del comando come parametro. Nota: Il comando CALL mysql.rds_set_external_master deve essere eseguito da un utente DB con privilegi di esecuzione del comando.

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
  );

Ad esempio:

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: endpoint dell'istanza primaria 3306: porta dell'istanza primaria repl_user: nome utente di replica creato nel passaggio 3 password: password utente creata nel passaggio 3 mysql-bin-changelog.000031: nome del file di registro binario dall'output del passaggio 8 107: posizione del registro binario dall'output del passaggio 8

15.    Avvia la replica sull'istanza ripristinata nell'Account B:

CALL mysql.rds_start_replication;

Ecco un esempio:

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

16.    Eseguire il seguente comando sull'istanza dell'Account B per verificare lo stato della replica:

mysql> show replica status \G

Nota: per MySQL versione 8.0.22 e successive, SHOW SLAVE STATUS è deprecato e SHOW REPLICA STATUS è disponibile per l'uso. Per ulteriori informazioni, consulta Verifica dello stato della replica sul sito Web MySQL.

17.    Eliminare la replica (che fungeva da istanza intermedia) creata nel passaggio 5. Questa replica è stata utilizzata per estrarre le coordinate del registro binario senza dover sospendere le scritture sull'istanza primaria nell'account A.

Considerazioni sulla replica tra regioni

Considerare i seguenti approcci per la replica tra regioni:

  • Un'istanza database di origine può avere repliche di lettura tra regioni diverse in più regioni AWS. Per ulteriori informazioni, consulta Creazione di una replica di lettura in un'altra regione AWS.
  • È possibile prevedere un tempo di ritardo più elevato per qualsiasi replica di lettura che si trova in una regione AWS diversa dall'istanza di origine. Questo ritardo deriva dai canali di rete più lunghi tra i data center regionali. Per informazioni sul tempo di ritardo della replica, vedere Monitoraggio della replica di lettura.
  • I dati trasferiti per la replica in più regioni comportano costi per il trasferimento dei dati di Amazon RDS. Per ulteriori informazioni su questi addebiti per il trasferimento dei dati, vedere Costi di replica tra aree geografiche.

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?