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 primarie quasi in tempo reale, in circostanze normali. Puoi utilizzare una replica di lettura per scaricare le richieste di lettura o il traffico di analisi dall'istanza principale.
Inoltre, per il ripristino di emergenza, puoi eseguire una migrazione a livello di regione. Se una replica è replica tra regioni, puoi eseguire un failover a un'altra regione In particolare, puoi promuovere una replica (in questo caso, le repliche esistenti non considereranno quella istanza come principale).
Per ulteriori informazioni sul funzionamento della replica, consulta Replica in Cloud SQL.
Prima di iniziare
Se stai creando la prima replica per questa istanza, assicurati che soddisfa 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.
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Trova l'istanza per cui vuoi creare una replica, quindi apri il menu
more actions
accanto all'elenco. - 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 la tua istanza della pagina, aggiorna le impostazioni della replica. Inizia facendo clic su Mostra opzioni di configurazione. per visualizzare i gruppi di impostazioni. Espandi i gruppi che vuoi esaminare e personalizza le impostazioni. Un riepilogo di tutte le opzioni selezionate. viene visualizzato sulla destra. La personalizzazione di queste impostazioni è facoltativa. Sono stati assegnati valori predefiniti 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 altri servizi Google Cloud come BigQuery, per accedere ai dati in Cloud SQL ed eseguire query questi dati su una connessione interna, espandi il gruppo Connections (Connessioni) e poi deseleziona la casella di controllo IP pubblico.
- Fai clic su Crea replica.
Cloud SQL crea un backup, se necessario, e la replica. Tornerai alla 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 di 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 Google Cloud, come BigQuery, di
accedere ai dati in Cloud SQL ed eseguire query su questi dati
una connessione interna, quindi aggiungi il parametro --enable-google-private-path
al comando.
Devi creare la replica nella stessa rete VPC
come istanza principale. Puoi anche specificare un allocated-ip-range-name
in quella rete VPC. Se non viene specificato alcun intervallo, la replica viene
creati in un intervallo casuale.
Terraform
Per creare una replica di lettura, utilizza una risorsa Terraform.
REST v1
Utilizza la
insert
della risorsa instances per creare la replica di lettura. Le proprietà region
e databaseVersion devono essere uguali a quelle del master.
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- database-version: stringa della versione dell'enum (ad es. 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 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.
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 } } }
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. La regione
e databaseVersion devono essere le stesse del master.
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- database-version: stringa della versione dell'enum (ad es. 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 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.
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 } } }
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 in cui è abilitato Private Service Connect
Per creare una replica di lettura di un'istanza con Private Service Connect abilitato, utilizza gcloud CLI o l'API. Puoi creare questa replica nella stessa regione o in una regione diversa da quella dell'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ò essere replicata da un'istanza che supporta connessioni IP esterne o da un'istanza configurata con l'accesso ai servizi privati.
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 Google Cloud che contiene l'istanza.
- REGION_NAME: il nome della regione per l'istanza replica.
ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, 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 del linguaggio Cloud SQL, crea una zona DNS e un record DNS per le repliche.
- AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL
: abilita l'alta disponibilità ed è consigliato per le istanze di produzione. Il failover dell'istanza viene eseguito su un'altra zona all'interno della regione selezionata.ZONAL
: non fornisce funzionalità di failover. Questo è il valore predefinito.
Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.
REST v1
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
- REPLICA_INSTANCE_NAME: il nome dell'istanza di replica.
- REGION_NAME: il nome della regione per l'istanza replica.
- MACHINE_TYPE: il tipo di macchina per l'istanza.
- AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL
: abilita l'alta disponibilità ed è consigliato per le istanze di produzione. Il failover dell'istanza viene eseguito su un'altra zona all'interno della regione selezionata.ZONAL
: non fornisce funzionalità di failover. Questo è il valore predefinito.
Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.
ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è contenuto in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect per l'istanza.
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 seguenti sostituzioni:
- PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
- PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
- REPLICA_INSTANCE_NAME: il nome dell'istanza di replica.
- REGION_NAME: il nome della regione per l'istanza replica.
- MACHINE_TYPE: il tipo di macchina per l'istanza.
- AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
REGIONAL
: abilita l'alta disponibilità ed è consigliato per le istanze di produzione. Il failover dell'istanza viene eseguito su 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 disponibilità per le istanze, vedi Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.
ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, 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 IAM dei database
Se attivi il flagcloudsql.iam_authentication
nell'istanza principale,
Cloud SQL per PostgreSQL lo abilita automaticamente nelle repliche di lettura. Tuttavia, se non attivi questo flag nell'istanza principale, Cloud SQL per PostgreSQL non lo attiva nelle repliche di lettura. Non puoi utilizzare le repliche per l'autenticazione IAM dei database.
Per configurare una replica di lettura per l'autenticazione IAM dei database:
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Per aprire la pagina Panoramica di un'istanza, fai clic sul nome dell'istanza.
- Nel riquadro Configurazione, cerca
cloudsql.iam_authentication
flag. Se il flag non è nell'elenco, non è necessario abilitare il flag nella replica di lettura. Se il flag è presente nell'elenco, devi attivarlo nella 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 che vuoi modificare.
- Fai clic su Modifica.
- Nella sezione Opzioni di configurazione, espandi Flag.
- Seleziona + Aggiungi elemento.
- Inserisci
cloudsql.iam_authentication
come nome della segnalazione. Assicurati che per il flag sia selezionata l'opzione On. - Fai clic su Salva.
Creare repliche a cascata
Questa sezione descrive come creare e gestire le repliche a cascata.
Per informazioni sul funzionamento delle repliche a cascata, consulta la sezione Replica a cascata.
Passaggi per creare una replica a cascata
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Fai clic sulla scheda Repliche per la replica che agirà come padre per la replica che vuoi creare.
- Fai clic su Crea replica.
- Nella pagina Crea replica di lettura, aggiorna l'ID istanza e qualsiasi altra opzione di configurazione, inclusi il nome, la regione e la zona.
- Fai clic su Crea.
Cloud SQL crea una replica. Tornerai alla pagina dell'istanza per la replica principale.
- Segui i passaggi 4-6 per ogni nuova replica con struttura a cascata da 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 all'istanza principale vengono replicate in tutte le repliche la 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 è stata avviata al momento della creazione. | Probabilmente è presente un errore più specifico nei file di log. Esamina 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 fornito esplicitamente o di un flag impostato su un valore predefinito.
Innanzitutto, controlla che il valore del flag Se il flag |
Impossibile creare la replica di lettura: errore sconosciuto. | Probabilmente contiene un errore più specifico nei file di log.
Esamina i log in Cloud Logging per trovare l'errore effettivo.
Se l'errore è: |
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 maggiore. |
Lo spazio su disco aumenta in modo significativo. | Uno slot non utilizzato attivamente per monitorare i dati fa sì che PostgreSQL trattenga i segmenti WAL a tempo indeterminato, causando un aumento illimitato dello spazio su disco. Se utilizzi
le funzionalità di decodifica e replica logica in Cloud SQL, gli slot di replica
creati e eliminati automaticamente. Gli slot di replica inutilizzati possono essere rilevati eseguendo una query sulla visualizzazione di sistema
pg_replication_slots
e applicando un filtro alla colonna active . Non utilizzato
possono essere rimossi per rimuovere i segmenti WAL utilizzando
Comando pg_drop_replication_slot .
|
L'istanza di replica utilizza troppa memoria. | La replica utilizza memoria temporanea per memorizzare nella cache le operazioni di lettura spesso richieste, il che può portare a utilizzare più memoria dell'istanza principale.
Riavvia l'istanza replica per recuperare lo spazio di memoria temporaneo. |
La replica è stata interrotta. | È stato raggiunto il limite di spazio di archiviazione massimo e l'aumento automatico dello spazio di archiviazione non è abilitato.
Modifica l'istanza per attivare |
Il ritardo nella replica è costantemente elevato. | Il carico di scrittura è troppo elevato per la replica. Il ritardo nella replica si verifica quando il thread SQL su una replica non è in grado di stare al passo con il thread I/O. Alcuni tipi di query o carichi di lavoro possono causare un ritardo elevato della replica temporaneo o permanente per un determinato schema. Alcune delle cause comuni del ritardo nella replica sono:
Ecco alcune possibili soluzioni:
|
Errori durante la ricreazione degli indici in PostgreSQL 9.6. | PostgreSQL ti informa che devi ricreare
specifico indice. Questa operazione può essere eseguita solo nell'istanza principale. Se
una nuova istanza di replica, presto verrà visualizzato 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. In caso contrario, 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 nell'istanza principale.
|
La creazione della replica non riesce a causa di un timeout. | Le transazioni non committate di lunga durata nell'istanza principale possono causare
il fallimento della 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 prende in considerazione le dimensioni vCPU. |
Per risolvere il problema, svolgi i seguenti passaggi:
Se si tratta di una query specifica, modificala. Ad esempio, puoi modificare l'ordine delle unioni per verificare se il rendimento migliora. |
Passaggi successivi
- Scopri come gestire le repliche.
- Scopri di più sulle repliche tra regioni.