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 di rappresentazione dell'origine allo stesso modo di qualsiasi altra istanza Cloud SQL.

Prima di iniziare

Prima di iniziare, completa questi passaggi:

  1. Configura il server esterno.

  2. Crea l'istanza di rappresentazione dell'origine.

  3. Configura la replica Cloud SQL.

Verificare le impostazioni di replica

Una volta completata la configurazione, assicurati che la replica Cloud SQL possa replicare dal server esterno.

Le seguenti impostazioni di sincronizzazione esterna devono essere corrette.

  • Connettività tra la replica Cloud SQL e il server esterno
  • Privilegi utente di 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:

curl

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",
         "selectedObjects": "SELECTED_OBJECTS"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

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",
         "selectedObjects":[{"database":"db1"}, {"database":"db2"}]
       }' \
     -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 sono presenti errori. Una risposta senza errori è simile alla seguente:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Proprietà Descrizione
SYNC_MODE Assicurati di poter mantenere sincronizzate 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à di trasferimento dei dati dalle tabelle di un database. Sono disponibili i seguenti valori:

  • min: Utilizza la quantità minima di risorse di calcolo sul database. Questa è la velocità più bassa per il trasferimento dei dati.
  • optimal: Offre prestazioni bilanciate con un carico ottimale sul database.
  • max: Offre la massima velocità per il trasferimento dei dati, ma potrebbe causare un aumento del carico sul database.

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

SELECTED_OBJECTS Un elenco separato da virgole dei database di cui stai eseguendo la migrazione dall'istanza di rappresentazione di origine all'istanza Cloud SQL di destinazione. Se non utilizzi questo parametro o fornisci un elenco vuoto come valore per il parametro, tutte le banche dati vengono migrate dall'origine alla destinazione.
PROJECT_ID L'ID del tuo progetto Google Cloud .
REPLICA_INSTANCE_ID L'ID della replica Cloud SQL.

Aggiorna un'istanza di rappresentazione dell'origine

Per aggiornare i database di cui vuoi eseguire la migrazione dall'istanza di rappresentazione di origine all'istanza Cloud SQL di destinazione, aggiorna l'elenco dei nomi dei database associati al parametro selectedObjects. Se non utilizzi questo parametro o fornisci un elenco vuoto come valore del parametro, tutti i database vengono migrati dall'origine alla destinazione.

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "selectedObjects": "SELECTED_OBJECTS",
        "username": "USERNAME",
        "password": "PASSWORD"
      }
    }

esempio

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "selectedObjects":[{"database":"db1"}, {"database":"db3"}],
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
Proprietà Descrizione
SOURCE_NAME Il nome dell'istanza della rappresentazione dell'origine.
REGION La regione in cui risiede l'istanza di rappresentazione di origine.
DATABASE_VERSION La versione del database in esecuzione sul tuo server esterno. Le opzioni sono POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 o POSTGRES_17.
SELECTED_OBJECTS Un elenco aggiornato separato da virgole dei database di cui esegui la migrazione dall'istanza di rappresentazione di origine all'istanza Cloud SQL di destinazione.
USERNAME L'account utente di replica sul server esterno.
PASSWORD La password dell'account.

Poi, per modificare l'istanza di rappresentazione dell'origine in Cloud SQL, apri un terminale Cloud Shell e inserisci i seguenti comandi:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @JSON_PATH \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_NAME

esempio

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Proprietà Descrizione
JSON_PATH Il percorso del file JSON che contiene i dati della richiesta per il server esterno.
PROJECT_ID L'ID del tuo progetto Google Cloud .
SOURCE_NAME Il nome dell'istanza della rappresentazione dell'origine.

Avvia la replica sul server esterno

Dopo aver verificato di poter eseguire la replica dal server esterno, avviala. 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 della macchina, alle dimensioni del disco di dati, al throughput di rete e alla natura del database.

