Gestione delle repliche di lettura

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

  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 Disattiva 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 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

  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 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 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:

  1. Interrompi tutte le scritture nell'istanza principale.
  2. Controlla lo stato della replica della replica (segui le istruzioni riportate nella scheda Client mysql).
  3. Verifica che la replica sia in corso, quindi attendi che il ritardo nella replica registrato dalla metrica Seconds_Behind_Master 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

  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 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 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à.

Configura la replica parallela

La riduzione del ritardo della replica è importante per gestire le prestazioni della replica. Il ritardo della replica si verifica quando gli aggiornamenti di una replica di lettura rimangono in ritardo rispetto agli aggiornamenti dell'istanza principale. Questa sezione descrive come gli utenti possono attivare la replica parallela, che può ridurre il ritardo della replica.

Nella replica MySQL, viene utilizzato un thread SQL di replica per eseguire le transazioni raccolte nel log di inoltro sulla replica di lettura. La replica parallela riduce il ritardo di replica aumentando il numero di thread SQL che si occupano di eseguire queste transazioni. Le repliche di lettura con la replica parallela abilitata sono a volte chiamate repliche multithread.

La replica parallela è disponibile in questi tre scenari in Cloud SQL per MySQL:

Per semplicità, questa pagina utilizza i termini "istanza principale" e "replica di lettura".

Passaggi di base per modificare i flag di replica parallela

I passaggi per attivare la replica parallela sono i seguenti:

  1. Su una replica di lettura, disattiva la replica.
  2. Nella replica di lettura, imposta i flag per la replica parallela. Utilizza il comando gcloud per impostare i flag. L'opzione della console Google Cloud è disattivata quando la replica è disattivata.
  3. Nella replica di lettura, abilita la replica.
  4. Se vuoi, nell'istanza principale imposta i flag per ottimizzare le prestazioni per la replica parallela.

Repliche di lettura: flag per la replica parallela

Cloud SQL per MySQL supporta diversi flag per la replica parallela sulle repliche di lettura. Per informazioni sui flag, fai clic su questi link alla documentazione di MySQL 8.0:

La modifica di questi flag non riavvia la replica di lettura.

La tabella seguente contiene gli intervalli consentiti e i valori predefiniti per questi flag:

Flag replica di lettura Valori consentiti Valore predefinito di MySQL 5.7 Valore predefinito di MySQL 8.0 e versioni successive
replica_parallel_workers 0-1024 0 0 (MySQL 8.0.26 e versioni precedenti)
4 (MySQL 8.0.27 e versioni successive)
replica_parallel_type DATABASE, LOGICAL_CLOCK DATABASE DATABASE (MySQL 8.0.26 e versioni precedenti)
LOGICAL_CLOCK (MySQL 8.0.27 e versioni successive)
replica_preserve_commit_order ON, OFF OFF OFF (MySQL 8.0.26 e versioni precedenti)
ON (MySQL 8.0.27 e versioni successive)
replica_pending_jobs_size_max 1024-1GB 16MB 128 MB

Il flag replica_preserve_commit_order impedisce la presenza di lacune nella sequenza di transazioni eseguite dal log di inoltro della replica.

L'impostazione replica_preserve_commit_order=1 richiede quanto segue:

Il flag replica_pending_jobs_size_max imposta la memoria massima, in byte, disponibile per le code degli applicatori che contengono eventi non ancora applicati.

Istanza principale: flag per la replica parallela

Cloud SQL per MySQL supporta diversi flag da utilizzare in un'istanza principale. Puoi utilizzare questi flag per ottimizzare le prestazioni della replica per le repliche di lettura associate con la replica parallela abilitata. Per informazioni sui flag, fai clic su questi link alla documentazione di MySQL 8.0:

La modifica di questi flag non riavvia l'istanza principale.

La tabella seguente contiene gli intervalli consentiti e i valori predefiniti per questi indicatori:

