Gestione delle repliche di lettura

In questa pagina viene descritto 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 su come funziona la 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, riabilita la replica esplicitamente. Disabilitazione o Se riattivi la replica, l'istanza di replica non viene riavviata.

La disabilitazione della replica non arresta l'istanza di replica. diventa un modello di accesso che non è più replicata dalla sua istanza principale. Continua addebiti per l'istanza. Sulla replica disabilitata, puoi riabilitarla. replicare, eliminare o promuovere la replica a livello autonomo in esecuzione in un'istanza Compute Engine.

Per disabilitare 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 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, effettua 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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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, effettua 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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Abilita replica

Se una replica non viene replicata da molto tempo, la replica richiederà più tempo per poter raggiungere l'istanza principale. In questo caso, elimina e creiamo una nuova replica.

Per abilitare 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 Abilita 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 utilizzare anche lo Explorer API nella pagina Instances:patch per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, effettua 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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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, effettua 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 delle seguenti 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.

Se promosse, le repliche di lettura vengono configurate automaticamente con i backup, ma non vengono configurate automaticamente come istanze ad alta disponibilità (HA). Puoi abilitare l'alta disponibilità dopo aver promosso la replica, come faresti per qualsiasi di un'istanza non di replica. La configurazione di una replica di lettura per l'alta disponibilità avviene nello stesso modo. per un'istanza principale. Scopri di più sulla configurazione dell'alta disponibilità dell'istanza.

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 sull'istanza principale.
  2. Controlla lo stato di replica del (segui le istruzioni in la scheda Client mysql).
  3. Verifica che la replica sia in fase di replica, quindi attendi che ritardo della replica riportato da la metrica Seconds_Behind_Master è 0.

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

Per promuovere una replica a 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 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:promoteReplica per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, effettua 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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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:promoteReplica per inviare la richiesta API REST.

Prima di utilizzare i dati della richiesta, effettua 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 delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Verifica che l'istanza promossa sia configurata correttamente. In particolare, considera configurazione dell'istanza per l'alta disponibilità, se necessario.

Configura replica parallela

Ridurre il tempo di replica è importante per gestire le prestazioni della replica. Il ritardo della replica si verifica quando gli aggiornamenti a una replica di lettura sono in ritardo rispetto e gli aggiornamenti all'istanza principale. Questa sezione descrive come gli utenti possono attivare replica parallela, che può ridurre il tempo di replica.

Nella replica MySQL, viene utilizzato un thread SQL di replica per eseguire transazioni raccolte nel log di inoltro sulla replica di lettura. Parallelo riduce il tempo di replica aumentando il numero di thread SQL che lavorano per eseguire queste transazioni. Repliche di lettura con mentre 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à, in questa pagina vengono utilizzati i termini "istanza principale" e "replica di lettura".

Passaggi di base per modificare i flag di replica parallela

Per abilitare la replica parallela, segui questi passaggi:

  1. In una replica di lettura, disabilita la replica.
  2. Nella replica di lettura, imposta i flag per replica parallela. Utilizza il comando gcloud per impostare e i flag facoltativi. Se la replica è disabilitata, l'opzione della console Google Cloud è disabilitata.
  3. Nella replica di lettura, abilita la replica.
  4. Facoltativamente, nell'istanza principale, imposta 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 al file MySQL 8.0 documentazione:

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

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

Lettura flag replica Valori consentiti Valore predefinito MySQL 5.7 Valore predefinito MySQL 8.0
slave_parallel_workers 0-1024 0 0 (MySQL 8.0.26 e versioni precedenti)
4 (MySQL 8.0.27 e versioni successive)
slave_parallel_type DATABASE, LOGICAL_CLOCK DATABASE DATABASE (MySQL 8.0.26 e versioni precedenti)
LOGICAL_CLOCK (MySQL 8.0.27 e versioni successive)
slave_preserve_commit_order ON, OFF OFF OFF (MySQL 8.0.26 e versioni precedenti)
ON (MySQL 8.0.27 e versioni successive)
slave_pending_jobs_size_max 1024-1GB 16MB 128 MB

