Questa pagina descrive come gestire le repliche di lettura. Queste operazioni includono l'attivazione e la disattivazione della replica, la promozione di una replica, la configurazione della replica parallela e il controllo dello stato della replica.
Per saperne di più 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 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 riattivazione della replica non riavvia l'istanza di replica.
La disattivazione della replica non arresta l'istanza di replica, che diventa un'istanza di sola lettura che non esegue più la replica dall'istanza principale. Continuerai a ricevere addebiti per l'istanza. Nella replica disattivata, puoi riattivare la replica, eliminare la replica o promuovere la replica a un'istanza autonoma.
Se disattivi la replica per un periodo di tempo prolungato, i requisiti di spazio di archiviazione su disco potrebbero aumentare. Ad esempio, la tua istanza potrebbe accumulare log transazionali per consentirti di riprendere la replica quando la riattivi. Per evitare di aumentare i requisiti di spazio di archiviazione su disco, anziché disattivare la replica per un periodo di tempo prolungato, valuta la possibilità di promuovere la replica o creare un clone dell'istanza primaria.
Per disattivare la replica:
Console
-
Nella console Google Cloud , vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza di replica facendo clic sul relativo 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 in un prompt della riga di comando, acquisisci 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 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 in un prompt della riga di comando, acquisisci 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 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, ci vorrà più tempo perché raggiunga l'istanza principale. In questo caso, elimina la replica e creane una nuova.
Per attivare la replica:
Console
-
Nella console Google Cloud , vai alla pagina Istanze Cloud SQL.
- Seleziona un'istanza di replica facendo clic sul relativo 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 in un prompt della riga di comando, acquisisci 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 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 in un prompt della riga di comando, acquisisci 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 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:
Promuovere una replica
Con la promozione di una replica di lettura, la replica viene interrotta e l'istanza convertita in un'istanza Cloud SQL principale autonoma con capacità di lettura e scrittura.
Quando vengono 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 proprio come faresti per qualsiasi istanza non di replica. La configurazione di una replica di lettura per l'alta disponibilità viene eseguita nello stesso modo dell'istanza principale. Scopri di più sulla configurazione dell'istanza per l'alta disponibilità.
Prima di promuovere una replica di lettura, se l'istanza primaria è ancora disponibile e serve i client, devi procedere nel seguente modo:
- Interrompi tutte le scritture nell'istanza primaria.
- Controlla lo stato della replica della replica (segui le istruzioni nella scheda Client mysql).
- Verifica che la replica sia in corso e attendi che il ritardo di replica segnalato dalla metrica
Seconds_Behind_Master
sia pari a 0.
In caso contrario, in un'istanza appena promossa potrebbero mancare alcune transazioni di cui è stato eseguito il commit nell'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 relativo 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 in un prompt della riga di comando, acquisisci un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Istanze:promuovi replica 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:
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 in un prompt della riga di comando, acquisisci un token di accesso utilizzando il comando gcloud auth print-access-token. Puoi anche utilizzare Explorer API nella pagina Istanze:promuovi replica 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:
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, valuta la possibilità di configurare l'istanza per l'alta disponibilità, se necessario.
Configura la replica parallela
La riduzione del ritardo di replica è importante per gestire le prestazioni della replica. Il ritardo della replica si verifica quando gli aggiornamenti di una replica di lettura sono in ritardo rispetto agli aggiornamenti dell'istanza principale. Questa sezione descrive come gli utenti possono attivare la replica parallela, che può ridurre il ritardo di replica.
Nella replica MySQL, un thread SQL di replica viene utilizzato per eseguire le transazioni raccolte nel log di relay sulla replica di lettura. La replica parallela riduce il ritardo di replica aumentando il numero di thread SQL che lavorano per eseguire queste transazioni. Le repliche di lettura con la replica parallela abilitata sono talvolta chiamate repliche multithread.
La replica parallela è disponibile in questi tre scenari in Cloud SQL per MySQL:
Per semplicità, questa pagina utilizza i termini "istanza primaria" e "replica di lettura".
Passaggi di base per modificare i flag di replica parallela
I passaggi per attivare la replica parallela sono i seguenti:
- Su 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. L'opzione della console Google Cloud è disattivata quando la replica è disattivata. - Nella replica di lettura, attiva la replica.
- Se vuoi, nell'istanza principale imposta i flag per ottimizzare il rendimento della 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:
- replica_parallel_workers
- replica_parallel_type
- replica_preserve_commit_order
- replica_pending_jobs_size_max
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:
- Abilitazione dei log binari sulla replica (solo per MySQL 5.7, MySQL 8.0.18 e versioni precedenti)
- Impostazione di
replica_parallel_type
suLOGICAL_CLOCK
Il flag replica_pending_jobs_size_max
imposta la memoria massima, in byte,
disponibile per le code di applicazione che contengono eventi non ancora applicati.
Istanza primaria: flag per la replica parallela
Cloud SQL per MySQL supporta diversi flag da utilizzare in un'istanza primaria. 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:
- binlog_transaction_dependency_history_size
- binlog_transaction_dependency_tracking
- transaction_write_set_extraction
La modifica di questi flag non riavvia l'istanza primaria.
La tabella seguente contiene gli intervalli consentiti e i valori predefiniti per questi flag:
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 (ritirato in MySQL 8.4) |
transaction_write_set_extraction |
OFF, MURMUR32, XXHASH64 |
OFF |
XXHASH64 |
n/a (ritirato 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 non OFF
(XXHASH64
o MURMUR32
).
Controllare lo stato della replica
Quando visualizzi un'istanza di replica utilizzando la console Google Cloud o accedi all'istanza utilizzando un client di amministrazione, ottieni dettagli sulla replica, inclusi stato e metriche. Quando utilizzi gcloud CLI, ricevi 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 di replica.
Per le istanze di replica sono disponibili le seguenti metriche. (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 attivamente i log dalla replica alla primaria. I valori possibili sono:
Questa metrica indica |
Ritardo della replica ( cloudsql.googleapis.com ) |
Il tempo di ritardo dello stato della replica rispetto allo stato dell'istanza principale. Si tratta della differenza tra (1) l'ora attuale e (2) il timestamp originale in cui il primario ha eseguito la transazione attualmente applicata alla replica. In particolare, le scritture potrebbero 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 primaria-replica viene monitorata separatamente e non esiste una singola metrica che fornisca il ritardo end-to-end (dalla primaria alla replica). Questa metrica indica il valore di |
Ritardo di rete ( cloudsql.googleapis.com ) |
La quantità di tempo, in secondi, che intercorre tra la scrittura del binlog nel database primario e il raggiungimento del thread I/O nella replica. Se network_lag è zero o trascurabile, ma `replica_lag` è elevato, significa 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 ) |
Indica se il thread I/O per la lettura del log binario dell'istanza principale è in esecuzione sulla replica. I valori possibili sono:
Questa metrica riporta il valore di |
Stato di esecuzione del thread SQL slave ( cloudsql.googleapis.com ) |
Indica se il thread SQL per l'esecuzione degli eventi nel log di relay è in esecuzione sulla replica. I valori possibili sono:
Questa metrica riporta il valore di |
Per controllare lo stato della replica:
Console
Cloud SQL riporta le metriche Replication State
e Replication Lag
nella
dashboard di monitoraggio di Cloud SQL predefinita.
Per visualizzare altre metriche per le repliche nella regione e tra regioni e per le repliche di server esterni, crea una dashboard personalizzata e aggiungi le metriche che vuoi monitorare:
-
Nella console Google Cloud , vai alla pagina Monitoring.
- Seleziona la scheda Dashboard.
- Fai clic su Crea dashboard.
- Assegna un nome alla dashboard e fai clic su OK.
- Fai clic su Aggiungi grafico.
- Per Tipo di risorsa, seleziona Database Cloud SQL.
- Esegui una delle seguenti operazioni:
- Per monitorare la metrica dello stato di replica: nel campo Seleziona una metrica, digita
Replication state
. Poi aggiungi un filtro perstate = "Running"
. Il grafico mostra 1 se la replica è in esecuzione e 0 in caso contrario. - Per monitorare la metrica Ritardo di replica: nel campo Seleziona una
metrica, digita
replica_lag
. Il grafico mostra la quantità di tempo in cui lo stato della replica è in ritardo rispetto a quello del relativo primario. - 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 sustate = "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
. Poi aggiungi un filtro sustate = "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 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, vedi Opzioni di connessione per applicazioni esterne.
- 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 dal log binario principale al log binario di replica e dell'esecuzione di questi eventi dal log binario di replica. 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
: la quantità di tempo, in secondi, di cui la replica è in ritardo 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 in fase di applicazione sulla 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 alle quali il thread I/O ha letto gli eventi (Master_Log_file
eRead_Master_Log_Pos
) e fino alle quali il thread SQL ha eseguito gli eventi (Relay_Master_Log_File
eExec_Master_Log_Pos
). Se sono uguali (ovveroMaster_Log_file
è uguale aRelay_Master_Log_File
eRead_Master_Log_Pos
è uguale aExec_Master_Log_Pos
), la replica ha elaborato tutti gli eventi ricevuti dal primario.
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 ha iniziato la replica al momento della creazione. | Probabilmente nei file di log è presente un errore più specifico. Ispeziona 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 trattarsi di un flag che hai
fornito esplicitamente o di uno impostato su un valore predefinito.
Innanzitutto, verifica che il valore del flag Se il flag |
Impossibile creare la replica di lettura. Errore sconosciuto. | Probabilmente nei file di log è presente un errore più specifico.
Ispeziona i log in
Cloud Logging per trovare l'errore effettivo.
Se l'errore è: |
Lo spazio sul disco è esaurito. | La dimensione del disco dell'istanza principale può esaurirsi durante la creazione della replica. Modifica l'istanza principale per eseguire 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 di frequente, il che può portare a un utilizzo di memoria superiore rispetto all'istanza principale.
Riavvia l'istanza di replica per recuperare lo spazio di memoria temporaneo. |
La replica è stata 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 di replica è costantemente elevato. | Il carico di scrittura è troppo elevato per la replica. Il ritardo di replica
si verifica quando il thread SQL su una replica non riesce a tenere il passo con il
thread I/O. Alcuni tipi di query o carichi di lavoro possono causare un ritardo di replica elevato temporaneo o permanente per un determinato schema. Alcune delle cause tipiche
del ritardo della replica sono:
Alcune possibili soluzioni includono:
|
Il ritardo della replica aumenta improvvisamente. | Ciò è dovuto a una o più transazioni a lunga esecuzione. Quando una transazione
(singola istruzione o più istruzioni) viene eseguita nell'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 corrente
per calcolare il ritardo di replica. Pertanto, una transazione a lunga esecuzione
sull'origine comporterebbe un ritardo di replica immediato e di grandi dimensioni sulla
replica. Se la quantità di modifiche alle righe nella transazione è elevata, anche la replica impiegherà molto tempo per eseguirla. Durante il periodo di tempo,
il ritardo della replica aumenta. Una volta completata questa transazione, il periodo di recupero dipenderà dal carico di lavoro di scrittura sull'origine e dalla velocità di elaborazione della replica.
Per evitare una transazione lunga, alcune possibili soluzioni includono:
|
La modifica dei flag di replica parallela genera un errore. | È stato 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:
|
La creazione della replica non riesce a causa del timeout. | Le transazioni non sottoposte a commit a esecuzione prolungata sull'istanza principale possono causare
la mancata 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 Cloud SQL per gli indici delle repliche di lettura.
- Scopri come configurare una configurazione di replica esterna.
- Scopri come configurare una configurazione principale esterna.
- Scopri di più sui requisiti e sulle best practice per la replica.