Flag istanza principale Valori consentiti Valore predefinito di MySQL 5.7 Valore predefinito di MySQL 8.0 Valore predefinito di MySQL 8.4
binlog_transaction_dependency_history_size 1-1000000 25000 25000 25000
binlog_transaction_dependency_tracking COMMIT_ORDER, WRITESET, WRITESET_SESSION COMMIT_ORDER WRITESET n/a (non più supportato in MySQL 8.4)
transaction_write_set_extraction OFF, MURMUR32, XXHASH64 OFF XXHASH64 n/a (non più supportato in MySQL 8.4)

In MySQL 5.7, se binlog_transaction_dependency_tracking è impostato su WRITESET o WRITESET_SESSION, transaction_write_set_extraction deve essere impostato su un valore diverso da OFF (XXHASH64 o MURMUR32).

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.

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 sia i thread I/O sia quelli SQL della replica segnalano che sono in esecuzione. Per ulteriori informazioni, consulta le metriche Stato di esecuzione del thread I/O slave e Stato di esecuzione del thread SQL slave riportate di seguito oppure consulta la sezione Controllo dello stato della replica nel Manuale di riferimento di MySQL.

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

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).

Questa metrica riporta il valore di Seconds_Behind_Master quando SHOW REPLICA STATUS viene eseguito sulla replica. Per ulteriori informazioni, consulta Controllo dello stato della replica nel Manuale di riferimento di MySQL.

Ritardo di rete
(cloudsql.googleapis.com/database/replication/network_lag)

Il tempo in secondi necessario per scrivere il file binlog nel database principale e raggiungere il thread IO nella replica.

Se network_lag è pari a zero o è trascurabile, ma "replica_lag" è elevato, indica che il thread SQL non è in grado di applicare le modifiche di replica abbastanza rapidamente.

Stato di esecuzione del thread I/O slave
(cloudsql.googleapis.com/database/mysql/replication/slave_io_running_state)

Indica se il thread I/O per la lettura del log binario dell'istanza principale è in esecuzione sulla replica. I valori possibili sono:

  • Yes
  • No
  • Connecting

Questa metrica riporta il valore di Slave_IO_Running quando SHOW REPLICA STATUS viene eseguito sulla replica. Per ulteriori informazioni, consulta Controllo dello stato della replica nel Manuale di riferimento di MySQL.

Stato di esecuzione del thread SQL slave
(cloudsql.googleapis.com/database/mysql/replication/slave_sql_running_state)

Indica se il thread SQL per l'esecuzione degli eventi nel log di inoltro è in esecuzione sulla replica. I valori possibili sono:

  • Yes
  • No
  • Connecting

Questa metrica riporta il valore di Slave_SQL_Running quando SHOW REPLICA STATUS viene eseguito sulla replica. Per ulteriori informazioni, consulta Controllo dello stato della replica nel Manuale di riferimento di MySQL.

Per controllare lo stato della replica:

Console

