In questa pagina viene descritto 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 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 disabilitare la replica, ad esempio per eseguire il debug o analizzare lo stato di un'istanza. Quando è tutto pronto, riabilita la replica esplicitamente. La disattivazione o la riattivazione della replica non comporta il riavvio dell'istanza di replica.
La disabilitazione della replica non arresta la replica, ma diventa un'istanza di sola lettura che non viene più replicata dalla sua istanza principale. L'istanza continuerà a esserti addebitata. Sulla replica disabilitata, puoi riabilitare la replica, eliminarla o promuoverla a istanza standalone.
Per disabilitare la replica:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza di replica facendo clic sul suo nome.
- Fai clic su Disabilita 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 al prompt della riga di comando, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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 è stata replicata da molto tempo, impiegherà più tempo per raggiungere l'istanza principale. In questo caso, elimina la replica e creane una nuova.
Per abilitare la replica:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza di replica facendo clic sul suo nome.
- Fai clic su Abilita replica.
- 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, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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 istanza autonoma di Cloud SQL principale con funzionalità di lettura e scrittura.
Una volta promosse, le repliche di lettura vengono configurate automaticamente con backup, ma non come istanze ad alta disponibilità (HA). Puoi abilitare l'alta disponibilità dopo aver promosso la replica come faresti per qualsiasi istanza non replica. La configurazione di una replica di lettura per l'alta disponibilità viene eseguita come per un'istanza principale. Scopri di più sulla configurazione dell'istanza per l'alta disponibilità.
Prima di promuovere una replica di lettura, se il client principale è ancora disponibile e gestisce i client, devi procedere nel seguente modo:
- Arresta tutte le scritture sull'istanza principale.
- Controlla lo stato di replica della replica (segui le istruzioni nella scheda Client mysql).
- Verifica che la replica sia in fase di replica, quindi attendi che il tempo di replica riportato dalla metrica
Seconds_Behind_Master
sia pari a 0.
In caso contrario, un'istanza appena promossa potrebbe non contenere alcune transazioni impegnate per l'istanza principale.
Per promuovere una replica a istanza autonoma:
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza di replica facendo clic sul suo 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 al prompt della riga di comando, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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, ottieni un token di accesso utilizzando il comando gcloud auth stampa-access-token. Puoi anche utilizzare 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, valuta la possibilità di configurare l'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 di una replica di lettura sono indietro rispetto agli aggiornamenti dell'istanza principale. Questa sezione descrive in che modo gli utenti possono abilitare la replica parallela, che può ridurre il tempo di 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 tempo di replica aumentando il numero di thread SQL che lavorano per eseguire queste transazioni. Le repliche di lettura con 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:
- In una replica di lettura, disabilita la replica.
- Nella replica di lettura, imposta i flag per la replica parallela. Utilizza il comando
gcloud
per impostare i flag. Se la replica è disabilitata, l'opzione della console Google Cloud è disabilitata. - Nella replica di lettura, abilita la replica.
- Facoltativamente, 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 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
impedisce lacune nella sequenza delle transazioni eseguite dal log di inoltro della replica.
L'impostazione
slave_preserve_commit_order=1
richiede quanto segue:
- Abilitazione dei log binari sulla replica (solo per MySQL 5.7, MySQL 8.0.18 e versione precedente)
- Imposto il
slave_parallel_type
suLOGICAL_CLOCK
Il flag slave_pending_jobs_size_max
imposta la memoria massima, in byte,
disponibile 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. Puoi utilizzare 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 questi link alla documentazione di MySQL 8.0:
- binlog_transaction_dependency_history_size
- binlog_transaction_dependency_tracking
- transaction_write_set_extraction
La modifica di questi flag non riavvia l'istanza principale.
La seguente tabella contiene gli intervalli consentiti e i valori predefiniti per questi flag:
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 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
).
Controlla lo stato della replica
Quando visualizzi un'istanza di replica mediante la console Google Cloud o accedi all'istanza utilizzando un client di amministrazione, ottieni informazioni dettagliate sulla replica, tra cui stato e metriche. Quando utilizzi gcloud CLI, ricevi un breve riepilogo della configurazione della replica.
Prima di controllare lo stato della 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 quelle non di replica.
Metrica | Descrizione |
---|---|
Stato di replica ( cloudsql.googleapis.com ) |
Indica se la replica sta trasmettendo flussi di log dall'istanza principale alla replica. I valori possibili sono:
Questa metrica indica |
Ritardo della replica ( cloudsql.googleapis.com ) |
Il periodo di tempo in cui lo stato della replica è in ritardo rispetto allo stato dell'istanza principale. Questa è la differenza tra (1) l'ora attuale e (2) il timestamp originale in cui l'istanza principale ha impegnato la transazione attualmente in corso di applicazione alla replica. In particolare, le scritture possono essere conteggiate come in ritardo anche se sono state ricevute dalla replica, se quest'ultima non ha ancora applicato la scrittura al database. Per le repliche a cascata, ogni coppia di replica principale viene monitorata separatamente e non esiste un'unica metrica che genera il ritardo end-to-end (da principale a replica). Questa metrica segnala il valore di |
Ritardo rete ( cloudsql.googleapis.com ) |
La quantità di tempo, in secondi, necessaria dalla scrittura del binlog nel database principale per raggiungere il thread di IO nella replica. Se il network_lag è zero o trascurabile, ma "replica_lag" è elevato, significa che il thread SQL non è in grado di applicare le modifiche di replica abbastanza velocemente. |
Stato di esecuzione del thread di I/O slave ( cloudsql.googleapis.com ) |
Indica se il thread di I/O per la lettura del log binario dell'istanza principale è in esecuzione sulla replica. I valori possibili sono:
Questa metrica segnala il valore di |
Stato di esecuzione del thread SQL slave ( cloudsql.googleapis.com ) |
Indica se il thread SQL per l'esecuzione di eventi nel log di inoltro è in esecuzione sulla replica. I valori possibili sono:
Questa metrica segnala il valore di |
Per controllare lo stato della replica:
Console
Cloud SQL registra le metriche Replication State
e Replication Lag
nella dashboard di monitoraggio predefinita di Cloud SQL.
Per visualizzare altre metriche per le repliche all'interno o tra regioni e le repliche di server esterni, crea una dashboard personalizzata e aggiungi le metriche da 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.
- In 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
. Quindi aggiungi un filtro perstate = "Running"
. Il grafico mostra 1 se la replica è in esecuzione e 0 in caso contrario. - Per monitorare la metrica del tempo di replica: nel campo Seleziona una metrica, digita
replica_lag
. Il grafico mostra il tempo di ritardo dello stato della replica rispetto a quello principale. - Per monitorare lo stato del thread di I/O della replica: nel campo Seleziona una metrica, digita
Slave I/O thread running state
. Quindi aggiungi un filtro perstate = "Yes"
. Il grafico mostra 1 se il thread è in esecuzione e 0 in caso contrario. - Per monitorare lo stato del thread SQL della replica: nel campo Seleziona una metrica, digita
Slave SQL thread running state
. Quindi aggiungi un filtro perstate = "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
- Connettiti alla replica con un client MySQL.
Per informazioni, consulta la pagina relativa alle opzioni di connessione per le applicazioni esterne.
- 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
,Slave_SQL_Running
: indica se sono in esecuzione i thread I/O e SQL, rispettivamente. Questi thread sono responsabili del trasferimento degli eventi dal log di inoltro principale al log della replica ed esecuzione di questi eventi dal log di inoltro. Il valore della metrica èYes
se il thread è in esecuzione. Affinché la replica sia attiva, entrambi i thread devono essere in esecuzione.Seconds_Behind_Master
: il tempo, in secondi, entro il quale la replica è in ritardo nell'elaborazione delle transazioni dell'istanza principale, ovvero la differenza tra (1) l'ora attuale e (2) il timestamp originale in cui l'istanza principale 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) che il thread di I/O ha letto eventi fino a (Master_Log_file
eRead_Master_Log_Pos
) e che il thread SQL ha eseguito eventi fino a (Relay_Master_Log_File
eExec_Master_Log_Pos
). Se sono uguali (ad es.Master_Log_file
è uguale aRelay_Master_Log_File
eRead_Master_Log_Pos
è uguale aExec_Master_Log_Pos
), la replica ha elaborato tutti gli eventi principali ricevuti dalla replica
Per ulteriori dettagli sull'output di questo comando, consulta la documentazione di MySQL sulla verifica dello stato della replica.
Risolvere i 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 un flag da te fornito esplicitamente o impostato su un valore predefinito.
Innanzitutto, verifica 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 è: |
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 le operazioni di lettura richieste
più spesso, il che può comportare l'utilizzo di 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'aumento automatico dello spazio di archiviazione non è abilitato.
Modifica l'istanza per abilitare |
Il ritardo della replica è costantemente elevato. | Il carico di scrittura è troppo elevato per essere gestito dalla replica. Il ritardo della replica si verifica quando il thread SQL su una replica non è in grado di stare al passo con il thread di IO. Alcuni tipi di query o carichi di lavoro possono causare un ritardo di replica temporaneo o permanente elevato per uno schema specifico. Alcune delle cause tipiche del ritardo della replica sono:
Ecco alcune possibili soluzioni:
|
Il ritardo della replica aumenta improvvisamente. | Ciò è causato da transazioni a lunga esecuzione. Quando viene eseguito il commit di una transazione (istruzione singola o più istruzioni) 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 attuale per calcolare il ritardo della replica. Di conseguenza, una transazione a lunga esecuzione
sull'origine comporterebbe un ritardo di replica immediato di un elevato livello sulla
replica. Se il numero di modifiche delle righe nella transazione è elevato, anche la replica impiegherà molto tempo per eseguirla. Durante questo periodo, il ritardo della replica è in aumento. Una volta che la replica termina questa transazione, il periodo di recupero dipende dal carico di lavoro di scrittura sull'origine e dalla velocità di elaborazione della replica.
Per evitare una transazione lunga, alcune possibili soluzioni sono:
|
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 i flag di replica parallela:
|
La creazione della replica non riesce con il timeout. | Le transazioni non impegnate a lunga esecuzione sull'istanza principale possono causare un errore nella creazione della replica di lettura.
Ricrea la replica dopo aver interrotto tutte le query in esecuzione. |
Passaggi successivi
- Scopri come creare una replica di lettura.
- Scopri di più sulle stored procedure di Cloud SQL per gli indici di replica di lettura.
- Scopri come configurare la configurazione di una replica esterna.
- Scopri come configurare una configurazione principale esterna.
- Scopri di più sui requisiti e sulle best practice per la replica.