Utilizza il ripristino di emergenza (RE) avanzato

In questa pagina viene descritto come utilizzare il disaster ripristino di emergenza (RE) avanzato. Il DR avanzato offre due funzionalità principali:

  • Il failover della replica consente di eseguire immediatamente il failover dell'istanza principale sulla replica di RE in caso di errore della regione.
  • Il cambio consente di invertire i ruoli dell'istanza principale e di una replica di RE senza perdita di dati. Puoi utilizzare lo switchover per ripristinare lo stato di deployment originale dopo il failover della replica o per testare il RE.

Il DR avanzato è supportato solo nelle istanze della versione Cloud SQL Enterprise Plus.

Prima di iniziare

Se prevedi di utilizzare Google Cloud SDK, devi utilizzare la versione 502.0.0 o successiva. Per controllare la versione di Google Cloud SDK, esegui gcloud --version. Per aggiornare Google Cloud SDK, esegui gcloud components update.

Per installare Google Cloud SDK, vedi Installa gcloud CLI.

Designa una replica RE

Per eseguire RE avanzato, devi prima designare una replica di RE tra regioni.

Requisiti dell'istanza principale

L'istanza principale deve essere un'istanza Cloud SQL Enterprise Plus e avere una replica di RE designata.

Devi abilitare il recupero point-in-time (PITR) sull'istanza principale. Per abilitare il PITR, consulta Utilizza il recupero point-in-time (PITR).

Se crei l'istanza Cloud SQL con un endpoint di scrittura DNS, l'istanza principale deve avere la stessa configurazione SSL della replica di RE designata prima di richiamare l'operazione di switchover o di failover della replica. Ad esempio, se configuri la replica di RE in modo da applicare la crittografia SSL, ma l'istanza principale consente connessioni non criptate, i client non potranno connettersi alla nuova istanza principale dopo il completamento dell'operazione di switchover o failover.

Requisiti della replica RE

La replica di lettura per il RE designata deve soddisfare i seguenti requisiti:

  • Deve essere un'istanza della versione Cloud SQL Enterprise Plus
  • Deve essere la stessa versione del database dell'istanza principale, con PostgreSQL 12 o versioni successive
  • Deve trovarsi in una regione diversa da quella dell'istanza principale

  • Deve essere una replica di lettura diretta; non può essere una replica a cascata

  • Se configurato con un flag che richiede che la replica abbia un valore maggiore o uguale a quello dell'istanza principale, il flag deve essere configurato con un valore uguale a quello dell'istanza principale. Tieni presente che, a seconda del tipo di macchina (livello) e delle dimensioni dell'istanza della replica di RE, i valori predefiniti possono essere diversi anche se non li hai impostati esplicitamente. Questi flag sono i seguenti:

    • max_connections
    • max_worker_processes
    • max_wal_senders
    • max_prepared_transactions
    • max_parallel_workers
    • max_locks_per_transaction
    • max_parallel_maintenance_workers
    • max_parallel_workers_per_gather
  • Devono archiviare i log delle transazioni utilizzati per il PITR in Cloud Storage

  • Non può essere una replica esterna

Suggerimenti per le repliche RE

Questa sezione fornisce suggerimenti per la replica RE. I seguenti consigli possono aiutarti a evitare problemi di prestazioni nel tuo deployment:

  • Utilizza le stesse dimensioni del disco dell'istanza principale o abilita la crescita automatica.
  • Utilizza una configurazione HA coerente. Se attivi l'alta affidabilità sull'istanza principale, attivala anche sulla replica di RE.
  • Utilizza una configurazione della cache dei dati coerente. Se abiliti la cache dei dati sull'istanza principale, abilitala anche sulla replica RE.
  • Configura i flag di database appropriati per la replica di RE prima e dopo qualsiasi operazione di cambio o failover della replica.
  • Utilizza lo stesso tipo di macchina (livello) e le stesse dimensioni sia per l'istanza principale sia per la replica di RE.

Crea una replica per soddisfare i requisiti di replica di RE

Se l'istanza principale non ha già una replica di lettura tra regioni che soddisfa i requisiti della replica di RE, creane una.

Console

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

    Vai a Istanze Cloud SQL

  2. Trova l'istanza principale.
  3. Nella colonna Azioni, fai clic sul menu Altre azioni.
  4. Seleziona Crea replica di lettura.
  5. Nel campo ID istanza, inserisci un nome per la replica di DR.
  6. Nel campo Versione database, viene selezionata la stessa versione principale dell'istanza principale.
  7. Nella sezione Scegli la disponibilità per regione e zona della pagina, segui questi passaggi:
    • Seleziona una regione _diversa_ da quella dell'istanza principale.
    • Facoltativo. Seleziona Più zone per la replica di RE.
    • Facoltativo. Seleziona le zone primaria e secondaria per la replica di RE.
  8. Nella sezione Personalizza l'istanza della pagina, puoi aggiornare le impostazioni della replica di RE. Per ulteriori dettagli su ciascuna impostazione, consulta la pagina Informazioni sulle impostazioni delle istanze.
  9. In Forme macchina, seleziona lo stesso tipo di macchina dell'istanza principale.
  10. In Flag, configura i flag richiesti per il tuo database.
  11. Fai clic su Crea replica.