Cloud SQL registra le metriche Replication State e Replication Lag 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. Poi aggiungi un filtro per state = "Running". Il grafico mostra 1 se la replica è in esecuzione e 0 in caso contrario.
    2. Per monitorare la metrica del ritardo di replica: nel campo Seleziona una metrica, digita replica_lag. Il grafico mostra il tempo che intercorre tra lo stato della replica e quello della tabella principale.
    3. Per monitorare lo stato del thread I/O della replica: nel campo Seleziona una metrica, digita Slave I/O thread running state. Poi aggiungi un filtro su state = "Yes". Il grafico mostra 1 se il thread è in esecuzione e 0 in caso contrario.
    4. Per monitorare lo stato del thread SQL della replica: nel campo Seleziona una metrica, digita Slave SQL thread running state. Poi aggiungi un filtro su state = "Yes". Il grafico mostra 1 se il thread è in esecuzione e 0 in caso contrario.

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 mysql

  1. Connettiti alla replica con un client MySQL.

    Per informazioni, consulta Opzioni di connessione per applicazioni esterne.

  2. Controlla lo stato della replica:
    SHOW REPLICA STATUS \G

    Cerca le seguenti metriche nell'output del comando:

    • Master_Host: il nome dell'istanza principale.
    • Slave_IO_Running, Slave_SQL_Running: Indica se i thread I/O e SQL sono in esecuzione. Questi thread sono responsabili del trasferimento degli eventi dalla tabella principale al log di inoltro della replica ed eseguono questi eventi dal log di inoltro. Il valore della metrica è Yes se il thread è in esecuzione. Entrambi i thread devono essere in esecuzione affinché la replica sia attiva.
    • Seconds_Behind_Master: il tempo, in secondi, di ritardo della replica nell'elaborazione delle transazioni della primaria, ovvero la differenza tra (1) l'ora corrente e (2) il timestamp originale in cui la primaria ha eseguito il commit della transazione attualmente applicata alla replica. Il valore è NULL se la replica è interrotta.
    • Master_Log_file, Read_Master_Log_Pos, Relay_Master_Log_File, Exec_Master_Log_Pos: queste metriche mostrano le coordinate (nome file e offset) fino a cui il thread I/O ha letto gli eventi (Master_Log_file e Read_Master_Log_Pos) e fino a cui il thread SQL ha eseguito gli eventi (Relay_Master_Log_File e Exec_Master_Log_Pos). Se sono uguali (ad es. Master_Log_file è uguale a Relay_Master_Log_File e Read_Master_Log_Pos è uguale a Exec_Master_Log_Pos), la replica ha elaborato tutti gli eventi ricevuti dalla principale.

Per ulteriori dettagli sull'output di questo comando, consulta la documentazione di MySQL su Controllo dello stato della replica.

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 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, disattiva e riattiva Service Networking API. Questa azione crea il account di servizio necessario per continuare con la procedura.

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.
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 automatic storage increase.

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:
  • Query lente sulla replica. Trovarli e risolverli.
  • Tutte le tabelle devono avere una chiave univoca/principale. 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 un ritardo nella replica con la replica basata su righe, poiché un numero enorme di aggiornamenti si accumula nella replica.

Ecco alcune possibili soluzioni:

Il ritardo della replica aumenta improvvisamente. Questo è causato da transazioni a lunga esecuzione. Quando una transazione (una singola istruzione o più istruzioni) viene eseguita nell'istanza di origine, la relativa ora di inizio viene registrata nel log binario. Quando la replica riceve questo evento del log bin, confronta il timestamp con quello corrente per calcolare il ritardo nella replica. Pertanto, una transazione a lunga esecuzione sulla sorgente causerebbe un ritardo di replica elevato immediato sulla replica. Se il numero di modifiche delle righe nella transazione è elevato, anche la replica impiegherà molto tempo per eseguirla. Nel frattempo, il ritardo della replica aumenta. Una volta completata la transazione, il periodo di aggiornamento dipenderà dal carico di lavoro di scrittura sull'origine e dalla velocità di elaborazione della replica.

Per evitare una transazione lunga, alcune possibili soluzioni sono:

  • Suddividi la transazione in più transazioni di piccole dimensioni
  • Suddividi una singola query di scrittura di grandi dimensioni in batch più piccoli
  • Prova a separare le query SELECT lunghe da una transazione mista a DML
La modifica dei flag di replica parallela genera un errore. È impostato un valore errato per uno o più di questi flag.

Nell'istanza principale che mostra il messaggio di errore, imposta i flag di replica parallela:

  1. Modifica i flag binlog_transaction_dependency_tracking e transaction_write_set_extraction:
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. Aggiungi il flag slave_pending_jobs_size_max:

    slave_pending_jobs_size_max=33554432

  3. Modifica il flag transaction_write_set_extraction:

    transaction_write_set_extraction=XXHASH64

  4. Modifica il flag binlog_transaction_dependency_tracking:

    binlog_transaction_dependency_tracking=WRITESET

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.

Passaggi successivi