Il flag slave_preserve_commit_order evita interruzioni nella sequenza di le transazioni eseguite dal log di inoltro della replica.

La slave_preserve_commit_order=1 richiede quanto segue:

Il flag slave_pending_jobs_size_max imposta la memoria massima, in byte, disponibili per le code di utenti che contengono eventi non ancora applicati.

Istanza principale: flag per la replica parallela

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

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

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

Flag istanza principale Valori consentiti Valore predefinito MySQL 5.7 Valore predefinito MySQL 8.0
binlog_transaction_dependency_history_size 1-1000000 25000 25000
binlog_transaction_dependency_tracking COMMIT_ORDER, WRITESET, WRITESET_SESSION COMMIT_ORDER WRITESET
transaction_write_set_extraction OFF, MURMUR32, XXHASH64 OFF XXHASH64

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

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 gcloud CLI, 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 di replica.

Le seguenti metriche sono disponibili per le istanze di replica. Scopri di più sulle metriche aggiuntive disponibili per tutte le istanze, incluse le metriche non di replica instances.)

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

Indica se la replica sta eseguendo attivamente il flusso di log dal come server principale alla replica. I valori possibili sono:

  • Running
  • Stopped
  • Error

Questa metrica indica Running se sia l'I/O della replica che I thread SQL segnalano che sono in esecuzione. Vedi il thread I/O slave Metriche relative allo stato di esecuzione e allo stato di esecuzione del thread SQL slave di seguito per avere ulteriori informazioni o consultare una Verifica in corso Stato di replica nel manuale di riferimento di MySQL.

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 considerate in ritardo anche se ricevuti dalla replica, se quest'ultima non è ancora stata applicata la scrittura sul database.

Per le repliche a cascata, viene monitorata ogni coppia di replica principale separatamente e non esiste una sola metrica che genera il rendimento end-to-end (da principale alla replica).

Questa metrica segnala il valore di Seconds_Behind_Master quando SHOW SLAVE STATUS viene eseguito sulla replica. Per ulteriori informazioni le informazioni, vedi Verifica in corso Stato di replica nel manuale di riferimento di MySQL.

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

La quantità di tempo, in secondi, necessaria per scrivere il binlog in dal database principale per raggiungere il thread di I/O nella replica.

Se network_lag è zero o trascurabile, ma "replica_lag" è alta, significa che il thread SQL non è in grado di applicare la replica cambia abbastanza rapidamente.

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

Indica se il thread di I/O per la lettura dell'istanza principale sia in esecuzione sulla replica. I valori possibili sono:

  • Yes
  • No
  • Connecting

Questa metrica registra il valore Slave_IO_Running quando SHOW SLAVE STATUS viene eseguito sulla replica. Per ulteriori informazioni le informazioni, vedi Verifica in corso Stato di 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 di eventi nel log di inoltro sia in esecuzione sulla replica. I valori possibili sono:

  • Yes
  • No
  • Connecting

Questa metrica registra il valore Slave_SQL_Running quando SHOW SLAVE STATUS viene eseguito sulla replica. Per ulteriori informazioni le informazioni, vedi Verifica in corso Stato di replica nel manuale di riferimento di MySQL.

Per controllare lo stato della replica:

Console

Cloud SQL segnala Replication State e Replication Lag metriche sulla predefinita Dashboard di monitoraggio di Cloud SQL.

Per visualizzare altre metriche per le repliche nella regione e tra regioni e repliche di server esterni, creare una dashboard personalizzata e aggiungere che desideri 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. In Tipo di risorsa, seleziona Database Cloud SQL.
  7. Esegui una delle seguenti operazioni:
    1. Per monitorare la metrica dello stato di replica: nella sezione Seleziona un 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 la metrica del tempo di replica: nella sezione Seleziona un Metrica, digita replica_lag. Il grafico mostra la quantità di tempo in cui lo stato della replica è indietro rispetto a quello della sua principale.
    3. Per monitorare lo stato del thread di I/O della replica: nel Nel campo Seleziona una metrica, digita Slave I/O thread running state. Quindi aggiungi un filtro per 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 Nel campo Seleziona una metrica, digita Slave SQL thread running state. Quindi aggiungi un filtro per state = "Yes". Il grafico mostra 1 se il thread è in esecuzione e 0 in caso contrario.

