Questa pagina descrive come gestire le repliche di lettura. Queste operazioni includono la disattivazione e l'abilitazione della replica, la promozione di una replica, la configurazione della replica parallela e il controllo dello stato della replica.
Per ulteriori informazioni sul funzionamento della replica, consulta Replica in Cloud SQL.
Disabilita replica
Per impostazione predefinita, una replica viene avviata con la replica abilitata. Tuttavia, puoi disattivare la replica, ad esempio per eseguire il debug o analizzare lo stato di un'istanza. Quando è tutto pronto, riattiva esplicitamente la replica. La disattivazione o la nuova attivazione della replica non riavvia l'istanza replica.
La disattivazione della replica non interrompe l'istanza di replica, che diventa un'istanza di sola lettura che non esegue più la replica dall'istanza principale. Continuerai a ricevere gli addebiti per l'istanza. Nella replica disattivata, puoi riattivare la replica, eliminarla o promuoverla a un'istanza autonoma.
Per disattivare la replica:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza replica facendo clic sul nome.
- Fai clic su Disattiva replica nella barra dei pulsanti.
- Fai clic su OK.
gcloud
gcloud sql instances patch REPLICA_NAME \ --no-enable-database-replication
REST v1
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:patch per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corpo JSON della richiesta:
{ "settings": { "databaseReplicationEnabled": "False" } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1beta4
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:patch per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corpo JSON della richiesta:
{ "settings": { "databaseReplicationEnabled": "False" } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Abilita replica
Se una replica non viene replicata da molto tempo, occorrerà più tempo per allinearla all'istanza principale. In questo caso, elimina la replica e creane una nuova.
Per attivare la replica:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza replica facendo clic sul nome.
- Fai clic su Attiva la replica.
- Fai clic su Ok.
gcloud
gcloud sql instances patch REPLICA_NAME \ --enable-database-replication
REST v1
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:patch per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corpo JSON della richiesta:
{ "settings": { "databaseReplicationEnabled": "True" } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1beta4
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:patch per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corpo JSON della richiesta:
{ "settings": { "databaseReplicationEnabled": "True" } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Promuovi una replica
Con la promozione di una replica di lettura, la replica viene interrotta e l'istanza convertita in un'istanza principale Cloud SQL autonoma con funzionalità di lettura e scrittura.
Quando vengono promosse, le repliche di lettura vengono configurate automaticamente con i backup, ma non come istanze ad alta disponibilità (HA). Puoi attivare l'alta disponibilità dopo la promozione della replica, come faresti per qualsiasi istanza non replica. La configurazione di una replica di lettura per l'alta disponibilità avviene nello stesso modo come per un'istanza principale. Scopri di più sulla configurazione dell'istanza per l'alta disponibilità.
Prima di promuovere una replica di lettura, se l'istanza principale è ancora disponibile e serve i client, devi eseguire i seguenti passaggi:
- Interrompi tutte le scritture nell'istanza principale.
- Controlla lo stato della replica della replica (segui le istruzioni riportate nella scheda Client psql).
- Verifica che la replica sia in corso, quindi attendi che il ritardo nella replica registrato dalla metrica
replay_lag
sia pari a 0.
In caso contrario, in un'istanza appena promossa potrebbero mancare alcune transazioni che sono state committate nell'istanza principale.
Per promuovere una replica a un'istanza autonoma:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza replica facendo clic sul nome.
- Fai clic su Promuovi replica.
- Fai clic su Ok.
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:promoteReplica per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1beta4
Per eseguire questo comando cURL a un prompt della riga di comando, devi acquisire un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Instances:promoteReplica per inviare la richiesta all'API REST.
Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
- project-id: l'ID progetto
- replica-name: il nome dell'istanza replica
Metodo HTTP e URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Verifica che l'istanza promossa sia configurata correttamente. In particolare, se necessario, valuta la possibilità di configurare l'istanza per l'alta disponibilità.
Controllare lo stato della replica
Quando visualizzi un'istanza replica utilizzando la console Google Cloud o accedi all'istanza utilizzando un client di amministrazione, ottieni i dettagli sulla replica, inclusi stato e metriche. Quando utilizzi l'interfaccia a riga di comando gcloud, viene visualizzato un breve riepilogo della configurazione della replica.
Prima di controllare lo stato della replica per un'istanza di replica Cloud SQL,
utilizza il comando gcloud sql instances describe
per visualizzare
lo stato dell'istanza. Di conseguenza, puoi vedere se la replica è abilitata per l'istanza della replica.
Per le istanze di replica sono disponibili le seguenti metriche. Scopri di più su altre metriche disponibili per tutte le istanze, incluse quelle non replicate.
Metrica | Descrizione |
---|---|
Stato di replica ( cloudsql.googleapis.com ) |
Indica se la replica sta trasmettendo attivamente i log dalla tabella principale alla replica. I valori possibili sono:
Questa metrica riporta
Per ulteriori informazioni, consulta Il raccoltore di statistiche e Funzioni di amministrazione del sistema nel Manuale di riferimento di PostgreSQL. |
Ritardo della replica ( cloudsql.googleapis.com ) |
Il tempo che intercorre tra lo stato della replica e lo stato dell'istanza principale. Si tratta della differenza tra (1) l'ora corrente e (2) il timestamp originale in cui la tabella principale ha eseguito il commit della transazione attualmente in fase di applicazione sulla replica. In particolare, le scritture possono essere conteggiate come in ritardo anche se sono state ricevute dalla replica, se la replica non ha ancora applicato la scrittura al database. Per le repliche a cascata, ogni coppia di replica principale viene monitorata separatamente e non esiste una singola metrica che fornisca il ritardo end-to-end (dall'origine alla replica). Per ulteriori informazioni, consulta Tempo di latenza della replica. |
Byte di ritardo ( cloudsql.googleapis.com ) |
Indica il numero di byte di cui la replica di lettura è in ritardo rispetto all'istanza principale. Vengono prodotte quattro serie temporali per ogni replica, che mostrano il numero di byte nel log di scrittura anticipata della primaria che non sono ancora stati …
Queste metriche hanno scopi diversi. Ad esempio,
Queste metriche vengono calcolate confrontando
|
Byte di ritardo massimo ( cloudsql.googleapis.com ) |
Per una replica di un database principale esterno, indica il ritardo di replica massimo (in byte) su tutti i database in fase di replica in questa istanza. Per ogni database, viene definito come il numero di byte nel log di scrittura anticipata del database principale che non sono stati confermati come ricevuti dalla replica. Questa metrica viene calcolata inviando una query all'istanza principale per confrontare
|
Per controllare lo stato della replica:
Console
Cloud SQL registra la metrica Replication State
nella dashboard di monitoraggio Cloud SQL predefinita.
Per visualizzare altre metriche per le repliche all'interno e tra regioni e per le repliche di server esterni, crea una dashboard personalizzata e aggiungi le metriche che vuoi monitorare:
-
Nella console Google Cloud, vai alla pagina Monitoring.
- Seleziona la scheda Dashboard.
- Fai clic su Crea dashboard.
- Assegna un nome alla dashboard e fai clic su OK.
- Fai clic su Aggiungi grafico.
- Per Tipo di risorsa, seleziona Database Cloud SQL.
- Esegui una delle seguenti operazioni:
- Per monitorare la metrica dello stato di replica: nel campo Seleziona
una metrica, digita
Replication state
. Poi aggiungi un filtro perstate = "Running"
. Il grafico mostra 1 se la replica è in esecuzione e 0 in caso contrario. - Per monitorare il ritardo di replica, in byte, per una replica di lettura: nel
campo Seleziona una metrica, digita
Lag Bytes
. Poi aggiungi un filtro sureplica_lag_type = "replay_location"
. Il grafico mostra il numero di byte associati alle transazioni che sono state committate sulla principale, ma non sono ancora state riprodotte sulla replica. - Per monitorare il ritardo di replica, in byte, per una replica di un primario esterno: nel campo Seleziona una metrica, digita
Max Lag Bytes
. Il grafico mostra il numero di byte associati alle transazioni che sono state committate sulla principale, ma non sono ancora state confermate dalla replica.
gcloud
Per un'istanza replica, controlla lo stato della replica con:
gcloud sql instances describe REPLICA_NAME
Nell'output, cerca le proprietà databaseReplicationEnabled
e masterInstanceName
.
Per un'istanza principale, controlla se sono presenti repliche con:
gcloud sql instances describe PRIMARY_INSTANCE_NAME
Nell'output, cerca la proprietà replicaNames
.
Client psql
Alcune metriche relative allo stato della replica vengono prodotte dall'istanza principale, mentre altre vengono prodotte dalla replica. Per i passaggi che seguono, connettiti all'istanza di replica o principale (come indicato di seguito) con un client PostgreSQL.
Per informazioni, consulta Opzioni di connessione per applicazioni esterne.
- Per controllare lo stato della replica dall'istanza principale:
Cerca le seguenti metriche nell'output del comando:select * from pg_stat_replication;
client_addr
: l'indirizzo IP dell'istanza replica.state
: indica se il thread SQL per l'esecuzione degli eventi nel log di trasferimento è in esecuzione. Il valore èstreaming
quando viene avviata la replica.replay_lag
: il numero di byte del thread SQL della replica che è in ritardo rispetto all'istanza principale. Il valore èO
o un numero ridotto di byte.
- Per controllare lo stato della replica dall'istanza replica:
select * from pg_stat_wal_receiver;
Cerca le seguenti metriche nell'output del comando:
sender_host
: l'indirizzo IP dell'istanza principale.status
: indica se il thread SQL per l'esecuzione degli eventi nel log di trasferimento è in esecuzione. Il valore èstreaming
quando viene avviata la replica.last_msg_send_time
elast_msg_receipt_time
: la differenza tra questi due timestamp è il tempo di attesa.
Per verificare se la replica è stata messa in pausa:
select pg_is_wal_replay_paused();
Il valore è
t
se la replica è in pausa ef
in caso contrario.Per verificare se ci sono transazioni ricevute dall'istanza principale, ma non ancora applicate:
# for PostgreSQL 9.6 select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location(); # for PostgreSQL 10 and above select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();
Se i due valori sono uguali, la replica ha elaborato tutte le transazioni ricevute dalla principale.
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 degli indicatori 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 è presente 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. | Le dimensioni del disco dell'istanza principale possono esaurirsi 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 vengono 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 . Gli slot inutilizzati possono essere eliminati per rimuovere i segmenti WAL utilizzando il comando pg_drop_replication_slot .
|
L'istanza 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. Ecco alcune delle cause più comuni del ritardo nella replica:
Ecco alcune possibili soluzioni:
|
Errori durante la ricostruzione degli indici in PostgreSQL 9.6. | PostgreSQL ti comunica che devi ricostruire un
determinato indice. Questa operazione può essere eseguita solo nell'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 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 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 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 creare una replica di lettura.
- Scopri di più sui requisiti e le best practice per la replica.