Cloud SQL crea un backup dell'istanza principale e crea la replica. Verrà visualizzata nuovamente la pagina dell'istanza principale.

gcloud

Per creare una replica che soddisfi i requisiti di una replica di RE, esegui questo comando:

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --region=REPLICA_REGION_NAME \
   --database-version=DATABASE_VERSION \
   --tier=MACHINE_TYPE \
   --availability-type=AVAILABILITY_TYPE
   --edition="ENTERPRISE_PLUS"

Sostituisci le seguenti variabili:

  • REPLICA_NAME: il nome della replica RE.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • REPLICA_REGION_NAME: specifica una regione diversa da quella dell'istanza principale.
  • DATABASE_VERSION: specificare la stringa di versione che corrisponde alla versione principale e secondaria del database dell'istanza primaria, ad esempio POSTGRES_16.

    Le versioni principale e secondaria del database devono essere le stesse per la replica principale e quella di RE.

  • MACHINE_TYPE: specifica lo stesso tipo di macchina dell'istanza principale. Ti consigliamo di utilizzare un tipo di macchina corrispondente a quello dell'istanza principale.
  • AVAILABILITY_TYPE: se l'istanza principale è configurata per l'alta affidabilità, ti consigliamo di specificare REGIONAL per abilitare l'alta affidabilità.
  • EDITION: specifica ENTERPRISE_PLUS.

Terraform

Per creare una replica di RE, utilizza una risorsa Terraform.

