Créer des instances dupliquées avec accès en lecture

Cette page vous explique comment créer une instance dupliquée avec accès en lecture pour une instance Cloud SQL.

Pour configurer une instance Cloud SQL qui agira en tant qu'éditeur pour un abonné externe, consultez la section Configurer des instances dupliquées externes.

Une instance dupliquée avec accès en lecture est une copie de l'instance principale qui reflète quasiment en temps réel les modifications apportées à l'instance principale, dans des circonstances normales. Vous pouvez utiliser une instance dupliquée avec accès en lecture pour décharger l'instance principale des requêtes de lecture ou du trafic d'analyse.

En outre, pour la reprise après sinistre, vous pouvez procéder à une migration régionale. Si une instance dupliquée est une Instance dupliquée interrégionale, vous pouvez effectuer un basculement vers une autre région. Plus précisément, vous pouvez promouvoir une instance dupliquée en instance autonome (dans ce cas, les instances dupliquées existantes ne considéreront pas cette instance comme principale).

Pour en savoir plus sur le fonctionnement de la réplication, consultez la page Réplication dans Cloud SQL.

Avant de commencer

Si vous créez la première instance dupliquée pour cette instance, assurez-vous qu'elle répond aux exigences des instances principales. En savoir plus

Créer une instance dupliquée avec accès en lecture

Vous pouvez créer jusqu'à 8 instances dupliquées avec accès en lecture par instance principale.

La procédure de création d'une instance dupliquée avec accès en lecture est décrite ci-dessous.

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Recherchez l'instance pour laquelle vous souhaitez créer une instance répliquée, puis ouvrez le menu more actions à côté de la liste.
  3. Sélectionnez Créer une instance dupliquée avec accès en lecture.

    Si cette option ne s'affiche pas, cela signifie que l'instance a déjà été dupliquée. Vous ne pouvez pas dupliquer une instance dupliquée.

  4. Dans la section Personnaliser votre instance, mettez à jour les paramètres de votre instance dupliquée. Commencez par cliquer sur Afficher les options de configuration pour afficher les groupes de paramètres. Développez ensuite les groupes souhaités pour examiner et personnaliser les paramètres. Un résumé de toutes les options sélectionnées s'affiche à droite. La personnalisation de ces paramètres est facultative. Des valeurs par défaut sont attribuées chaque fois qu'aucune personnalisation n'est effectuée.

    Pour en savoir plus sur chaque paramètre, consultez la page Paramètres des instances.

  5. Cliquez sur Créer une instance répliquée.

    Cloud SQL crée une sauvegarde si nécessaire et génère l'instance dupliquée. Vous revenez à la page de l'instance principale.

gcloud

Créez l'instance dupliquée.

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

Si nécessaire, vous pouvez spécifier un niveau différent à l'aide du paramètre --tier.

Vous pouvez spécifier une autre région à l'aide du paramètre --region.

Si l'instance principale ne dispose que d'une adresse IP interne, ajoutez le paramètre --no-assign-ip à la commande.

Vous pouvez ajouter d'autres paramètres d'instance. Pour en savoir plus, consultez la documentation sur la commande gcloud sql instances create.

Vous devez créer l'instance dupliquée sur le même réseau VPC que l'instance principale. Vous pouvez également spécifier une plage allocated-ip-range-name dans ce réseau VPC. Si aucune plage n'est spécifiée, l'instance dupliquée est créée dans une plage aléatoire.

Terraform

Pour créer une instance dupliquée avec accès en lecture, utilisez une ressource 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

Utilisez la méthode insert de la ressource des instances pour créer l'instance dupliquée avec accès en lecture. Les propriétés "region" et "databaseVersion" doivent être identiques à celles de l'instance maître.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • database-version : chaîne de version Enum (par exemple, SQLSERVER_2017_ENTERPRISE)
  • primary-instance-name : nom de l'instance principale
  • primary-instance-region : région de l'instance principale
  • replica-region : région de l'instance dupliquée
  • replica-name : nom de l'instance dupliquée
  • machine-type : chaîne d'énumération du type de machine Exemple : "db-custom-1-3840"

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

Corps JSON de la requête :

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Créer une instance répliquée avec accès en lecture pour une instance avec Private Service Connect activé

gcloud CLI ou l'API. Vous pouvez créer cette instance répliquée dans la même région ou dans une région différente de celle de l'instance principale (instance répliquée interrégionale avec accès en lecture).

