Gestione delle repliche di lettura

Questa pagina descrive come gestire le repliche di lettura. Queste operazioni includono Disabilitazione e abilitazione della replica, promozione di una replica, configurazione della replica e controllare lo 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 di replica, ad esempio, per eseguire il debug o analizzare lo stato in esecuzione in un'istanza Compute Engine. 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

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Seleziona un'istanza replica facendo clic sul nome.
  3. Fai clic su Disabilita replica nella barra dei pulsanti.
  4. Fai clic su OK.

gcloud

gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication

REST v1

Per eseguire questo comando cURL al prompt della riga di comando, devi acquisire di accesso al token utilizzando gcloud auth stampa-access-token. Puoi utilizzare anche lo Explorer API nella pagina Instances:patch per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • project-id: l'ID progetto
  • replica-name: il nome dell'istanza di 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 utilizzare anche lo Explorer API nella pagina Instances:patch per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • project-id: l'ID progetto
  • replica-name: il nome dell'istanza di 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 e creiamo una nuova replica.

Per attivare la replica:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Seleziona un'istanza di replica facendo clic sul suo nome.
  3. Fai clic su Attiva la replica.
  4. Fai clic su Ok.

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

Per eseguire questo comando cURL al prompt della riga di comando, devi acquisire di accesso al token utilizzando gcloud auth stampa-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 di 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 utilizzare anche lo Explorer API nella pagina Instances:patch per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • project-id: l'ID progetto
  • replica-name: il nome dell'istanza di 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 una istanza Cloud SQL principale 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 pubblica devi procedere nel seguente modo:

  1. Interrompi tutte le scritture nell'istanza principale.
  2. Controlla lo stato della replica della replica (segui le istruzioni nella scheda Client psql).
  3. Verifica che la replica sia in fase di replica, quindi attendi che ritardo della replica riportato da la metrica replay_lag è 0.

In caso contrario, un'istanza appena promossa potrebbe non avere alcune transazioni nell'istanza principale.

Per promuovere una replica a un'istanza autonoma:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Seleziona un'istanza di replica facendo clic sul suo nome.
  3. Fai clic su Promuovi replica.
  4. 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 di 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 di 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à.

Controlla lo stato della replica

Quando visualizzi un'istanza di replica utilizzando la console Google Cloud o accedi alla 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 di replica di 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.

MetricaDescrizione
Stato di replica
(cloudsql.googleapis.com/database/replication/state)

Indica se la replica sta trasmettendo attivamente i log dalla tabella principale alla replica. I valori possibili sono:

  • Running
  • Stopped
  • Error

Questa metrica riporta Running se:

  1. pg_catalog.pg_stat_wal_receiver registra un status di "streaming", e
  2. pg_catalog.pg_is_wal_replay_paused() riporta "f" (false).

Per ulteriori informazioni, vedi La raccoglitore delle statistiche e Sistema Funzioni di amministrazione nel manuale di riferimento PostgreSQL.

Ritardo della replica
(cloudsql.googleapis.com/database/replication/replica_lag)

Il periodo di tempo in cui lo stato della replica è in ritardo rispetto alla replica dell'istanza principale. Questa è la differenza tra (1) il l'ora corrente e (2) il timestamp originale in cui ha impegnato la transazione attualmente applicata 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 sola metrica che genera il rendimento end-to-end (da principale alla replica).

Per ulteriori informazioni, consulta Tempo di latenza della replica.

Byte di ritardo
(cloudsql.googleapis.com/database/postgresql/replication/replica_byte_lag)

Segnala il numero di byte di ritardo rispetto alla replica di lettura principale. Per ogni replica vengono prodotte quattro serie temporali che mostrano numero di byte nel log write-ahead dell'istanza principale che non sono ancora stato...

  • sent_location: …inviato alla replica
  • write_location: ...scritto su disco dalla replica
  • flush_location: …scaricato sul disco dalla replica
  • replay_location: ...riprodotto dalla replica

Queste metriche hanno scopi diversi. Ad esempio, replay_location fornisce un'indicazione del ritardo nella replica (il numero di transazioni committate alla principale che non sono ancora state applicate alla replica), mentre flush_location fornisce un'indicazione del numero di transazioni che non sono state registrate in modo permanente nell'istanza della replica.

Queste metriche vengono calcolate confrontando pg_catalog.pg_current_wal_lsn() con uno dei seguenti campi di pg_stat_replication: sent_lsn, write_lsn, flush_lsn o replay_lsn. Per ulteriori informazioni, vedi La Statistics Collector nel manuale di riferimento PostgreSQL.

Byte di ritardo massimo
(cloudsql.googleapis.com/database/postgresql/external_sync/max_replica_byte_lag)

Per una replica di un'istanza principale esterna, indica il numero massimo di ritardo di replica (in byte) su tutti i database che vengono replicati a questa istanza. Per ogni database, viene definito come il numero di byte nel log di scrittura anticipata del database principale di cui non è stata confermata la ricezione da parte della replica.

