Utilizzo di un'importazione gestita per configurare la replica da database esterni

Questa pagina descrive come configurare e utilizzare un'importazione gestita per i dati durante la replica da un server esterno a Cloud SQL.

Devi completare tutti i passaggi descritti in questa pagina. Al termine, puoi amministrare e monitorare l'istanza della rappresentazione di origine come faresti con qualsiasi altra istanza Cloud SQL.

Prima di iniziare

Prima di iniziare, completa questi passaggi:

  1. Configura il server esterno.

  2. Crea l'istanza della rappresentazione di origine.

  3. Configura la replica di Cloud SQL.

Verifica le impostazioni di replica

Al termine della configurazione, assicurati che la replica Cloud SQL possa replicarsi dal server esterno.

Le seguenti impostazioni di sincronizzazione esterna devono essere corrette.

  • Connettività tra la replica di Cloud SQL e il server esterno
  • Privilegi utente per la replica
  • Compatibilità delle versioni
  • La replica Cloud SQL non è già in fase di replica

Per verificare queste impostazioni, apri un terminale Cloud Shell e inserisci i seguenti comandi:

arricciatura

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

un esempio.

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Queste chiamate restituiscono un elenco di tipo sql#externalSyncSettingErrorList.

Se l'elenco è vuoto, non ci sono errori. Una risposta senza errori sarà simile alla seguente:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Proprietà Descrizione
SYNC_MODE Assicurati di poter mantenere sincronizzati la replica Cloud SQL e il server esterno dopo la configurazione della replica. Le modalità di sincronizzazione includono EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE e OFFLINE.
SYNC_PARALLEL_LEVEL

Verifica l'impostazione che controlla la velocità con cui vengono trasferiti i dati delle tabelle di un database. Sono disponibili i seguenti valori:

  • min: Utilizza la quantità minore di risorse di calcolo nel database. Si tratta della velocità più bassa per il trasferimento dei dati.
  • optimal: fornisce prestazioni bilanciate con un carico ottimale sul database.
  • max: offre la massima velocità di trasferimento dei dati, ma ciò potrebbe causare un aumento del carico sul database.

Nota: il valore predefinito di questo parametro è optimal perché questa impostazione offre una buona velocità per il trasferimento dei dati e ha un impatto ragionevole sul database. Ti consigliamo di utilizzare questo valore.

PROJECT_ID L'ID del tuo progetto Google Cloud.
REPLICA_INSTANCE_ID L'ID della tua replica Cloud SQL.

Avvia la replica sul server esterno

Dopo aver verificato di poter replicare dal server esterno, avvia la replica. La velocità di esecuzione della replica per il processo di importazione iniziale è fino a 500 GB all'ora. Tuttavia, questa velocità può variare in base al livello di macchina, alle dimensioni del disco dati, alla velocità effettiva di rete e alla natura del database.

arricciatura

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync

un esempio.

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Proprietà Descrizione
SYNC_MODE Verifica di poter mantenere sincronizzati la replica Cloud SQL e il server esterno dopo la configurazione della replica.
SKIP_VERIFICATION Indica se saltare il passaggio di verifica integrato prima di sincronizzare i dati. Questo parametro è consigliato solo se hai già verificato le impostazioni di replica.
SYNC_PARALLEL_LEVEL

Fornisci un'impostazione che controlla la velocità di trasferimento dei dati delle tabelle di un database. Sono disponibili i seguenti valori:

  • min: Utilizza la quantità minore di risorse di calcolo nel database. Si tratta della velocità più bassa per il trasferimento dei dati.
  • optimal: fornisce prestazioni bilanciate con un carico ottimale sul database.
  • max: offre la massima velocità di trasferimento dei dati, ma ciò potrebbe causare un aumento del carico sul database.

Nota: il valore predefinito di questo parametro è optimal perché questa impostazione offre una buona velocità per il trasferimento dei dati e ha un impatto ragionevole sul database. Ti consigliamo di utilizzare questo valore.

PROJECT_ID L'ID del tuo progetto Google Cloud.
REPLICA_INSTANCE_ID L'ID della tua replica Cloud SQL.

Monitoraggio della migrazione

Una volta avviata la replica dal server esterno, devi monitorarla. Per saperne di più, consulta Monitoraggio della replica. Puoi quindi completare la migrazione.

Risolvere i problemi

Prendi in considerazione le seguenti opzioni per la risoluzione dei problemi:

Problema Risoluzione dei problemi
La replica di lettura non ha avviato la replica al momento della creazione. È probabile che i file di log contengano un errore più specifico. Ispeziona i log in Cloud Logging per trovare l'errore effettivo.
Impossibile creare la replica di lettura: errore non validoFlagValue. Uno dei flag nella richiesta non è valido. Potrebbe essere un flag che hai fornito esplicitamente o un flag impostato su un valore predefinito.

Innanzitutto, verifica che il valore del flag max_connections sia maggiore o uguale al valore del flag principale.

Se il flag max_connections è impostato correttamente, controlla i log in Cloud Logging per trovare l'errore effettivo.

Impossibile creare la replica di lettura: errore sconosciuto. È probabile che i file di log contengano un errore più specifico. Ispeziona i log in Cloud Logging per trovare l'errore effettivo.