L'instance répliquée avec accès en lecture ne peut pas être répliquée à partir d'une instance avec un type de connectivité différent. Par exemple, une instance pour laquelle Private Service Connect est activé ne peut être répliquée qu'à partir d'une autre instance Private Service Connect. Elle ne peut pas non plus être répliquée à partir d'une instance compatible avec les connexions IP externes, ou à partir d'une instance configurée avec l'accès aux services privés.

gcloud

Pour créer une instance répliquée avec accès en lecture pour une instance, utilisez la commande 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

Effectuez les remplacements suivants :

  • REPLICA_INSTANCE_NAME : nom de l'instance répliquée.
  • PRIMARY_INSTANCE_NAME : nom de l'instance principale.
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • REGION_NAME : nom de la région pour l'instance répliquée.
  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas l'utiliser pour créer une instance sur laquelle activer Private Service Connect.

    Cloud SQL ne copie pas les projets autorisés pour l'instance principale sur l'instance répliquée. Pour chaque instance répliquée, vous devez créer un point de terminaison Private Service Connect. Si vous utilisez le proxy d'authentification Cloud SQL ou les connecteurs de langage Cloud SQL, vous devez créer une zone DNS et un enregistrement DNS pour les instances répliquées.

  • AVAILABILITY_TYPE : permet d'activer la haute disponibilité pour l'instance. Pour ce paramètre, spécifiez l'une des valeurs suivantes :
    • REGIONAL : permet d'activer la haute disponibilité (recommandé pour les instances de production). L'instance bascule vers une autre zone dans la région sélectionnée.
    • ZONAL : n'offre aucune fonctionnalité de basculement. Il s'agit de la valeur par défaut.

    Pour en savoir plus sur la définition et la suppression de la haute disponibilité pour les instances, consultez les sections Configurer la haute disponibilité d'une instance existante et Désactiver la haute disponibilité pour une instance.

REST v1

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PRIMARY_INSTANCE_NAME : nom de l'instance principale.
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • REPLICA_INSTANCE_NAME : nom de l'instance répliquée.
  • REGION_NAME : nom de la région pour l'instance répliquée.
  • MACHINE_TYPE : type de machine de l'instance.
  • AVAILABILITY_TYPE : permet d'activer la haute disponibilité pour l'instance. Pour ce paramètre, spécifiez l'une des valeurs suivantes :
    • REGIONAL : permet d'activer la haute disponibilité (recommandé pour les instances de production). L'instance bascule vers une autre zone dans la région sélectionnée.
    • ZONAL : n'offre aucune fonctionnalité de basculement. Il s'agit de la valeur par défaut.

    Pour en savoir plus sur la définition et la suppression de la haute disponibilité pour les instances, consultez les sections Configurer la haute disponibilité d'une instance existante et Désactiver la haute disponibilité pour une instance.

  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas l'utiliser pour créer une instance sur laquelle activer Private Service Connect.

    Cloud SQL ne copie pas les projets autorisés pour l'instance principale sur l'instance répliquée. Pour chaque instance répliquée, vous devez créer un point de terminaison Private Service Connect. Si vous utilisez le proxy d'authentification Cloud SQL ou les connecteurs de langage Cloud SQL, vous devez créer une zone DNS et un enregistrement DNS pour les instances répliquées.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "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"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PRIMARY_INSTANCE_NAME : nom de l'instance principale.
  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • REPLICA_INSTANCE_NAME : nom de l'instance répliquée.
  • REGION_NAME : nom de la région pour l'instance répliquée.
  • MACHINE_TYPE : type de machine de l'instance.
  • AVAILABILITY_TYPE : permet d'activer la haute disponibilité pour l'instance. Pour ce paramètre, spécifiez l'une des valeurs suivantes :
    • REGIONAL : permet d'activer la haute disponibilité (recommandé pour les instances de production). L'instance bascule vers une autre zone dans la région sélectionnée.
    • ZONAL : n'offre aucune fonctionnalité de basculement. Il s'agit de la valeur par défaut.

    Pour en savoir plus sur la définition et la suppression de la haute disponibilité pour les instances, consultez les sections Configurer la haute disponibilité d'une instance existante et Désactiver la haute disponibilité pour une instance.

  • ALLOWED_PROJECTS : liste d'ID ou de numéros de projet autorisés, séparés par une virgule. Si un projet ne figure pas dans cette liste, vous ne pouvez pas l'utiliser pour créer une instance sur laquelle activer Private Service Connect.

    Cloud SQL ne copie pas les projets autorisés pour l'instance principale sur l'instance répliquée. Pour chaque instance répliquée, vous devez créer un point de terminaison Private Service Connect. Si vous utilisez le proxy d'authentification Cloud SQL ou les connecteurs de langage Cloud SQL, vous devez créer une zone DNS et un enregistrement DNS pour les instances répliquées.

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "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"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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"
}