resource "google_sql_database_instance" "original-primary" {
  name   = "postgres-original-primary-instance"
  region = "us-east1"
  # Specify a database version that supports Cloud SQL Enterprise Plus edition.
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"

  settings {
    # Specify a tier that supports Cloud SQL Enterprise Plus edition.
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      # You must enable automated backups and point-in-time-recovery (PITR).
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
}

resource "google_sql_database_instance" "dr-replica" {
  name = "postgres-dr-replica-instance"
  # DR replica must be in a different region than the region of the primary instance.
  region = "us-west2"
  # DR replica must be the same database version as the primary instance.
  database_version = "POSTGRES_12"
  instance_type    = "READ_REPLICA_INSTANCE"
  # Specify the primary instance as the master instance.
  master_instance_name = google_sql_database_instance.original-primary.name

  settings {
    # DR replica must be in the same tier as your primary instance and support Enterprise Plus edition.
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
  }

  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
}

REST v1

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • Stringa di versione DATABASE_VERSION: corrispondente alla versione del database dell'istanza principale, ad esempio POSTGRES_16. La versione del database deve essere la stessa sia per la replica principale che per quella di RE.
  • REPLICA_NAME: il nome dell'istanza di replica di RE che stai creando.
  • REPLICA_REGION: la regione dell'istanza di replica di RE. La regione della replica deve essere diversa da quella dell'istanza principale.
  • MACHINE_TYPE: specifica lo stesso tipo di macchina dell'istanza principale. Ti consigliamo di selezionare lo stesso tipo di macchina dell'istanza principale.
  • AVAILABILITY_TYPE: se l'istanza principale è configurata per l'alta affidabilità, ti consigliamo di specificare REGIONAL per abilitare l'alta affidabilità.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

Corpo JSON della richiesta:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "DATABASE_VERSION",
  "name": "REPLICA_NAME",
  "region": "REPLICA_REGION",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "replicationType": "ASYNCHRONOUS",
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • Stringa di versione DATABASE_VERSION: corrispondente alla versione del database dell'istanza principale, ad esempio POSTGRES_16. La versione del database deve essere la stessa sia per la replica principale che per quella di RE.
  • REPLICA_NAME: il nome dell'istanza di replica di RE che stai creando.
  • REPLICA_REGION: la regione dell'istanza di replica di RE. La regione della replica deve essere diversa da quella dell'istanza principale.
  • MACHINE_TYPE: specifica lo stesso tipo di macchina dell'istanza principale. Ti consigliamo di impostare una dimensione del disco corrispondente a quella dell'istanza principale.
  • AVAILABILITY_TYPE: se l'istanza principale è configurata per l'alta affidabilità, ti consigliamo di specificare REGIONAL per abilitare l'alta affidabilità.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

Corpo JSON della richiesta:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "DATABASE_VERSION",
  "name": "REPLICA_NAME",
  "region": "REPLICA_REGION",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "replicationType": "ASYNCHRONOUS",
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Designa la replica RE per l'istanza principale

Le seguenti procedure descrivono come designare una delle repliche tra regioni di un'istanza principale come replica RE per il cambio o il failover della replica.

Console

Per designare una replica RE per un'istanza principale, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova e seleziona l'istanza principale. Viene visualizzata la pagina Panoramica dell'istanza principale.
  3. Nel menu di navigazione, fai clic su Repliche.
  4. Nell'elenco delle repliche di lettura, trova la replica di lettura tra regioni che vuoi designare come replica per il RE.
  5. Per la replica, fai clic sul pulsante more_vert Azioni e seleziona Designa come RE DR.
  6. Fai clic su Conferma.

gcloud

Per designare una replica di RE per un'istanza principale, utilizza il seguente comando:

gcloud sql instances patch PRIMARY_INSTANCE_NAME \
   --failover-dr-replica-name=REPLICA_NAME

Sostituisci le seguenti variabili:

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • REPLICA_NAME: il nome della replica RE.

Terraform

Per designare una replica di RE per un'istanza principale, utilizza una risorsa Terraform.

data "google_project" "default" {
}

resource "google_sql_database_instance" "original-primary" {
  name             = "postgres-original-primary-instance"
  region           = "us-east1"
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"

  replication_cluster {
    # Designate the DR replica.
    # The format for setting the DR replica is `project-id:dr-replica-name`.
    failover_dr_replica_name = "${data.google_project.default.project_id}:postgres-dr-replica-instance"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

resource "google_sql_database_instance" "dr-replica" {
  name                 = "postgres-dr-replica-instance"
  region               = "us-west2"
  database_version     = "POSTGRES_12"
  instance_type        = "READ_REPLICA_INSTANCE"
  master_instance_name = google_sql_database_instance.original-primary.name

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
  }

  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

REST v1

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • REPLICA_NAME: il nome della replica RE.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Corpo JSON della richiesta:

{
  "replicationCluster": {
     "failoverDrReplicaName": "REPLICA_NAME"
   }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • REPLICA_NAME: il nome della replica RE.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Corpo JSON della richiesta:

{
  "replicationCluster": {
     "failoverDrReplicaName": "REPLICA_NAME"
   }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Modifica la designazione della replica RE

Se la replica soddisfa i requisiti, puoi designare un'altra replica come replica per RE. La replica RE precedente perde la designazione di replica RE.

Console

Per modificare la replica di RE per un'istanza principale, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova e seleziona l'istanza principale. Viene visualizzata la pagina Panoramica dell'istanza principale.
  3. Nel menu di navigazione, fai clic su Repliche.
  4. Nell'elenco delle repliche di lettura, individua la replica di lettura tra regioni che vuoi designare come nuova replica di RE.
  5. Per la replica, fai clic sul pulsante more_vert Azioni e seleziona Designa come RE DR.

gcloud

Per modificare la replica di RE, esegui di nuovo il comando designate e specifica una replica di RE diversa.

REST

Per modificare la replica di RE, effettua nuovamente la richiesta API designate e specifica una replica di RE diversa.

Visualizza la designazione della replica RE

Puoi verificare quale replica di RE è assegnata all'istanza principale utilizzando gcloud CLI o l'API Cloud SQL Admin. Puoi anche verificare se una replica è una replica di RE designata.

Per scoprire quale replica di RE è designata per un'istanza principale, utilizza la seguente procedura.

Console

Per scoprire quale replica di lettura è la replica di RE designata per un'istanza principale, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova e seleziona l'istanza principale. Viene visualizzata la pagina Panoramica dell'istanza principale.
  3. Nel menu di navigazione, fai clic su Repliche.
  4. Nell'elenco delle repliche di lettura, verifica che PostgreSQL disaster recovery replica venga visualizzato nella colonna Tipo per la replica di RE designata.

gcloud

Per scoprire quale istanza è la replica di RE designata di un'istanza principale, utilizza il seguente comando:

gcloud sql instances describe PRIMARY_INSTANCE_NAME

Sostituisci la seguente variabile:

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale

L'output di questo comando contiene il campo denominato failoverDrReplica, che identifica la replica di RE designata.

REST v1

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud che contiene l'istanza.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.

Metodo HTTP e URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud che contiene l'istanza.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.

Metodo HTTP e URL:

GET https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Per verificare se una replica è una replica di RE, utilizza una delle seguenti procedure.

Console

Per verificare se un'istanza di replica è una replica di RE, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova l'istanza di replica.
  3. Verifica che PostgreSQL disaster recovery replica venga visualizzato nella colonna Tipo per la replica di RE designata.

gcloud

Per verificare se un'istanza di replica è una replica di RE, esegui questo comando:

gcloud sql instances describe REPLICA_NAME

Sostituisci la seguente variabile:

  • REPLICA_NAME: il nome della replica di lettura che vuoi controllare

Se la replica è una replica di RE, l'output del comando contiene il campo drReplica=true.

REST v1

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud che contiene l'istanza.
  • REPLICA_NAME: il nome della replica.

Metodo HTTP e URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud che contiene l'istanza.
  • REPLICA_NAME: il nome della replica.

Metodo HTTP e URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Rimuovi la replica RE

Puoi cancellare la designazione della replica di RE da un'istanza principale. Tuttavia, se non è assegnata alcuna replica RE a un'istanza principale, non puoi eseguire il cambio o il failover della replica.

Console

Per rimuovere una replica per RE designata da un'istanza principale, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova e seleziona l'istanza principale. Viene visualizzata la pagina Panoramica dell'istanza principale.
  3. Nel menu di navigazione, fai clic su Repliche.
  4. Nell'elenco delle repliche di lettura, individua la replica di lettura tra regioni che vuoi rimuovere.
  5. Per la replica, fai clic sul pulsante more_vert Azioni e seleziona Rimuovi come RE DR.
  6. Fai clic su Conferma.

gcloud

Per rimuovere la designazione della replica di RE, esegui questo comando sull'istanza principale:

gcloud sql instances patch PRIMARY_INSTANCE_NAME \
  --clear-failover-dr-replica-name

Sostituisci la seguente variabile:

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale da cui vuoi rimuovere la replica di RE designata

REST v1

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • Imposta il campo failoverDrReplicaName su una stringa vuota.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Corpo JSON della richiesta:

{
  "replicationCluster": {
     "failoverDrReplicaName": ""
   }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • Imposta il campo failoverDrReplicaName su una stringa vuota.

Metodo HTTP e URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_NAME

Corpo JSON della richiesta:

{
  "replicationCluster": {
     "failoverDrReplicaName": ""
   }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Esegui un cambio

Dopo aver designato una replica RE, puoi eseguire l'operazione di cambio. Tuttavia, come best practice, evita di eseguire l'operazione di cambio nelle seguenti circostanze:

  • L'istanza principale è in uso attivo.
  • Sono in corso operazioni di amministrazione, come il backup automatico o l'attivazione o la disattivazione dell'alta affidabilità (HA).

Per evitare un timeout, valuta la possibilità di eseguire lo switchover quando il volume delle transazioni è basso.

Al termine dello switchover, l'operazione esegue un backup della nuova istanza principale (la precedente replica di RE) non appena viene promossa. Una volta completato il backup, il recupero point-in-time (PITR) viene abilitato completamente sulla nuova istanza principale. Il backup può richiedere da 5 a 15 minuti, a seconda delle dimensioni del disco. La copertura PITR inizia solo dopo il completamento di questo backup.

Per ridurre il tempo totale di cambio, Cloud SQL configura e attiva il PITR in un'operazione asincrona separata dopo il completamento del cambio. Per ulteriori informazioni sulle considerazioni relative all'utilizzo di PITR con RE avanzato, consulta Utilizza PITR con il DR avanzato.

Una volta completata l'operazione di cambio, noterai che la direzione della replica è invertita.

Dopo che la vecchia istanza principale è stata riconfigurata come replica di lettura, l'endpoint di scrittura DNS, che in precedenza veniva risolto nella vecchia istanza principale, viene risolto nella nuova istanza principale.

Se configuri la connettività in uscita di Private Service Connect sulla replica di disaster recovery (RE), dopo un'operazione di switchover, quando la replica di RE viene promossa a istanza principale, la connettività in uscita continua a funzionare sulla nuova istanza principale creata. Se non configuri la connettività in uscita sulla replica di disaster recovery (RE), per consentire al servizio di continuare a funzionare dopo le operazioni di switchover, devi abilitare la connettività in uscita di Private Service Connect sulla nuova istanza principale.

Prima di iniziare

Prima di eseguire l'operazione di switchover, segui questi passaggi:

  • Designa una RE DR. Puoi eseguire un cambio solo tra l'istanza principale e la replica di RE designata.
  • Verifica che l'istanza principale e la replica di RE siano online.
  • Assicurati che la replica di RE esegua la stessa versione del database dell'istanza principale, PostgreSQL 12 o versioni successive.
  • Assicurati che il PITR sia abilitato sull'istanza principale. Per abilitare il PITR, consulta Utilizza il recupero point-in-time (PITR).
  • Se utilizzi un endpoint di scrittura DNS, verifica che la configurazione SSL per l'istanza principale e la replica di RE siano uguali. Ad esempio, se la replica di RE è configurata per applicare la crittografia SSL, ma l'istanza principale consente connessioni non criptate, i client non potranno connettersi alla nuova istanza principale dopo il completamento dell'operazione di switchover.
  • Esegui un backup on demand dell'istanza principale. Questo backup è una precauzione nel caso in cui sia necessario eseguire il ripristino da eventuali errori imprevisti.

Esegui l'operazione di switchover

Console

Per eseguire l'operazione di switchover, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Trova la replica di RE designata dell'istanza principale.
  3. Fai clic sull'istanza di replica RE. Viene visualizzata la pagina Panoramica della replica di RE.
  4. Fai clic sul pulsante Cambio.
  5. Nella pagina Esegui il cambio tra la l&#RE;istanza principale e la replica di DR, inserisci il nome dell'istanza principale nel campo ID istanza.
  6. Fai clic su Cambio.

gcloud

Per eseguire l'operazione di switchover, esegui questo comando:

gcloud sql instances switchover REPLICA_NAME
   [--db-timeout=TIMEOUT_DURATION ]

Sostituisci le seguenti variabili:

  • REPLICA_NAME: il nome della replica di RE designata con cui vuoi che l'istanza principale scambi i ruoli.
  • TIMEOUT_DURATION: facoltativo. Il periodo di timeout per consentire il completamento delle operazioni del database sull'istanza.
  • Se non specifichi questo parametro, l'operazione di switchover include un timeout di 10 minuti.

    Puoi aumentare il valore di questo timeout specificando il parametro --db-timeout. Sostituisci TIMEOUT_DURATION con una durata del periodo di tempo fino a 24 ore, inclusa una notazione iniziale per il formato. Ad esempio, per 30 secondi, specifica 30s. Per 24 ore, specifica 24h. Puoi anche specificare unità frazionarie del periodo di tempo utilizzando decimali fino a 9 cifre. Ad esempio, per 30,5 minuti, specifica 30.5m.

    Se non hai operazioni in attesa, puoi ridurre il valore di questo timeout.

Terraform

Per avviare l'operazione di switchover, utilizza una risorsa Terraform. Per fare in modo che la replica di RE diventi la nuova istanza principale, utilizza il primo esempio. L'esempio contiene commenti per le modifiche alla configurazione di Terraform che devi apportare per cambiare l'istanza principale e la replica di RE.

#
# This sample provides the first part of the switchover operation and turns the DR replica
# into the new primary instance.
data "google_project" "default" {
}

resource "google_sql_database_instance" "original-primary" {
  name             = "postgres-original-primary-instance"
  region           = "us-east1"
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"

  replication_cluster {
    failover_dr_replica_name = "${data.google_project.default.project_id}:postgres-dr-replica-instance"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

resource "google_sql_database_instance" "dr-replica" {
  name             = "postgres-dr-replica-instance"
  region           = "us-west2"
  database_version = "POSTGRES_12"
  # Change the instance type from "READ_REPLICA_INSTANCE" to "CLOUD_SQL_INSTANCE".
  instance_type = "CLOUD_SQL_INSTANCE"
  # Remove or comment out the master_instance_name from the DR replica.
  # master_instance_name = google_sql_database_instance.original-primary.name
  # Add the original primary instance to a list of replicas for the new primary.
  replica_names = [google_sql_database_instance.original-primary.name]

  # Designate the original primary instance as the DR replica of the new primary instance.
  # The format for setting the DR replica is `project-id:dr-replica-name`.
  replication_cluster {
    failover_dr_replica_name = "${data.google_project.default.project_id}:${google_sql_database_instance.original-primary.name}"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      # Add a backup configuration section to enable automated backups and point-in-time-recovery (PITR) for the new primary instance.
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

Dopo aver apportato le modifiche, aggiorna la replica principale e quella di RE eseguendo terraform plan. Verifica che l'output includa Plan: 0 to add, 1 to change, 0 to destroy. Per eseguire lo switchover, esegui terraform apply.

A questo punto, l'istanza principale originale è una replica della nuova istanza principale. Tuttavia, questa modifica non si riflette automaticamente nello stato di Terraform. Per fare in modo che l'istanza principale originale sia una replica della nuova istanza principale nello stato Terraform, utilizza il secondo esempio. Il secondo esempio fornisce commenti che descrivono le modifiche da apportare dopo l'esecuzione del primo esempio.

# This sample provides the second part of the switchover operation and makes the original primary instance
# a replica of the new primary instance. After you run `terraform apply` for this sample, you'll see
# the following message:
#
# "No changes. Your infrastructure matches the configuration.
#
# Terraform has compared your real infrastructure against your configuration and found no differences,
# so no changes are needed.
#
# Apply complete! Resources: 0 added, 0 changed, 0 destroyed."
data "google_project" "default" {
}

resource "google_sql_database_instance" "original-primary" {
  name             = "postgres-original-primary-instance"
  region           = "us-east1"
  database_version = "POSTGRES_12"
  # Change instance type for the original primary from "CLOUD_SQL_INSTANCE" to "READ_REPLICA_INSTANCE".
  instance_type = "READ_REPLICA_INSTANCE"
  # Set master_instance_name to the the new primary instance, the old DR replica.
  master_instance_name = "postgres-dr-replica-instance"
  # replica_names = [] # If you previously defined a replica_names field in your template, then delete the DR replica
  # (new primary) from the list of replicas.  Don't delete the entire replica_names field.
  # Instead set the field to an empty string. For example, replica_names = [""].

  replication_cluster {
    # This instance no longer requires a designated DR replica since it's a replica.
    # Remove the DR replica designation by setting the field to an empty string.
    failover_dr_replica_name = ""
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      # Disable automated backups and PITR because this instance is now a replica.
      enabled                        = false
      point_in_time_recovery_enabled = false
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

resource "google_sql_database_instance" "dr-replica" {
  name             = "postgres-dr-replica-instance"
  region           = "us-west2"
  database_version = "POSTGRES_12"
  instance_type    = "CLOUD_SQL_INSTANCE"
  replica_names    = [google_sql_database_instance.original-primary.name]


  replication_cluster {
    failover_dr_replica_name = "${data.google_project.default.project_id}:${google_sql_database_instance.original-primary.name}"
  }

  settings {
    tier    = "db-perf-optimized-N-2"
    edition = "ENTERPRISE_PLUS"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
    }
  }
  # Set `deletion_protection` to true to ensure that one can't accidentally
  # delete this instance by use of Terraform whereas
  # `deletion_protection_enabled` flag protects this instance at the Google Cloud level.
  deletion_protection = false
  # Optional. Add more settings.
}

Se lo stato di Terraform viene aggiornato correttamente, quando esegui terraform plan sul secondo esempio, viene visualizzato un messaggio simile al seguente:

No changes. Your infrastructure matches the configuration.

Se esegui terraform apply, ricevi un messaggio simile al seguente:

Resources: 0 added, 0 changed, 0 destroyed.

REST v1

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

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud dell'istanza principale e della replica di RE.
  • REPLICA_NAME: il nome della replica RE.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • REPLICA_NAME: il nome della replica RE.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/switchover

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Esegui il DR richiamando un failover della replica

In caso di errore o emergenza in una regione, puoi eseguire RE richiamando un'operazione di failover della replica nella replica di RE designata. Per eseguire un failover della replica, promuovi la replica di RE designata. A differenza del cambio, la promozione della replica di RE è immediata.

Poiché la replica di RE assume immediatamente il ruolo dell'istanza principale, è possibile che non contenga tutti i dati della vecchia istanza principale a causa del ritardo della replica. Per questo motivo, un failover della replica può comportare la perdita di dati.

Nell'ambito del processo di promozione, il failover della replica esegue un backup della nuova istanza principale (la replica di RE precedente) subito dopo che la replica di RE diventa la nuova istanza principale. Una volta completato il backup, il recupero point-in-time (PITR) viene abilitato completamente sulla nuova istanza principale. Il completamento di questo backup può richiedere tra 5 e 15 minuti, a seconda delle dimensioni del disco della nuova (e della vecchia) istanza principale. Durante questo periodo di backup, la funzionalità PITR non è disponibile.

Per ridurre il tempo totale dell'operazione di failover della replica, Cloud SQL configura e abilita il PITR in un'operazione asincrona separata dopo il completamento dell'operazione di failover.

Quando l'istanza principale precedente torna online, il processo di failover della replica esegue un backup. Dopo l'esecuzione di questo backup, l'istanza principale precedente viene ricreata come replica di lettura della nuova istanza principale.

Per saperne di più sulle considerazioni relative all'utilizzo di PITR con RE avanzato, consulta Utilizza PITR con il DR avanzato.

Dopo aver richiamato l'operazione di failover della replica, l'endpoint di scrittura DNS, che in precedenza veniva risolto nell'istanza principale precedente, viene risolto nella nuova istanza principale.

Se configuri la connettività in uscita di Private Service Connect sulla replica di disaster recovery (RE), dopo le operazioni di failover della replica, quando la replica di RE viene promossa a istanza principale, la connettività in uscita continua a funzionare sulla nuova istanza principale creata. Se non configuri la connettività in uscita sulla replica di disaster recovery (RE), per consentire al servizio di continuare a funzionare dopo le operazioni di failover della replica, devi attivare la connettività in uscita di Private Service Connect sulla nuova istanza principale.

Prima di iniziare

Prima di poter eseguire il failover di una replica, segui questi passaggi:

  • Se non l'hai ancora fatto, designa una RE DR. Puoi eseguire un failover della replica solo tra l'istanza principale e la replica di RE designata.
  • Assicurati che la replica di RE sia online e integra.
  • Assicurati che la replica di RE esegua la stessa versione del database dell'istanza principale, PostgreSQL 12 o versioni successive.
  • Assicurati che il PITR sia abilitato nell'istanza principale. Per abilitare il PITR, consulta Utilizza il recupero point-in-time (PITR).

Esegui l'operazione di failover della replica

Console

Per eseguire l'operazione di failover della replica, segui questi passaggi:

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

    Vai a Istanze Cloud SQL

  2. Fai clic sull'istanza di replica di RE. Viene visualizzata la pagina Panoramica della replica di RE.
  3. Fai clic sul pulsante Replica failover.
  4. Nella pagina Esegui il failover della replica tra l&#RE;istanza principale e la replica di DR, inserisci il nome dell'istanza principale nel campo ID istanza per confermare che vuoi procedere con l'operazione.
  5. Per avviare il failover della replica, fai clic su Failover della replica.

gcloud

Per richiamare un failover della replica alla replica di RE, utilizza il seguente comando:

gcloud sql instances promote-replica \
   REPLICA_NAME --failover

Sostituisci la seguente variabile:

  • REPLICA_NAME: il nome della replica di RE

REST v1

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • REPLICA_NAME: il nome della replica RE.
  • ENABLE_REPLICA_FAILOVER: impostato su true per utilizzare il failover della replica. Se imposti false, l'API utilizza il metodo promoteReplica normale senza failover della replica.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

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

  • PROJECT_ID: l'ID o il numero del progetto Google Cloud dell'istanza principale e della replica di RE.
  • REPLICA_NAME: il nome della replica RE.
  • ENABLE_REPLICA_FAILOVER: impostato su true per utilizzare il failover della replica. Se imposti false, l'API utilizza il metodo promoteReplica normale senza failover della replica.

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_NAME/promoteReplica?failover=ENABLE_REPLICA_FAILOVER

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Controlla lo stato di un failover della replica

Il failover della replica avviene in due fasi. La prima fase è la promozione della replica di RE. La seconda fase è la ricreazione dell'istanza principale precedente come replica di lettura.

Per controllare lo stato del failover della replica, controlla lo stato di ogni fase.

  1. Controlla lo stato della prima fase.

    Console

    Per verificare se la replica di RE è stata promossa a un'istanza autonoma, segui questi passaggi:

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

      Vai a Istanze Cloud SQL

    2. Trova il nome della replica RE che hai promosso.
    3. Verifica che PostgreSQL VERSION venga visualizzato nella colonna Tipo per la nuova istanza principale.

    gcloud

    Puoi controllare lo stato eseguendo questo comando:

    gcloud sql instances describe DR_REPLICA_NAME

    Sostituisci la seguente variabile:

    • DR_REPLICA_NAME: il nome della replica di RE promossa

    Nell'output, verifica che venga visualizzato il seguente campo e che la replica sia diventata un'istanza principale Cloud SQL autonoma:

    instanceType: CLOUD_SQL_INSTANCE
    

  2. Per verificare il completamento della seconda fase, controlla il log delle operazioni nell'istanza per il messaggio RECONFIGURE_OLD_PRIMARY.

    La visualizzazione di questo messaggio dipende da quando la vecchia istanza principale torna online, il che può richiedere minuti o giorni in caso di un'emergenza.

    Per saperne di più su come controllare i log delle operazioni su un'istanza, consulta Visualizza i log delle istanze.

Utilizza il PITR con RE avanzato

Sia con lo switchover che con il failover della replica, non appena la replica di RE viene promossa a istanza principale, vengono apportate le seguenti modifiche per supportare il backup e il PITR:

  • La configurazione del backup, inclusa l'eventuale pianificazione del backup automatico, viene copiata dall'istanza principale precedente alla nuova istanza principale.
  • Viene eseguito un nuovo backup per supportare il PITR sulla nuova istanza principale.

  • Il criterio di conservazione del log delle transazioni viene copiato dalla vecchia istanza principale alla nuova istanza principale.

Per le policy di conservazione della configurazione di backup e del log delle transazioni, ti consigliamo di verificare che le impostazioni ereditate dalla vecchia istanza principale siano corrette per la nuova istanza principale.

Inizio della copertura PITR

Al termine dell'operazione di switchover, Cloud SQL pianifica i backup automatici ed esegue il primo backup della nuova istanza principale. Se vuoi che la copertura PITR inizi il prima possibile, ti consigliamo di verificare che il primo backup sia andato a buon fine. La nuova istanza principale promossa ha una copertura PITR solo dopo il completamento del primo backup automatico.

Per saperne di più su come visualizzare i backup disponibili per un'istanza, consulta Visualizza un elenco di backup.

Copertura PITR per le istanze durante lo switchover e il failover della replica

Quando un'istanza partecipa a un'operazione di switchover o di failover della replica, l'istanza trascorre del tempo come replica di lettura. Il PITR e il ripristino di un backup sono supportati durante il periodo di tempo in cui l'istanza è una replica di lettura e un'istanza principale.

Puoi eseguire il PITR a un momento precedente allo switchover, quando l'istanza era un'istanza principale. Per le operazioni di switchover e failover della replica, Cloud SQL avvia un backup best-effort per la nuova istanza principale non appena viene promossa. La funzionalità PITR viene attivata sull'istanza promossa solo dopo il completamento di questo backup. Il backup può richiedere da 5 a 15 minuti, a seconda delle dimensioni del disco.

Cloud SQL esegue l'attivazione del PITR in modo asincrono, dopo il completamento dell'operazione di switchover o di failover della replica, quindi non aumenta il tempo necessario per l'operazione.

Split-brain durante il failover della replica

È possibile che si verifichi uno split-brain quando l'istanza principale continua ad accettare scritture mentre una replica viene promossa utilizzando il failover della replica. Dopo la promozione della replica, quando l'istanza principale precedente è di nuovo disponibile, viene ricostruita come replica dell'istanza promossa e viene eseguito un backup finale. Questo backup può essere utilizzato per recuperare i dati split-brain che non sono stati scritti nella replica promossa.

Eliminazione di backup e log delle transazioni sulle repliche

Se un'istanza principale abilitata per il PITR e i backup diventa una replica di lettura, l'ultimo backup e la policy di conservazione del PITR del periodo in cui era un'istanza principale vengono conservati e applicati durante il periodo in cui è una replica. Anche se la nuova istanza principale non esegue backup, i backup precedenti e i log delle transazioni utilizzati per il PITR vengono eliminati nella replica di lettura in base all'ultima policy configurata.

Ad esempio, se l'istanza è configurata per avere backup automatici giornalieri e conservare 7 backup con 7 giorni di log PITR, quando questa istanza diventa una replica di lettura, tutto ciò che è più vecchio di 7 giorni viene eliminato una volta al giorno.

Se devi eliminare i backup prima, puoi rimuoverli manualmente. Per saperne di più, consulta Elimina un backup.

Suggerimenti per i Controlli di servizio VPC e RE avanzato

Se utilizzi i Controlli di servizio VPC, assicurati che i perimetri di servizio consentano le comunicazioni necessarie per tutte le operazioni di recupero, ad esempio le operazioni di recupero point-in-time (PITR), soprattutto quando utilizzi CMEK con chiavi in un progetto diverso.

Le operazioni di DR avanzate, come lo switchover e il failover della replica, possono abilitare o riconfigurare funzionalità come il PITR, che possono essere bloccate dai Controlli di servizio VPC se i perimetri di servizio non sono configurati correttamente per CMEK e l'accesso alle chiavi tra progetti.

  • Mantieni il progetto della chiave KMS nello stesso perimetro dell'istanza: come best practice, includi il progetto contenente la chiave KMS nello stesso perimetro dei Controlli di servizio VPC delle tue istanze Cloud SQL.
  • Utilizza un bridge del perimetro: come opzione secondaria (meno consigliata), puoi utilizzare un bridge del perimetro per connettere i progetti in perimetri diversi.
  • Test: utilizza la modalità dry run dei Controlli di servizio VPC per testare le procedure di RE (come lo switchover) e identificare potenziali violazioni dei Controlli di servizio VPC senza applicazione.

Per saperne di più, consulta Configura i Controlli di servizio VPC.

Limitazioni

  • Non puoi designare un'istanza di replica di lettura Cloud SQL Enterprise Plus come replica di RE se l'istanza principale archivia i log delle transazioni per il recupero point-in-time (PITR) sul disco. Per verificare dove un'istanza archivia i log per il PITR, consulta Controlla la località di archiviazione dei log delle transazioni utilizzati per il PITR.

  • Non puoi designare una replica esterna come replica per RE.

  • Terraform non è supportato per le operazioni di failover delle repliche.

Risoluzione dei problemi

Problema Risoluzione dei problemi
Operazione di switchover non riuscita.
  • Controlla il volume delle transazioni nel database. Se il volume delle transazioni è elevato, l'operazione potrebbe scadere. Prova a ripetere l'operazione quando il carico delle transazioni è inferiore.
L'operazione di switchover non è riuscita e l'istanza principale è bloccata in modalità di sola lettura. Esegui un riavvio del database per riportare l'istanza principale in modalità di scrittura.
L'operazione di switchover è stata completata, ma la console Google Cloud non mostra i nuovi ruoli invertiti per le istanze. Aggiorna il browser per visualizzare la topologia aggiornata.
Operazione di failover della replica non riuscita.
  • Se il failover alla replica di RE non è riuscito, esegui la promozione a una replica di lettura normale (non di RE).

Passaggi successivi