Configurazione di repliche esterne

Questa pagina descrive come configurare un'istanza Cloud SQL che si replica in una o più repliche esterne a Cloud SQL e come far retrocedere l'istanza principale in una configurazione di replica esterna per invertire la configurazione.

Per saperne di più sulla configurazione della replica esterna, consulta Informazioni sulla replica esterna.

Imposta la configurazione della replica esterna

Prima di iniziare

Prima di iniziare questa attività, devi avere un'istanza Cloud SQL e un'istanza MySQL esterna che soddisfi i requisiti per le repliche esterne.

Configura l'istanza principale

  1. Vai alla pagina Istanze Cloud SQL nella console Google Cloud.
  2. Abilita l'accesso all'istanza principale per l'indirizzo IP della replica esterna.

    Per informazioni sull'abilitazione dell'accesso IP, consulta Configurazione dell'accesso per connessioni IP.

  3. Registra l'indirizzo IP pubblico e l'indirizzo IP in uscita pubblico dell'istanza principale per utilizzarli in un secondo momento. Puoi trovare questi valori nella pagina Panoramica dell'istanza.
  4. Fai clic sull'icona di Cloud Shell nell'angolo in alto a destra.
  5. Al prompt di Cloud Shell, utilizza il client MySQL integrato per connetterti alla tua istanza principale:
    
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
    
       
  6. Inserisci la password root. Dovresti poi vedere il prompt di mysql.
  7. Crea un utente speciale per la replica e concedi i privilegi di replica:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Se inizi con un nuovo database, crea lo stesso database e le stesse tabelle sulle istanze primarie e di replica. Ad esempio:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    
  9. Se disponi già di un database sull'istanza principale, devi crearne uno stesso nella replica. Per farlo, esporta il database dall'istanza principale a un bucket Cloud Storage e importalo nella replica. Scopri di più sull' esportazione dei dati da Cloud SQL a un file di dump SQL in Cloud Storage.

Configura la replica esterna

Avviso: questa procedura sovrascrive tutti i dati ospitati in un database MySQL nella replica, inclusi utenti e password, con le impostazioni e i dati dell'istanza principale.
  1. Sulla macchina che ospita la replica, esegui il seeding della nuova istanza MySQL esterna con il file di esportazione che hai creato dall'istanza principale.

    Ad esempio, il seguente comando carica un file esportato denominato mydump.sql:

    mysql --user=root --password < mydump.sql
    
  2. Determina l'ID server per questa coppia replica-principale.

    L'ID server è un valore numerico (ad esempio, "3") che deve essere univoco nella configurazione della replica esterna (ogni replica deve avere un ID server univoco).

  3. Aggiungi le seguenti opzioni al file delle opzioni my.cnf della replica:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Per ulteriori informazioni sulle opzioni di replica MySQL, consulta Opzioni di replica e logging binario.

  4. Riavvia il processo mysqld per consentire la lettura del file di configurazione.
  5. In un client mysql nella replica, inserisci il seguente comando:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Avvia la replica sulla replica:
    START SLAVE;
    
  7. Conferma lo stato della replica:

    SHOW SLAVE STATUS\G;
    

    Se vedi il messaggio "In attesa che il master invii l'evento", significa che la replica funziona.

Retrocedi l'istanza principale di una replica esterna

Se hai un'istanza Cloud SQL con una replica esterna, puoi invertire la configurazione e determinare l'applicazione delle seguenti modifiche:

  • La replica esterna diventa la nuova istanza principale.
  • L'istanza Cloud SQL diventa una replica di lettura, replicata dal server che in precedenza era la replica esterna (ora chiamato server del database di origine).

Per invertire la configurazione della replica esterna:

  1. Crea un'istanza di rappresentazione di origine.

    Questa istanza rappresenterà il server del database di origine nella replica Cloud SQL al termine dell'operazione di retrocessione.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "SOURCE_REPRESENTATION_NAME",
             "region": "REGION",
             "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Utilizza la regione in cui deve risiedere la replica Cloud SQL.

  2. Avvia la procedura di retrocessione.

    Poiché questa chiamata API richiede di fornire informazioni sensibili, devi utilizzare un file JSON per fornire i tuoi dati a cURL, anziché fornirli nella riga di comando.

    Crea il file di dati:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    quindi chiama l'API.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    Per ulteriori informazioni sulle opzioni disponibili per SSL/TLS, consulta la pagina relativa alle opzioni SSL/TLS. Per maggiori informazioni sulle proprietà utilizzate dall'oggetto replicaConfiguration, consulta Replica da un server esterno.

  3. Attendi che la replica esterna completi tutte le transazioni in attesa dall'istanza principale.

    Una volta raggiunto il controllo della replica, il comando SHOW SLAVE STATUS mostrerà Seconds Behind Master come 0 e il valore Executed_Gtid_Set sarà identico tra la replica esterna e quella principale Cloud SQL.

  4. Utilizza il client mysql per arrestare la replica sulla replica esterna:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Attendi che l'istanza Cloud SQL inizi la replica dal server esterno, che ora è il server di database di origine.

    L'esecuzione del comando SHOW SLAVE STATUS sull'istanza Cloud SQL determina lo stato di replica.

  6. Quando l'istanza Cloud SQL viene replicata correttamente dal server del database di origine, imposta il flag read_only sul server di database di origine su off e aggiorna le applicazioni in modo che puntino al server di database di origine.

Risolvere i problemi

Problema Risoluzione dei problemi
Messaggio di errore: The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires. L'istanza Cloud SQL principale dispone di backup automatici e di log binari e il recupero point-in-time è abilitato, quindi dovrebbe avere log sufficienti affinché la replica sia in grado di aggiornarsi. Tuttavia, in questo caso, sebbene esistano i log binari, la replica non sa da quale riga iniziare a leggere.

Crea un nuovo file di dump utilizzando le impostazioni del flag corrette e configura la replica esterna utilizzando questo file

  1. Connettiti al tuo client MySQL tramite un'istanza Compute Engine.
  2. Esegui mysqldump e utilizza i flag --master-data=1 e --flush-privileges.

    Importante: non includere il flag --set-gtid-purged=OFF.

    Scopri di più.

  3. Assicurati che il file di dump appena creato contenga la riga SET @@GLOBAL.GTID_PURGED='...'.
  4. Carica il file di dump in un bucket Cloud Storage e configura la replica utilizzando il file di dump.

Passaggi successivi