Créer des instances répliquées en cascade

Cette section explique comment créer et gérer des instances répliquées en cascade.

Pour en savoir plus sur le fonctionnement des instances répliquées en cascade, consultez la section Instances répliquées en cascade.

Avant de commencer

L'instance principale doit disposer d'une instance répliquée pour cascade. La section suivante décrit la procédure à suivre pour créer une instance répliquée pour cascade.

Étapes de création d'une instance répliquée pour cascade

Lorsque vous créez une instance répliquée pour cascade, vous devez la créer dans une région différente de celle de l'instance principale. Pour configurer une instance répliquée pour cascade, définissez l'option cascadable-replica.

gcloud

Créez l'instance répliquée en spécifiant l'instance principale à l'aide de l'option --master-instance-name et en utilisant l'option --cascadable-replica:

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

Remplacez les éléments suivants :

  • REPLICA_NAME : ID unique de l'instance répliquée que vous créez.
  • PRIMARY_INSTANCE_NAME : nom de l'instance principale.
  • REGION: région dans laquelle vous souhaitez créer l'instance répliquée. Cette région doit être différente de celle de l'instance principale.

Vous devez créer l'instance répliquée sur le même réseau VPC que l'instance principale. Vous pouvez également spécifier un nom de plage d'adresses IP allouée dans ce réseau VPC. Si aucune plage n'est spécifiée, l'instance répliquée est créée dans une plage aléatoire.

Vous pouvez ajouter d'autres paramètres d'instance. Exemple :

  • Vous pouvez spécifier une autre taille de niveau de machine à l'aide du paramètre --tier.
  • Si l'instance principale ne dispose que d'une adresse IP privée, ajoutez le paramètre --no-assign-ip à la commande.

Pour en savoir plus sur l'ajout de paramètres pour les paramètres d'instance, consultez gcloud sql instances create.

Une fois l'instance répliquée pour cascade créée, vous pouvez créer une instance répliquée en cascade.

curl

  1. Pour créer une instance répliquée pour cascade sous l'instance principale, modifiez l'exemple de code JSON suivant et enregistrez-le dans un fichier nommé request.json.

    Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

    • PROJECT_ID : ID du projet.
    • DATABASE_VERSION : chaîne d'énumération de la version de base de données. Par exemple, SQLSERVER_2017_ENTERPRISE..
    • PRIMARY_INSTANCE_NAME : nom de l'instance principale.
    • PRIMARY_INSTANCE_REGION : région de l'instance principale.
    • REPLICA_REGION : région de l'instance répliquée.
    • REPLICA_NAME : nom de l'instance répliquée.
    • MACHINE_TYPE : chaîne d'énumération du type de machine. Exemple :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. Dans la section replicaConfiguration, assurez-vous que le champ cascadadableReplica est défini sur true.
  3. Exécutez la commande suivante :
    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"

Une fois l'instance répliquée pour cascade créée, vous pouvez créer une instance répliquée en cascade.

Étapes de création d'une instance répliquée en cascade

Lorsque vous créez une instance dupliquée en cascade, vous devez la créer dans la même région que l'instance dupliquée pour cascade. Pour configurer une instance répliquée pour cascade, indiquez son nom dans le paramètre –master-instance-name.

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Cliquez sur l'onglet Instances répliquées de l'instance répliquée qui va servir de parent pour l'instance répliquée que vous souhaitez créer.
  3. Cliquez sur Créer une instance répliquée.
  4. Sur la page Créer une instance répliquée avec accès en lecture, mettez à jour l'ID d'instance et toutes les autres options de configuration, y compris le nom, la région et la zone.
  5. Cliquez sur Créer.

    Cloud SQL crée une instance répliquée. Vous êtes redirigé vers la page de l'instance répliquée parente.

  6. Suivez les étapes 4 à 6 pour chaque nouvelle instance répliquée en cascade que vous souhaitez créer.