Questa metrica viene calcolata inviando una query all'istanza principale per pg_catalog.pg_current_wal_lsn() al valore di confirmed_flush_lsn per ogni database replicato per questa istanza di replica. Per ulteriori informazioni, consulta Il raccoltore di statistiche nel Manuale di riferimento di PostgreSQL.

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:

  1. Nella console Google Cloud, vai alla pagina Monitoring.

    Vai a Monitoring

  2. Seleziona la scheda Dashboard.
  3. Fai clic su Crea dashboard.
  4. Assegna un nome alla dashboard e fai clic su OK.
  5. Fai clic su Aggiungi grafico.
  6. Per Tipo di risorsa, seleziona Database Cloud SQL.
  7. Esegui una delle seguenti operazioni:
    1. Per monitorare la metrica dello stato di replica: nel campo Seleziona una metrica, digita Replication state. Quindi aggiungi un filtro per state = "Running". Il grafico mostra 1 se la replica è in esecuzione e 0 in caso contrario.
    2. 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 su replica_lag_type = "replay_location". Il grafico indica il numero di byte associati alle transazioni impegnate nelle principali ma non ancora riprodotte replica.
    3. Per monitorare il ritardo della replica, in byte, per una replica di un esterno principale: nel campo Seleziona una metrica, digita Max Lag Bytes. Il grafico mostra il numero di byte associate a transazioni che sono state impegnate nell'istanza principale, che non sono stati ancora confermati 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 esistono 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 e altre dalla replica. Per i passaggi seguenti, collegati al un'istanza principale o una replica (come indicato di seguito) con un database di alto profilo.

Per informazioni, vedi Connessione per applicazioni esterne.

  1. Per controllare lo stato della replica dall'istanza principale:
    select * from pg_stat_replication;
    Cerca le seguenti metriche nell'output del comando:
    • client_addr: l'indirizzo IP dell'istanza replica.
    • state: indica se il thread SQL per l'esecuzione eventi nel log di inoltro sono in esecuzione. Il valore è streaming all'avvio della 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.
  2. 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 in esecuzione in un'istanza Compute Engine.
    • 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 e last_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 e f negli altri casi.

    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.

  • Per ulteriori dettagli sull'output di questi comandi, consulta documentazione di PostgreSQL La Raccoglitore delle statistiche.
  • Risoluzione dei problemi

    Problema Risoluzione dei problemi
    La replica di lettura non è stata avviata al momento della creazione. Probabilmente contiene 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 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 è presente un errore più specifico nei file di log. Esamina 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, disabilita e riattiva Service Networking API. Questa azione crea l'account di servizio necessario per continuare la procedura.

    Il disco è pieno. 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 mantenere i segmenti WAL a tempo indeterminato, causando l'aumento indefinita 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 non utilizzati possono essere rilevati eseguendo una query sul pg_replication_slots visualizzazione di sistema e filtro nella colonna active. Non utilizzato possono essere rimossi per rimuovere i segmenti WAL utilizzando Comando pg_drop_replication_slot.
    L'istanza replica utilizza troppa memoria. La replica utilizza la memoria temporanea per memorizzare nella cache la lettura richiesta più spesso operazioni, il che può portarlo a utilizzare più memoria rispetto all'istanza principale.

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

    Replica interrotta. È stato raggiunto il limite di spazio di archiviazione massimo 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 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:
    • Query lente sulla replica. Trovale e correggile.
    • Tutte le tabelle devono avere una chiave univoca/primaria. Ogni aggiornamento di una tabella di questo tipo senza una chiave univoca/principale provoca scansioni complete della tabella sulla replica.
    • Query come DELETE ... WHERE field < 50000000 causano con la replica basata su riga, poiché un numero enorme gli aggiornamenti si accumulano sulla replica.

    Ecco alcune possibili soluzioni:

    • Modifica l'istanza per aumentare le dimensioni della replica.
    • Riduci il carico sul database.
    • Invia traffico di lettura alla replica di lettura.
    • Indicizza le tabelle.
    • Identifica e correggi le query di scrittura lente.
    • Ricrea la replica.
    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 sull'istanza principale. Se una nuova istanza di replica, presto verrà visualizzato di nuovo lo stesso errore. Indici hash non vengono propagate alle repliche nelle versioni PostgreSQL precedenti alla 10.

    Se devi utilizzare indici hash, esegui l'upgrade a PostgreSQL 10 o versioni successive. Altrimenti, Se vuoi usare anche le repliche, non usare 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 impegnate a lunga esecuzione sull'istanza principale possono causare in caso di errore durante la 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:

    1. Attiva il flag log_duration e imposta il parametro log_statement su ddl. In questo modo ottieni sia le query sia il tempo di esecuzione sul database. Tuttavia, a seconda del carico di lavoro, potrebbero verificarsi problemi di prestazioni.
    2. Sia nell'istanza principale che nella 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 delle unioni per verificare se il rendimento migliora.

    Passaggi successivi