Questa pagina descrive come creare una replica di lettura per un'istanza Cloud SQL.
Una replica di lettura è una copia dell'istanza principale che riflette le modifiche apportate all'istanza principale quasi in tempo reale, in circostanze normali. Puoi utilizzare una replica di lettura per trasferire le richieste di lettura o il traffico di analisi dall'istanza principale.
Inoltre, per il ripristino di emergenza, puoi eseguire una migrazione regionale. Se una replica è una replica tra regioni, puoi eseguire un failover in un'altra regione; in particolare, puoi promuovere una replica a un'istanza autonoma (in questo caso, le repliche esistenti non considererebbero l'istanza come principale).
Per saperne di più su come funziona la replica, consulta Replica in Cloud SQL.
Prima di iniziare
Se stai creando la prima replica per questa istanza, assicurati che l'istanza soddisfi i requisiti per le istanze principali. Scopri di più.
Crea una replica di lettura
Di seguito sono riportati i passaggi per creare una replica di lettura.
No, non è un errore. È una
Console
-
Nella console Cloud de Confiance , vai alla pagina Istanze Cloud SQL.
- Trova l'istanza per cui vuoi creare una replica, quindi apri il menu
more actionsaccanto alla voce. - Seleziona Crea replica di lettura.
Se non vedi questa opzione, l'istanza è una replica. Non puoi creare una replica di una replica.
Nella sezione Personalizza l'istanza della pagina, aggiorna le impostazioni per la replica. Per iniziare, fai clic su Mostra opzioni di configurazione per visualizzare i gruppi di impostazioni. Quindi, espandi i gruppi che ti interessano per rivedere e personalizzare le impostazioni. A destra viene visualizzato un Riepilogo di tutte le opzioni selezionate. La personalizzazione di queste impostazioni è facoltativa. I valori predefiniti vengono assegnati in tutti i casi in cui non vengono apportate personalizzazioni.
Per ulteriori dettagli su ciascuna impostazione, consulta la pagina Informazioni sulle impostazioni delle istanze.
Ad esempio, per consentire ad altri servizi Cloud de Confiance by S3NS , come BigQuery, di accedere ai dati in Cloud SQL ed eseguire query su questi dati tramite una connessione interna, espandi il gruppo Connessioni e deseleziona la casella di controllo IP pubblico.
- Fai clic su Crea replica.
Cloud SQL crea un backup, se necessario, e crea la replica. Verrà visualizzata nuovamente la pagina dell'istanza principale.
gcloud
Crea la replica:
gcloud sql instances create REPLICA_NAME \ --master-instance-name=MASTER_INSTANCE_NAME
Se necessario, puoi specificare una dimensione del livello diversa utilizzando il parametro --tier. Inoltre, se stai creando una replica da un'istanza principale e la versione Cloud SQL per l'istanza è Enterprise o Enterprise Plus, versione 16 e successive, non devi specificare un valore per questo parametro. La replica eredita il tipo di macchina dall'istanza principale.
Puoi specificare una regione diversa utilizzando il parametro --region.
Se l'istanza principale ha solo un indirizzo IP interno e vuoi consentire ad altri servizi Cloud de Confiance by S3NS , come BigQuery, di accedere ai dati in Cloud SQL ed eseguire query su questi dati tramite una connessione interna, aggiungi il parametro --enable-google-private-path al comando.
Devi creare la replica nella stessa rete VPC dell'istanza principale. Puoi anche specificare un allocated-ip-range-name in quella rete VPC. Se non viene specificato alcun intervallo, la replica viene creata in un intervallo casuale.
Terraform
Per creare una replica di lettura, utilizza una risorsa Terraform.
REST v1
Utilizza il metodo insert della risorsa instances per creare la replica di lettura. Le proprietà region e databaseVersion devono essere le stesse del master.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- project-id: l'ID progetto
- database-version: stringa della versione dell'enum (ad esempio POSTGRES_12)
- primary-instance-name: il nome dell'istanza principale
- primary-instance-region: la regione dell'istanza principale
- replica-region: la regione dell'istanza di replica
- replica-name: il nome dell'istanza di replica
- machine-type: stringa enum del tipo di macchina. Ad esempio: "db-custom-1-3840"
- private-network: la rete autorizzata che stai aggiungendo o selezionando per creare una connessione privata.
Puoi utilizzare il campo sqlNetworkArchitecture per applicare l'utilizzo della nuova architettura di rete per l'istanza al momento della creazione, anche se non è stato eseguito l'upgrade completo del progetto.
Per ulteriori dettagli sulla nuova architettura di rete e sulle sue implicazioni, consulta
Esegui l'upgrade di un'istanza alla nuova architettura di rete e Alloca un intervallo di indirizzi IP.
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances
Corpo JSON della richiesta:
{
"masterInstanceName": "primary-instance-name",
"project": "project-id",
"databaseVersion": "database-version",
"name": "replica-name",
"region": "replica-region",
"settings":
{
"tier": "machine-type",
"settingsVersion": 0,
"ipConfiguration": {
object (IpConfiguration)
},
{
"ipv4Enabled": false,
"privateNetwork": private-network,
"requireSsl": boolean,
"authorizedNetworks": [
{
object (AclEntry)
}
],
"allocatedIpRange": string
}
},
"sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1beta4
Utilizza il metodo insert della risorsa instances per creare la replica di lettura. Le proprietà region e databaseVersion devono essere le stesse del master.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- project-id: l'ID progetto
- database-version: stringa della versione dell'enum (ad esempio POSTGRES_12)
- primary-instance-name: il nome dell'istanza principale
- primary-instance-region: la regione dell'istanza principale
- replica-region: la regione dell'istanza di replica
- replica-name: il nome dell'istanza di replica
- machine-type: stringa enum del tipo di macchina. Ad esempio: "db-custom-1-3840"
- private-network: la rete autorizzata che stai aggiungendo o selezionando per creare una connessione privata.
Puoi utilizzare il campo sqlNetworkArchitecture per applicare l'utilizzo della nuova architettura di rete per l'istanza al momento della creazione, anche se non è stato eseguito l'upgrade completo del progetto.
Per ulteriori dettagli sulla nuova architettura di rete e sulle sue implicazioni, consulta
Esegui l'upgrade di un'istanza alla nuova architettura di rete e Alloca un intervallo di indirizzi IP.
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances
Corpo JSON della richiesta:
{
"masterInstanceName": "primary-instance-name",
"project": "project-id",
"databaseVersion": "database-version",
"name": "replica-name",
"region": "replica-region",
"settings":
{
"tier": "machine-type",
"settingsVersion": 0,
"ipConfiguration": {
object (IpConfiguration)
},
{
"ipv4Enabled": false,
"privateNetwork": private-network,
"requireSsl": boolean,
"authorizedNetworks": [
{
object (AclEntry)
}
],
"allocatedIpRange": string
}
},
"sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Crea una replica di lettura di un'istanza con Private Service Connect abilitato
Per creare una replica di lettura di un'istanza con Private Service Connect abilitato, utilizza l'interfaccia a riga di comando gcloud o l'API. Puoi creare questa replica nella stessa regione o in una regione diversa dall'istanza principale (replica di lettura tra regioni).
La replica di lettura non può essere replicata da un'istanza con un tipo di connettività diverso. Ad esempio, un'istanza con Private Service Connect abilitato può eseguire la replica solo da un'altra istanza Private Service Connect. Inoltre, non può eseguire la replica da un'istanza che supporta connessioni IP esterne o da un'istanza configurata con l'accesso privato ai servizi.
gcloud
Per creare una replica di lettura di un'istanza, utilizza il comando gcloud sql instances create:
gcloud sql instances create REPLICA_INSTANCE_NAME \ --master-instance-name=PRIMARY_INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip
Effettua le seguenti sostituzioni:
- REPLICA_INSTANCE_NAME: il nome dell'istanza di replica.
- PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
- PROJECT_ID: l'ID o il numero di progetto del progetto Cloud de Confiance che contiene l'istanza.
- REGION_NAME: il nome della regione per l'istanza di replica.
ALLOWED_PROJECTS: un elenco di ID progetto o numeri, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.
Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il Cloud SQL Auth Proxy o i connettori dei linguaggi di Cloud SQL, crea una zona DNS e un record DNS per le repliche.
- AVAILABILITY_TYPE: abilita l'alta affidabilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL: abilita l'alta affidabilità ed è consigliato per le istanze di produzione. L'istanza esegue il failover in un'altra zona all'interno della regione selezionata.ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.
Per saperne di più sull'impostazione e sulla rimozione dell'alta affidabilità per le istanze, consulta Configura un'istanza esistente per l'alta affidabilità e Disattiva l'alta affidabilità per un'istanza.
REST v1
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
- PROJECT_ID: l'ID o il numero di progetto del progetto Cloud de Confiance che contiene l'istanza.
- REPLICA_INSTANCE_NAME: il nome dell'istanza di replica.
- REGION_NAME: il nome della regione per l'istanza di replica.
- MACHINE_TYPE: il tipo di macchina per l'istanza
- AVAILABILITY_TYPE: abilita l'alta affidabilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL: abilita l'alta affidabilità ed è consigliato per le istanze di produzione. L'istanza esegue il failover in un'altra zona all'interno della regione selezionata.ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.
Per saperne di più sull'impostazione e sulla rimozione dell'alta affidabilità per le istanze, consulta Configura un'istanza esistente per l'alta affidabilità e Disattiva l'alta affidabilità per un'istanza.
ALLOWED_PROJECTS: un elenco di ID progetto o numeri, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.
Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, devi creare una zona DNS e un record DNS per le repliche.
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
Corpo JSON della richiesta:
{
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT_ID",
"databaseVersion": "POSTGRES_13",
"name": "REPLICA_INSTANCE_NAME",
"region": "REGION_NAME",
"kind": "sql#instance",
"settings":
{
"tier": "MACHINE_TYPE",
"availabilityType": "AVAILABILITY_TYPE",
"settingsVersion": 0,
"ipConfiguration": {
"ipv4Enabled": false,
"pscConfig": {
"allowedConsumerProjects": [ALLOWED_PROJECTS],
"pscEnabled": true
}
},
"kind": "sql#settings",
"pricingPlan": "PER_USE",
"replicationType": "ASYNCHRONOUS",
"tier": "MACHINE_TYPE"
}
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "CREATE_REPLICA",
"name": "OPERATION_ID",
"targetId": "REPLICA_INSTANCE_NAME",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
- PROJECT_ID: l'ID o il numero di progetto del progetto Cloud de Confiance che contiene l'istanza.
- REPLICA_INSTANCE_NAME: il nome dell'istanza di replica.
- REGION_NAME: il nome della regione per l'istanza di replica.
- MACHINE_TYPE: il tipo di macchina per l'istanza
- AVAILABILITY_TYPE: abilita l'alta affidabilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL: abilita l'alta affidabilità ed è consigliato per le istanze di produzione. L'istanza esegue il failover in un'altra zona all'interno della regione selezionata.ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.
Per saperne di più sull'impostazione e sulla rimozione dell'alta affidabilità per le istanze, consulta Configura un'istanza esistente per l'alta affidabilità e Disattiva l'alta affidabilità per un'istanza.
ALLOWED_PROJECTS: un elenco di ID progetto o numeri, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.
Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, devi creare una zona DNS e un record DNS per le repliche.
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances
Corpo JSON della richiesta:
{
"masterInstanceName": "PRIMARY_INSTANCE_NAME",
"project": "PROJECT_ID",
"databaseVersion": "POSTGRES_13",
"name": "REPLICA_INSTANCE_NAME",
"region": "REGION_NAME",
"kind": "sql#instance",
"settings":
{
"tier": "MACHINE_TYPE",
"availabilityType": "AVAILABILITY_TYPE",
"settingsVersion": 0,
"ipConfiguration": {
"ipv4Enabled": false,
"pscConfig": {
"allowedConsumerProjects": [ALLOWED_PROJECTS],
"pscEnabled": true
}
},
"kind": "sql#settings",
"pricingPlan": "PER_USE",
"replicationType": "ASYNCHRONOUS",
"tier": "MACHINE_TYPE"
}
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"operationType": "CREATE_REPLICA",
"name": "OPERATION_ID",
"targetId": "REPLICA_INSTANCE_NAME",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
Configura le repliche di lettura per l'autenticazione database IAM
Se attivi il flagcloudsql.iam_authentication sull'istanza principale, Cloud SQL per PostgreSQL lo attiva automaticamente sulle repliche di lettura. Tuttavia, se non attivi questo flag sull'istanza principale, Cloud SQL per PostgreSQL non lo attiva sulle repliche di lettura. Non puoi utilizzare le repliche per l'autenticazione IAM del database.
Per configurare una replica di lettura per l'autenticazione database IAM:
-
Nella console Cloud de Confiance , vai alla pagina Istanze Cloud SQL.
- Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
- Nel riquadro Configurazione, cerca il flag
cloudsql.iam_authentication. Se il flag non è presente nell'elenco, non è necessario attivarlo nella replica di lettura. Se il flag è presente nell'elenco, devi abilitarlo sulla replica di lettura. Se devi attivare il flag sulla replica di lettura, vai al passaggio successivo. - Seleziona Repliche dal menu di navigazione SQL.
- Fai clic sul nome della replica da modificare.
- Fai clic su Modifica.
- Nella sezione Opzioni di configurazione, espandi Flag.
- Seleziona + Aggiungi elemento.
- Inserisci
cloudsql.iam_authenticationcome nome del flag. Assicurati che l'opzione On sia selezionata per questo flag. - Fai clic su Salva.
Crea repliche a cascata
Questa sezione descrive come creare e gestire le repliche a cascata.
Per informazioni su come funzionano le repliche a cascata, consulta Repliche a cascata.
Procedura per creare una replica a cascata
Console
-
Nella console Cloud de Confiance , vai alla pagina Istanze Cloud SQL.
- Fai clic sulla scheda Repliche per la replica che fungerà da elemento principale per la replica che vuoi creare.
- Fai clic su Crea replica.
- Nella pagina Crea replica di lettura, aggiorna l'ID istanza e tutte le altre opzioni di configurazione, inclusi il nome, la regione e la zona.
- Fai clic su Crea.
Cloud SQL crea una replica. Viene visualizzata la pagina dell'istanza per la replica principale.
- Segui i passaggi 4-6 per ogni nuova replica a cascata che vuoi creare.
gcloud
- Crea la nuova replica specificando la replica principale come istanza principale utilizzando il flag
--master-instance-name: - REPLICA_NAME: l'ID univoco della replica che stai creando
- PARENT_REPLICA_NAME: il nome della replica principale
- Dopo aver creato la replica a cascata, puoi vedere che le modifiche apportate all'istanza principale vengono replicate in tutte le repliche della catena di repliche a cascata.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
- Per creare una replica sotto la replica principale, modifica il seguente esempio di codice JSON e salvalo in un file denominato
request.json:{ "masterInstanceName": "PARENT_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- Esegui questo comando:
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
Risoluzione dei problemi
| Problema | Risoluzione dei problemi |
|---|---|
| La replica di lettura non ha avviato 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 essere un flag che hai fornito esplicitamente o uno impostato su un valore predefinito.
Innanzitutto, verifica che il valore del flag Se il flag |
| 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 è |
| Lo spazio sul disco è esaurito. | Le dimensioni del disco dell'istanza principale possono riempirsi durante la creazione della replica. Modifica l'istanza principale per eseguire l'upgrade a un disco di dimensioni maggiori. |
| Lo spazio su disco aumenta in modo significativo. | Uno slot non utilizzato attivamente per monitorare i dati fa sì che PostgreSQL conservi i segmenti WAL a tempo indeterminato, 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 una query sulla vista 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ò comportare un utilizzo di memoria maggiore 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 |
| Il ritardo di replica è costantemente elevato. | Il carico di scrittura è troppo elevato per essere gestito dalla replica. Il ritardo di replica si verifica quando il thread SQL su una replica non riesce a tenere il passo con il thread IO. Alcuni tipi di query o workload possono causare un ritardo di replica elevato temporaneo o permanente per un determinato schema. Alcune delle cause tipiche del ritardo di replica sono:
Ecco alcune possibili soluzioni:
|
| Errori durante la ricostruzione degli indici in PostgreSQL 9.6. | Ricevi un errore da PostgreSQL che ti informa che devi ricreare un indice specifico. Questa operazione può essere eseguita solo nell'istanza principale. Se crei una nuova istanza di replica, riceverai di nuovo lo stesso errore.
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, 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 con un timeout. | Le transazioni non sottoposte a commit di lunga durata nell'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 principale e la replica hanno dimensioni vCPU diverse, potrebbero verificarsi problemi di prestazioni delle query perché l'ottimizzatore delle query tiene conto delle dimensioni vCPU. |
Per risolvere questo problema, completa i seguenti passaggi:
Se si tratta di una query specifica, modificala. Ad esempio, puoi modificare l'ordine dei join per verificare se ottieni un rendimento migliore. |
Passaggi successivi
- Scopri come gestire le repliche.
- Scopri di più sulle repliche tra regioni.
- Scopri di più sui pool di lettura.
- Scopri di più sul disaster ripristino di emergenza (RE) avanzato