gcloud

  1. Créez l'instance répliquée en spécifiant l'instance répliquée pour cascade dans l'option --master-instance-name:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=CASCADABLE_REPLICA_NAME \
    Remplacez les éléments suivants:
    • REPLICA_NAME : ID unique de l'instance répliquée que vous créez.
    • CASCADABLE_REPLICA_NAME: nom de l'instance répliquée pour cascade
  3. Une fois que vous avez créé l'instance répliquée en cascade, vous pouvez constater que les modifications apportées à l'instance principale sont répliquées via toutes les instances répliquées présentes dans la chaîne d'instances répliquées en cascade.

curl

  1. Pour créer une instance répliquée en cascade sous l'instance répliquée pour cascade, modifiez l'exemple de code JSON suivant et enregistrez-le dans un fichier nommé request.json :
    {
      "masterInstanceName": "CASCADABLE_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. Exécutez la commande suivante :
    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"

Résoudre les problèmes

Problème Dépannage
L'instance répliquée avec accès en lecture n'a pas commencé à se répliquer lors de la création. Les fichiers journaux indiquent probablement une erreur plus spécifique. Inspectez les journaux dans Cloud Logging pour rechercher l'erreur en question.
Impossible de créer l'instance dupliquée avec accès en lecture : erreur invalidFlagValue. L'un des indicateurs de la requête n'est pas valide. Il peut s'agir d'une option que vous avez explicitement définie ou d'une option définie sur une valeur par défaut.

Tout d'abord, vérifiez que la valeur de l'option max_connections est supérieure ou égale à la valeur principale.

Si l'option max_connections est définie correctement, inspectez les journaux dans Cloud Logging pour rechercher l'erreur réelle.

Impossible de créer l'instance dupliquée avec accès en lecture : erreur inconnue. Les fichiers journaux indiquent probablement une erreur plus spécifique. Inspectez les journaux dans Cloud Logging pour rechercher l'erreur en question.

Si l'erreur est : set Service Networking service account as servicenetworking.serviceAgent role on consumer project, désactivez et réactivez Service Networking API. Cette action crée le compte de service nécessaire pour poursuivre le processus.

Le disque est saturé. Le disque de l'instance principale peut arriver à saturation lors de la création de l'instance dupliquée. Modifiez l'instance principale en augmentant la taille du disque.
L'instance dupliquée utilise trop de mémoire. L'instance dupliquée met en cache les opérations de lecture souvent demandées dans une mémoire temporaire, ce qui peut l'amener à utiliser plus de mémoire que l'instance principale.

Redémarrez l'instance dupliquée afin de récupérer l'espace de mémoire temporaire.

La duplication s'est arrêtée. La limite de stockage maximale a été atteinte et l'augmentation automatique de l'espace de stockage n'est pas activée.

Modifiez l'instance pour activer automatic storage increase.

Le délai de duplication est systématiquement long. La charge d'écriture est trop élevée pour que l'instance dupliquée puisse la traiter. Le délai de duplication s'allonge lorsque le thread SQL d'une instance dupliquée ne parvient pas à suivre le thread d'E/S. Certains types de requêtes ou de charges de travail peuvent allonger le délai de duplication de manière temporaire ou permanente pour un schéma donné. Voici quelques causes typiques affectant le délai de duplication :
  • Requêtes lentes sur l'instance dupliquée. Recherchez-les et corrigez-les.
  • Les requêtes telles que DELETE ... WHERE field < 50000000 allongent le délai de duplication, dans le cas des duplications basées sur les lignes, car un grand nombre de mises à jour s'accumulent sur l'instance dupliquée.

Voici quelques solutions possibles :

  • Modifiez l'instance pour augmenter la taille de l'instance dupliquée.
  • Réduisez la charge sur la base de données.
  • Envoyez du trafic en lecture à l'instance dupliquée avec accès en lecture.
  • Indexez les tables.
  • Identifiez et corrigez les requêtes d'écriture lentes.
  • Recréez l'instance dupliquée.
La création d'une instance dupliquée échoue avec un délai d'expiration. Les transactions non validées de longue durée sur l'instance principale peuvent entraîner l'échec de la création d'une instance dupliquée avec accès en lecture.

Recréez l'instance dupliquée après avoir arrêté toutes les requêtes en cours d'exécution.

Étape suivante