Creazione di repliche di lettura

Questa pagina descrive come creare una replica di lettura per un'istanza Cloud SQL.

Per configurare un'istanza Cloud SQL in modo che agisca come publisher per un abbonato esterno, consulta Configurare le repliche esterne.

Una replica di lettura è una copia dell'istanza principale che riflette le modifiche apportate all'istanza principale quasi in tempo reale, in circostanze normali. Puoi utilizzare una replica di lettura per scaricare le richieste di lettura o il traffico di analisi dall'istanza principale.

Inoltre, per il ripristino di emergenza, puoi eseguire una migrazione a livello di regione. Se una replica è una replica tra regioni, puoi eseguire il failover in un'altra regione. In particolare, puoi promuovere una replica a un'istanza autonoma (in questo caso, le repliche esistenti non considererebbero l'istanza come principale).

Per ulteriori informazioni sul funzionamento della replica, consulta Replica in Cloud SQL.

Prima di iniziare

Se stai creando la prima replica per questa istanza, assicurati che l'istanza soddisfi i requisiti per le istanze principali. Scopri di più.

Crea una replica di lettura

Puoi creare un massimo di 8 repliche di lettura per istanza principale.

Di seguito sono riportati i passaggi per creare una replica di lettura.

Console

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

    Vai a Istanze Cloud SQL

  2. Individua l'istanza per la quale vuoi creare una replica, quindi apri il menu more actions accanto alla scheda.
  3. Seleziona Crea replica di lettura.

    Se non vedi questa opzione, l'istanza è una replica; non puoi creare una replica di una replica.

  4. Nella sezione Personalizza la tua istanza, aggiorna le impostazioni per la replica. Per iniziare, fai clic su Mostra opzioni di configurazione per visualizzare i gruppi di impostazioni. Espandi i gruppi che vuoi esaminare e personalizza le impostazioni. A destra viene visualizzato un riepilogo di tutte le opzioni selezionate. La personalizzazione di queste impostazioni è facoltativa. I valori predefiniti vengono assegnati in tutti i casi in cui non vengono apportate personalizzazioni.

    Per ulteriori dettagli su ciascuna impostazione, consulta la pagina Informazioni sulle impostazioni delle istanze.

  5. Fai clic su Crea replica.

    Cloud SQL crea un backup, se necessario, e la replica. Tornerai alla pagina dell'istanza principale.

gcloud

Crea la replica:

gcloud sql instances create REPLICA_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME
  

Se necessario, puoi specificare una dimensione del livello diversa utilizzando il parametro --tier.

Puoi specificare una regione diversa utilizzando il parametro --region.

Se l'istanza principale ha solo un indirizzo IP interno, aggiungi il parametro --no-assign-ip al comando.

Puoi aggiungere altri parametri per altre impostazioni dell'istanza. Per saperne di più, consulta gcloud sql instances create.

Devi creare la replica nella stessa rete VPC dell'istanza principale. Puoi anche specificare un allocated-ip-range-name in quella rete VPC. Se non viene specificato alcun intervallo, la replica viene creata in un intervallo casuale.

Terraform

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

resource "google_sql_database_instance" "read_replica" {
  name                 = "sqlserver-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "SQLSERVER_2019_ENTERPRISE"
  root_password        = "INSERT-PASSWORD-HERE"
  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

REST v1beta4

Utilizza il metodo insert della risorsa instances per creare la replica di lettura. Le proprietà region e databaseVersion devono essere uguali a quelle del master.

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

  • project-id: l'ID progetto
  • database-version: stringa della versione dell'enum (ad es. SQLSERVER_2017_ENTERPRISE)
  • primary-instance-name: il nome dell'istanza principale
  • primary-instance-region: la regione dell'istanza principale
  • replica-region: la regione dell'istanza di replica
  • replica-name: il nome dell'istanza replica
  • machine-type: stringa enum del tipo di macchina. Ad esempio: "db-custom-1-3840"

Metodo HTTP e URL:

POST https://sqladmin.googleapis.com/sql/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",
    "settingsVersion": 0,
    
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Crea una replica di lettura di un'istanza con Private Service Connect abilitato

Per creare una replica di lettura di un'istanza con Private Service Connect abilitato, utilizza gcloud CLI o l'API. Puoi creare questa replica nella stessa regione o in una regione diversa dall'istanza principale (replica di lettura tra regioni).

La replica di lettura non può essere replicata da un'istanza con un tipo di connettività diverso. Ad esempio, un'istanza con Private Service Connect abilitato può eseguire la replica solo da un'altra istanza Private Service Connect. Inoltre, non è possibile eseguire la replica da un'istanza che supporta connessioni IP esterne o da un'istanza configurata con l'accesso ai servizi privati.

gcloud

Per creare una replica di lettura di un'istanza, utilizza il comando gcloud sql instances create:

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

Apporta le seguenti sostituzioni:

  • REPLICA_INSTANCE_NAME: il nome dell'istanza replica.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • REGION_NAME: il nome della regione per l'istanza replica.
  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.

    Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, crea una zona DNS e un record DNS per le repliche.

  • AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita la disponibilità elevata ed è consigliato per le istanze di produzione. Viene eseguito il failover dell'istanza in un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.

REST v1

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • REPLICA_INSTANCE_NAME: il nome dell'istanza replica.
  • REGION_NAME: il nome della regione per l'istanza replica.
  • MACHINE_TYPE: il tipo di macchina per l'istanza.
  • AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita la disponibilità elevata ed è consigliato per le istanze di produzione. Viene eseguito il failover dell'istanza in un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.

  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.

    Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, devi creare una zona DNS e un record DNS per le repliche.

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": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza.
  • REPLICA_INSTANCE_NAME: il nome dell'istanza replica.
  • REGION_NAME: il nome della regione per l'istanza replica.
  • MACHINE_TYPE: il tipo di macchina per l'istanza.
  • AVAILABILITY_TYPE: abilita l'alta disponibilità per l'istanza. Per questo parametro, specifica uno dei seguenti valori:
    • REGIONAL: abilita la disponibilità elevata ed è consigliato per le istanze di produzione. Viene eseguito il failover dell'istanza in un'altra zona all'interno della regione selezionata.
    • ZONAL: non forniscono funzionalità di failover. Questo è il valore predefinito.

    Per ulteriori informazioni su come impostare e rimuovere l'alta disponibilità per le istanze, consulta Configurare un'istanza esistente per l'alta disponibilità e Disattivare l'alta disponibilità per un'istanza.

  • ALLOWED_PROJECTS: un elenco di ID o numeri di progetto consentiti, separati da virgole. Se un progetto non è incluso in questo elenco, non puoi utilizzarlo per creare un'istanza e abilitare Private Service Connect.

    Cloud SQL non copia i progetti consentiti per l'istanza principale nella replica. Per ogni replica, devi creare un endpoint Private Service Connect. Se utilizzi il proxy di autenticazione Cloud SQL o i connettori dei linguaggi di Cloud SQL, devi creare una zona DNS e un record DNS per le repliche.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "SQLSERVER_2019_STANDARD",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Creare repliche a cascata

Questa sezione descrive come creare e gestire le repliche con struttura a cascata.

Per informazioni sul funzionamento delle repliche a cascata, consulta Repliche a cascata.

Prima di iniziare

L'istanza principale deve avere una replica con gerarchia. La sezione seguente illustra i passaggi per creare una replica con struttura a cascata.

Passaggi per creare una replica a cascata

Quando crei una replica con struttura a cascata, devi creare la replica in una regione diversa dall'istanza principale. Per configurare una replica a cascata, imposta il flag cascadable-replica.

gcloud

Crea la nuova replica specificando l'istanza principale utilizzando il flag --master-instance-name e il flag --cascadable-replica:

gcloud sql instances create REPLICA_NAME \
   --master-instance-name=PRIMARY_INSTANCE_NAME \
   --cascadable-replica \
   --region=REGION

Sostituisci quanto segue:

  • REPLICA_NAME: l'ID univoco della replica che stai creando.
  • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
  • REGION: la regione in cui vuoi creare la nuova replica. Questa regione deve essere diversa dalla regione dell'istanza principale.

Devi creare la replica nella stessa rete VPC dell'istanza principale. Puoi anche specificare il nome di un intervallo IP allocato nella rete VPC. Se non viene specificato alcun intervallo, la replica viene creata in un intervallo casuale.

Puoi aggiungere altri parametri per altre impostazioni dell'istanza. Ad esempio,

  • Puoi specificare una dimensione del livello della macchina diversa utilizzando il parametro --tier.
  • Se l'istanza principale ha solo un indirizzo IP privato, aggiungi il parametro --no-assign-ip al comando.

Per ulteriori informazioni sull'aggiunta di parametri per le impostazioni dell'istanza, consulta gcloud sql instances create.

Dopo aver creato la replica con possibilità di replica, puoi creare una replica a cascata.

curl

  1. Per creare una replica con struttura a cascata nell'istanza principale, modifica il seguente esempio di codice JSON e salvalo in un file denominato request.json.

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

    • PROJECT_ID: l'ID progetto.
    • DATABASE_VERSION: stringa enum della versione del database. Ad esempio, SQLSERVER_2017_ENTERPRISE.
    • PRIMARY_INSTANCE_NAME: il nome dell'istanza principale.
    • PRIMARY_INSTANCE_REGION: la regione dell'istanza principale.
    • REPLICA_REGION: la regione dell'istanza di replica.
    • REPLICA_NAME: il nome dell'istanza replica.
    • MACHINE_TYPE: stringa enum del tipo di macchina. Ad esempio, db-custom-2-3840.
    {
      "masterInstanceName": "PRIMARY_INSTANCE_NAME",
      "project": "PROJECT_ID",
      "databaseVersion": "DATABASE_VERSION"
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
          "settingsVersion": 0,
        }
        "replicaConfiguration":
        {
         "cascadableReplica": true
        }
    }
  2. Nella sezione replicaConfiguration, assicurati che il campo cascadadableReplica sia impostato su true.
  3. Esegui questo comando:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Dopo aver creato la replica con possibilità di replica, puoi creare una replica a cascata.

Passaggi per creare una replica a cascata

Quando crei una replica a cascata, devi crearla nella stessa regione della replica con possibilità di replica. Configura una replica a cascata fornendo il nome della replica a cascata nel parametro –master-instance-name.

Console

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

    Vai a Istanze Cloud SQL

  2. Fai clic sulla scheda Repliche per la replica che fungerà da principale per la replica che vuoi creare.
  3. Fai clic su Crea replica.
  4. Nella pagina Crea replica di lettura, aggiorna l'ID istanza e qualsiasi altra opzione di configurazione, inclusi il nome, la regione e la zona.
  5. Fai clic su Crea.

    Cloud SQL crea una replica. Tornerai alla pagina dell'istanza per la replica principale.

  6. Segui i passaggi 4-6 per ogni nuova replica con struttura a cascata da creare.

gcloud

  1. Crea la nuova replica specificando l'istanza di replica con gerarchia nel flag --master-instance-name:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=CASCADABLE_REPLICA_NAME \
    Sostituisci quanto segue:
    • REPLICA_NAME: l'ID univoco della replica che stai creando
    • CASCADABLE_REPLICA_NAME: il nome della replica con struttura a cascata
  3. Dopo aver creato la replica a cascata, puoi vedere che le modifiche apportate all'istanza principale vengono replicate in tutte le repliche della catena di repliche a cascata.

curl

  1. Per creare una replica a cascata sotto la replica con possibilità di gerarchizzazione, modifica il seguente esempio di codice JSON e salvalo in un file denominato request.json:
    {
      "masterInstanceName": "CASCADABLE_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. Esegui questo comando:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

Risoluzione dei problemi

Problema Risoluzione dei problemi
La replica di lettura non è stata avviata al momento della creazione. Probabilmente è presente un errore più specifico nei file di log. Esamina i log in Cloud Logging per trovare l'errore effettivo.
Impossibile creare la replica di lettura: errore invalidFlagValue. Uno degli indicatori nella richiesta non è valido. Potrebbe trattarsi di un flag fornito esplicitamente o di un flag impostato su un valore predefinito.

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

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

Impossibile creare la replica di lettura - errore sconosciuto. Probabilmente è presente un errore più specifico nei file di log. Esamina i log in Cloud Logging per trovare l'errore effettivo.

Se l'errore è: set Service Networking service account as servicenetworking.serviceAgent role on consumer project, disattiva e riattiva Service Networking API. Questa azione crea il account di servizio necessario per continuare con la procedura.

Lo spazio sul disco è esaurito. Le dimensioni del disco dell'istanza principale possono esaurirsi durante la creazione della replica. Modifica l'istanza principale per eseguirne l'upgrade a una dimensione del disco maggiore.
L'istanza replica utilizza troppa memoria. La replica utilizza memoria temporanea per memorizzare nella cache le operazioni di lettura spesso richieste, il che può portare a utilizzare più memoria dell'istanza principale.

Riavvia l'istanza replica per recuperare lo spazio di memoria temporaneo.

La replica è stata interrotta. È stato raggiunto il limite di spazio di archiviazione massimo e l'aumento automatico dello spazio di archiviazione non è abilitato.

Modifica l'istanza per attivare automatic storage increase.

Il ritardo nella replica è costantemente elevato. Il carico di scrittura è troppo elevato per la replica. Il ritardo nella replica si verifica quando il thread SQL su una replica non è in grado di stare al passo con il thread I/O. Alcuni tipi di query o carichi di lavoro possono causare un ritardo elevato della replica temporaneo o permanente per un determinato schema. Ecco alcune delle cause più comuni del ritardo nella replica:
  • Query lente sulla replica. Trovarli e risolverli.
  • Query come DELETE ... WHERE field < 50000000 causano un ritardo nella replica con la replica basata su righe, poiché un numero enorme di aggiornamenti si accumula nella replica.

Ecco alcune possibili soluzioni:

  • Modifica l'istanza per aumentare le dimensioni della replica.
  • Riduci il carico sul database.
  • Invia il traffico di lettura alla replica di lettura.
  • Indicizza le tabelle.
  • Identifica e correggi le query di scrittura lente.
  • Ricrea la replica.
La creazione della replica non riesce a causa di un timeout. Le transazioni non committate di lunga durata nell'istanza principale possono causare il fallimento della creazione della replica di lettura.

Ricrea la replica dopo aver interrotto tutte le query in esecuzione.

Passaggi successivi