gcloud

Per un'istanza di 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 mysql

  1. Connettiti alla replica con un client MySQL.

    Per informazioni, vedi Connessione Opzioni per applicazioni esterne.

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

    Cerca le seguenti metriche nell'output del comando:

    • Master_Host: il nome dell'istanza principale.
    • Slave_IO_Running e Slave_SQL_Running: Indica se sono in esecuzione i thread I/O e SQL, rispettivamente. Questi i thread sono responsabili del trasferimento degli eventi dall'istanza principale log del relè della replica ed eseguendo questi eventi dal relè log. Il valore della metrica è Yes se il thread è in esecuzione. Affinché la replica sia in esecuzione, entrambi i thread devono attivo.
    • Seconds_Behind_Master: la quantità di tempo, in secondi, il ritardo della replica nell'elaborazione delle transazioni principali, ovvero la differenza tra (1) l'ora corrente e (2) l'ora originale il timestamp in cui il principale ha eseguito il commit della transazione attualmente applicato 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) il thread ha eventi di lettura fino a (Master_Log_file e Read_Master_Log_Pos) e che il thread SQL ha eseguiti fino a (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 degli eventi ricevuti dalle principali.

Per ulteriori dettagli sull'output di questo comando, consulta documentazione MySQL su Verifica in corso Stato di replica.

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 dei flag nella richiesta non è valido. Potrebbe essere una segnalazione fornito esplicitamente o uno impostato su un valore predefinito.

Innanzitutto, verifica che il valore del flag max_connections sia maggiore o uguale al valore dell'istanza principale.

Se il flag max_connections è impostato correttamente, ispeziona i log in Cloud Logging per trovare l'errore effettivo.

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 è: 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. 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.
L'istanza di 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 di replica per recuperare lo spazio di memoria temporaneo.

Replica interrotta. È stato raggiunto il limite massimo di spazio di archiviazione e l'archiviazione automatica L'aumento 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. Ritardo della replica si verifica quando il thread SQL su una replica non riesce a stare al passo thread IO. Alcuni tipi di query o carichi di lavoro possono causare problemi un ritardo di replica elevato permanente per un determinato schema. Alcuni dei tipici Le cause del ritardo di replica sono:
  • Query lente sulla replica. Trovale e correggile.
  • Tutte le tabelle devono avere una chiave univoca/primaria. Ogni aggiornamento su un senza una chiave univoca/primaria causa scansioni complete della tabella 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:

Il ritardo della replica aumenta improvvisamente. Ciò è causato da transazioni a lunga esecuzione. Quando una transazione (istruzione singola o più istruzioni) esegue il commit sull'istanza di origine, l'ora di inizio della transazione viene registrata nel log binario. Quando la replica riceve questo evento binlog, confronta il timestamp con il timestamp per calcolare il tempo di replica. Di conseguenza, una transazione a lunga esecuzione nell'origine comporterebbe un immediato ampio ritardo di replica replica. Se il numero di modifiche delle righe nella transazione è elevato, della replica impiegherebbe molto tempo per eseguirla. Durante questo periodo, di replicazione è in aumento. Al termine della replica transazione, il periodo di recupero dipende dal carico di lavoro di scrittura dell'origine e la velocità di elaborazione della replica.

Per evitare una transazione lunga, alcune possibili soluzioni includono:

  • Suddividi la transazione in più transazioni di piccola entità
  • 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. Per uno o più di questi flag è stato impostato un valore errato.

Nell'istanza principale in cui viene visualizzato il messaggio di errore, imposta il valore flag di replica parallela:

  1. Modifica i binlog_transaction_dependency_tracking e transaction_write_set_extractionsegnalazioni:
      .
    • 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 con il 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.

Passaggi successivi