Come posso creare una replica trans-Regione di Amazon RDS MySQL in un altro account AWS?

Ultimo aggiornamento: 08-09-2021

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

Breve descrizione

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

  • Miglioramento del ripristino d’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 AWS Command Line Interface (CLI di AWS). I passaggi descritti in questo articolo consentono di impostare una replica esterna basata su binlog tra due istanze MySQL RDS in diversi account o regioni AWS.

Risoluzione

Per creare una replica trans-Regione di Amazon RDS MySQL in un altro account AWS, segui la seguente procedura.

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

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

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

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, è possibile 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 MySQL RDS appena creata della stessa versione nell'Account B. Con questo approccio, non è necessario copiare e condividere istantanee o chiavi AWS KMS tra i due account. Se si decide di utilizzare questo approccio, passare 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 Condivisione di un'istantanea crittografata.

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.    Configurare 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 MySQL di RDS appena creata nell'Account B (l'account di destinazione). I gruppi di sicurezza proteggono l'istanza MySQL di Amazon RDS.

Per il traffico di replica privata, è 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:

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 principale
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?