Configurazione di repliche esterne

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

Per ulteriori informazioni 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 disporre di un'istanza Cloud SQL e di una un'istanza MySQL esterna che soddisfa i requisiti per i carichi di lavoro di repliche.

Configura l'istanza principale

  1. Vai alla pagina Istanze Cloud SQL nella console Google Cloud.
  2. Abilita l'accesso sull'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 pubblico in uscita del e l'istanza principale da utilizzare in un secondo momento. Puoi trovare questi valori nel campo Panoramica.
  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 connettiti all'istanza principale:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Inserisci la tua password root. Dovresti quindi vedere il prompt 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 nell'istanza principale e in quella 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 hai già un database sull'istanza principale, devi creare il lo stesso sulla replica. Per farlo, esporta il database dall'istanza principale in un bucket Cloud Storage e importarlo nella replica. Scopri di più su Esportazione dei dati da Cloud SQL in un file di dump SQL in Cloud Storage.

Configura la replica esterna

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

    Ad esempio, il comando seguente 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 di 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 causare il file di configurazione per poter essere letti.
  5. In un client mysql nella replica, inserisci il comando seguente:
    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 viene visualizzato il messaggio "In attesa dell'invio dell'evento da parte del master", la replica sta funzionando.

Retrocedi l'istanza principale di una replica esterna

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

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

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 vuoi che risieda la replica Cloud SQL.

  2. Avvia il processo di retrocessione.

    Poiché questa chiamata API richiede che tu fornisca informazioni sensibili, dovrebbe Utilizzare un file JSON per fornire i tuoi dati a cURL, anziché 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 per SSL/TLS, vedi Opzioni SSL/TLS. Per ulteriori informazioni sulle proprietà utilizzate replicaConfiguration oggetto, vedi Replica da un server esterno.

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

    Quando la replica viene visualizzata, il comando SHOW SLAVE STATUS mostrerà Seconds Behind Master come 0 e Il valore di Executed_Gtid_Set sarà identico tra come replica esterna e Cloud SQL principale.

  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 esterno, che ora è il server del database di origine.

    Esecuzione del comando SHOW SLAVE STATUS su Cloud SQL che fornisce lo stato della replica.

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

Risoluzione dei 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 ha backup automatici e log e il recupero point-in-time è abilitato, quindi dovrebbe avere un numero sufficiente di log affinché la replica possa recuperare. Tuttavia, in questo caso, sebbene log binari, la replica non sa da quale riga iniziare a leggere.

Crea un nuovo file di dump utilizzando le impostazioni di flag corrette, quindi configura il una replica esterna utilizzando il file

  1. Connettiti al client mysql tramite una di Compute Engine.
  2. Corsa mysqldump e utilizzare --master-data=1 e --flush-privileges flag.

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

    Impara altro ancora.

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

Passaggi successivi