Se l'errore è: set Service Networking service account as servicenetworking.serviceAgent role on consumer project, disattiva e riattiva Service Networking API. Questa azione crea l'account di servizio necessario per continuare il processo.

Lo spazio sul disco è esaurito. La dimensione del disco dell'istanza principale può diventare piena durante la creazione della replica. Modifica l'istanza principale per eseguirne l'upgrade a una dimensione del disco più grande.
Lo spazio su disco aumenta in modo significativo. Uno slot che non viene utilizzato attivamente per monitorare i dati fa sì che PostgreSQL trattiene i segmenti WAL per un tempo indeterminato, causando un'aumento infinito dello spazio su disco. Se utilizzi le funzionalità di replica e decodifica logica in Cloud SQL, gli slot di replica vengono creati e eliminati automaticamente. Per rilevare gli slot di replica inutilizzati, puoi eseguire una query sulla visualizzazione di sistema di pg_replication_slots e applicare un filtro sulla colonna active. Gli slot inutilizzati possono essere eliminati per rimuovere i segmenti WAL utilizzando il comando pg_drop_replication_slot.
L'istanza di replica utilizza troppa memoria. La replica utilizza la memoria temporanea per memorizzare nella cache le operazioni di lettura più richieste, il che può portare a utilizzare più memoria rispetto all'istanza principale.

Riavvia l'istanza di replica per recuperare lo spazio di memoria temporaneo.

Replica interrotta. È stato raggiunto il limite massimo di spazio di archiviazione e l'aumento automatico dello spazio di archiviazione non è abilitato.

Modifica l'istanza per abilitare automatic storage increase.

Il ritardo della replica è costantemente elevato. Il carico di scrittura è troppo elevato per essere gestito dalla replica. Il ritardo della replica si verifica quando il thread SQL su una replica non è in grado di stare al passo con il thread di IO. Alcuni tipi di query o carichi di lavoro possono causare un ritardo di replica elevato, temporaneo o permanente, per un determinato schema. Alcune delle cause più comuni del ritardo di replica sono:
  • Query lente sulla replica. Trovale e correggile.
  • Tutte le tabelle devono avere una chiave univoca/primaria. Ogni aggiornamento in una tabella di questo tipo senza una chiave univoca/principale causa scansioni complete della tabella sulla replica.
  • Le query come DELETE ... WHERE field < 50000000 causano un ritardo di replica con la replica basata su righe, poiché un numero enorme di aggiornamenti è accumulato sulla replica.

Ecco alcune possibili soluzioni:

  • Modifica l'istanza per aumentare le dimensioni della replica.
  • Riduci il carico sul database.
  • Invia il traffico di lettura alla replica di lettura.
  • Indicizza le tabelle.
  • Identifica e correggi le query di scrittura lenta.
  • Ricrea la replica.
Errori durante la ricostruzione degli indici in PostgreSQL 9.6. Ricevi un errore da PostgreSQL che ti informa che devi ricreare un determinato indice. Questa operazione può essere eseguita solo sull'istanza principale. Se crei una nuova istanza di replica, a breve riceverai di nuovo lo stesso errore. Gli indici hash non vengono propagati alle repliche nelle versioni PostgreSQL precedenti alla 10.

Se devi utilizzare gli indici hash, esegui l'upgrade a PostgreSQL 10 e versioni successive. Altrimenti, se vuoi utilizzare anche le repliche, non utilizzare gli indici hash in PostgreSQL 9.6.

La query sull'istanza principale è sempre in esecuzione. Dopo aver creato una replica, la query SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' dovrebbe essere eseguita continuamente sull'istanza principale.
La creazione della replica non riesce a causa del timeout. Le transazioni non impegnate a lunga esecuzione nell'istanza principale possono causare la mancata creazione della replica di lettura.

Ricrea la replica dopo aver arrestato tutte le query in esecuzione.

Se l'istanza principale e la replica hanno dimensioni vCPU diverse, potrebbero verificarsi problemi di prestazioni delle query, poiché lo strumento di ottimizzazione delle query prende in considerazione le dimensioni delle vCPU.

Per risolvere il problema, completa la seguente procedura:

  1. Attiva il flag log_duration e imposta il parametro log_statement su ddl. Questo fornisce sia le query sia il tempo di esecuzione sul database. Tuttavia, a seconda del carico di lavoro, ciò potrebbe causare problemi di prestazioni.
  2. Sia sull'istanza principale sia sulla replica di lettura, esegui explain analyze per le query.
  3. Confronta il piano di query e verifica la presenza di eventuali differenze.

Se si tratta di una query specifica, modifica la query. Ad esempio, puoi cambiare l'ordine dei join per vedere se ottieni un rendimento migliore.

Esamina i log di replica

Quando verifichi le impostazioni di replica, vengono generati i log.

Per visualizzare questi log:

  1. Vai al visualizzatore log nella console Google Cloud.

    Vai al visualizzatore log

  2. Seleziona la replica Cloud SQL dal menu a discesa Istanza.
  3. Seleziona il file di log replication-setup.log.

Se la replica Cloud SQL non riesce a connettersi al server esterno, conferma quanto segue:

  • Qualsiasi firewall sul server esterno è configurato in modo da consentire le connessioni dall'indirizzo IP in uscita della replica Cloud SQL.
  • La configurazione SSL/TLS è corretta.
  • L'utente, l'host e la password di replica sono corretti.

Passaggi successivi