curl

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

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 sincronizzate la replica Cloud SQL e il server esterno dopo la configurazione della replica.
SKIP_VERIFICATION 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 controlli la velocità di trasferimento dei dati dalle tabelle di un database. Sono disponibili i seguenti valori:

  • min: Utilizza la quantità minima di risorse di calcolo sul database. Questa è la velocità più bassa per il trasferimento dei dati.
  • optimal: Offre prestazioni bilanciate con un carico ottimale sul database.
  • max: Offre la massima velocità per il trasferimento dei dati, ma potrebbe causare un aumento del carico sul database.

Nota:il valore predefinito di questo parametro è optimal perché questa impostazione offre una buona velocità di 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 replica Cloud SQL.

Monitoraggio della migrazione

Una volta avviata la replica dal server esterno, devi monitorarla. Per saperne di più, consulta Monitoraggio della replica. A questo punto puoi completare la migrazione.

Risoluzione dei problemi

Valuta le seguenti opzioni per la risoluzione dei problemi:

Problema Risoluzione dei problemi
La replica di lettura non ha iniziato la replica al momento della creazione. Probabilmente nei file di log è presente un errore più specifico. Ispeziona i log in Cloud Logging per trovare l'errore effettivo.
Impossibile creare la replica di lettura - errore invalidFlagValue. Uno dei flag nella richiesta non è valido. Potrebbe trattarsi di un flag che hai fornito esplicitamente o di uno impostato su un valore predefinito.

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

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

Impossibile creare la replica di lettura. Errore sconosciuto. Probabilmente nei file di log è presente 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 il account di servizio necessario per continuare la procedura.

Lo spazio sul disco è esaurito. La dimensione del disco dell'istanza principale può esaurirsi durante la creazione della replica. Modifica l'istanza principale per eseguire l'upgrade a una dimensione del disco maggiore.
Lo spazio su disco aumenta in modo significativo. Uno slot non utilizzato attivamente per il monitoraggio dei dati fa sì che PostgreSQL mantenga i segmenti WAL indefinitamente, causando una crescita indefinita dello spazio su disco. Se utilizzi le funzionalità di replica e decodifica logiche in Cloud SQL, gli slot di replica vengono creati ed eliminati automaticamente. Gli slot di replica inutilizzati possono essere rilevati eseguendo query sulla visualizzazione di sistema pg_replication_slots e filtrando in base alla 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 richieste di frequente, il che può portare a un utilizzo di memoria superiore rispetto all'istanza principale.

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

La replica è stata 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 di replica è costantemente elevato. Il carico di scrittura è troppo elevato per la replica. Il ritardo di replica si verifica quando il thread SQL su una replica non riesce a tenere il passo con il thread I/O. 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 tipiche del ritardo della replica sono:
  • Query lente sulla replica. Trova e correggi gli errori.
  • Tutte le tabelle devono avere una chiave univoca/primaria. Ogni aggiornamento di una tabella senza una chiave univoca/primaria causa scansioni complete della tabella sulla replica.
  • Query come DELETE ... WHERE field < 50000000 causano un ritardo della replica con la replica basata su righe, poiché un numero elevato di aggiornamenti si accumula nella replica.

Alcune possibili soluzioni includono:

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

Se devi utilizzare gli indici hash, esegui l'upgrade a PostgreSQL 10 o 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, è previsto che la query SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' venga eseguita continuamente sull'istanza principale.
La creazione della replica non riesce a causa del timeout. Le transazioni non sottoposte a commit a esecuzione prolungata sull'istanza principale possono causare la mancata creazione della replica di lettura.

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

Se l'istanza primaria e la replica hanno dimensioni vCPU diverse, potrebbero verificarsi problemi di prestazioni delle query perché l'ottimizzatore di query tiene conto delle dimensioni vCPU.

Per risolvere il problema, completa i seguenti passaggi:

  1. Attiva il flag log_duration e imposta il parametro log_statement su ddl. In questo modo, vengono forniti 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 che sulla replica di lettura, esegui explain analyze per le query.
  3. Confronta il piano di query e verifica la presenza di differenze.

Se si tratta di una query specifica, modificala. Ad esempio, puoi modificare l'ordine dei join per verificare se ottieni un rendimento migliore.

Esaminare i log di replica

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

Per visualizzare questi log, procedi nel seguente modo:

  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, verifica quanto segue:

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

Passaggi successivi