Cette page vous explique comment créer une instance dupliquée avec accès en lecture pour une instance Cloud SQL.
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
La procédure de création d'une instance dupliquée avec accès en lecture est décrite ci-dessous.
Console
-
Dans la console Google Cloud, accédez à la page Instances Cloud SQL.
- 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. - 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é répliquée. Vous ne pouvez pas répliquer une instance qui l'est déjà.
Dans la section Personnaliser votre instance de la page, mettez à jour les paramètres de votre instance répliqué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.
Par exemple, pour autoriser d'autres services Google Cloud, tels que BigQuery, à accéder aux données dans Cloud SQL et à exécuter des requêtes sur ces données via une connexion interne, développez le groupe Connexions. puis décochez la case Adresse IP publique.
- 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=MASTER_INSTANCE_NAME
Si nécessaire, vous pouvez spécifier un niveau différent à l'aide du paramètre --tier
. De plus, si vous créez une instance répliquée à partir d'une instance principale et que l'édition Cloud SQL pour cette instance est Enterprise ou Enterprise Plus version 16 ou ultérieure, vous n'avez pas besoin de spécifier de valeur pour ce paramètre. L'instance répliquée hérite du type de machine de l'instance principale.
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 et que vous souhaitez autoriser d'autres services Google Cloud, tels que BigQuery, à accéder aux données dans Cloud SQL et à effectuer des requêtes sur ces données via une connexion interne, ajoutez le paramètre --enable-google-private-path
à la commande.
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.
REST v1
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 d'Emum (par exemple, POSTGRES_12)
- 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"
- private-network : réseau autorisé que vous ajoutez ou sélectionnez pour créer une connexion privée.
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": "database-version", "name": "replica-name", "region": "replica-region", "settings": { "tier": "machine-type", "settingsVersion": 0, "ipConfiguration": { object (IpConfiguration) }, { "ipv4Enabled": false, "privateNetwork": private-network, "requireSsl": boolean, "authorizedNetworks": [ { object (AclEntry) } ], "allocatedIpRange": string } } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
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 d'Emum (par exemple, POSTGRES_12)
- 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"
- private-network : réseau autorisé que vous ajoutez ou sélectionnez pour créer une connexion privée.
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, "ipConfiguration": { object (IpConfiguration) }, { "ipv4Enabled": false, "privateNetwork": private-network, "requireSsl": boolean, "authorizedNetworks": [ { object (AclEntry) } ], "allocatedIpRange": string } } }
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": "POSTGRES_13", "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": "POSTGRES_13", "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" }
Configurer des instances dupliquées avec accès en lecture pour l'authentification IAM pour les bases de données
Si vous activez l'optioncloudsql.iam_authentication
sur l'instance principale, Cloud SQL pour PostgreSQL l'active automatiquement sur les instances dupliquées avec accès en lecture. Toutefois, si vous n'activez pas cette option sur l'instance principale, Cloud SQL pour PostgreSQL ne l'active pas sur les instances dupliquées avec accès en lecture. Vous ne pouvez pas utiliser les instances dupliquées pour l'authentification IAM pour les bases de données.
Pour configurer l'instance dupliquée avec accès en lecture pour l'authentification IAM pour les bases de données :
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Pour ouvrir la page Présentation d'une instance, cliquez sur son nom.
- Dans la tuile Configuration, recherchez l'option
cloudsql.iam_authentication
. Si l'option ne figure pas dans la liste, il n'est pas nécessaire de l'activer dans l'instance dupliquée avec accès en lecture. Si l'option figure dans la liste, vous devez l'activer sur l'instance dupliquée avec accès en lecture. Si vous devez activer l'option sur l'instance dupliquée avec accès en lecture, passez à l'étape suivante. - Dans le menu de navigation SQL, sélectionnez Instances dupliquées.
- Cliquez sur le nom de l'instance dupliquée que vous souhaitez modifier.
- Cliquez sur Modifier.
- Dans la section Options de configuration, développez Options.
- Sélectionnez + Ajouter un élément.
- Saisissez
cloudsql.iam_authentication
comme nom de l'option. Assurez-vous que l'option Activé est sélectionnée pour cette option. - Cliquez sur Enregistrer.
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.
Étapes de création d'une instance répliquée en cascade
Console
-
Dans la console Google Cloud, accédez à la page Instances Cloud SQL.
- 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.
- Cliquez sur Créer une instance répliquée.
- 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.
- 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.
- Suivez les étapes 4 à 6 pour chaque nouvelle instance répliquée en cascade que vous souhaitez créer.
gcloud
- Créez l'instance répliquée en spécifiant votre instance répliquée principale en tant qu'instance principale à l'aide de l'option
--master-instance-name
: - REPLICA_NAME : ID unique de l'instance répliquée que vous créez.
- PARENT_REPLICA_NAME : nom de l'instance répliquée parente.
- 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.
gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
curl
- Pour créer une instance répliquée qui soit hiérarchiquement inférieure à l'instance répliquée parente, modifiez l'exemple de code JSON suivant et enregistrez-le dans un fichier nommé
request.json
:{ "masterInstanceName": "PARENT_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- 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 Si l'option |
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 : |
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'espace disque augmente considérablement. | Un emplacement qui n'est pas activement utilisé pour suivre les données oblige PostgreSQL à conserver les segments WAL indéfiniment, ce qui entraîne une augmentation permanente de l'espace disque. Si vous utilisez les fonctionnalités de réplication logique et de décodage logique de Cloud SQL, les emplacements de réplication sont créés et supprimés automatiquement. Vous pouvez détecter les emplacements de réplication inutilisés en interrogeant la vue système pg_replication_slots et en filtrant suivant la colonne active . La suppression des emplacements inutilisés, en vue d'éliminer des segments WAL, s'effectue à l'aide de la commande pg_drop_replication_slot .
|
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 |
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 :
Voici quelques solutions possibles :
|
Erreurs lors de la reconstruction d'index dans PostgreSQL 9.6. | Une erreur de PostgreSQL vous indique que vous devez reconstruire un index particulier. Cette opération n'est possible que sur l'instance principale. Si vous créez une nouvelle instance dupliquée, vous obtiendrez rapidement la même erreur.
Les index de hachage ne sont pas propagés aux instances dupliquées dans les versions de PostgreSQL antérieures à la version 10.
Si vous devez absolument utiliser des index de hachage, effectuez une mise à niveau vers PostgreSQL 10 ou une version ultérieure. Sinon, si vous souhaitez également utiliser des instances dupliquées, n'utilisez pas d'index de hachage dans PostgreSQL 9.6. |
La requête sur l'instance principale est toujours en cours d'exécution. | Après avoir créé une instance répliquée, la requête SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' doit s'exécuter en continu sur votre instance principale.
|
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. |
Si l'instance principale et l'instance dupliquée disposent de tailles de processeurs virtuels différentes, des problèmes de performances des requêtes peuvent survenir, car l'optimiseur de requêtes prend en compte les tailles de processeurs virtuels. |
Pour résoudre ce problème, procédez comme suit :
S'il s'agit d'une requête spécifique, modifiez-la. Par exemple, vous pouvez modifier l'ordre des jointures pour voir si vous obtenez de meilleures performances. |
Étapes suivantes
- Apprenez à gérer les instances dupliquées.
- Apprenez-en plus sur les instances dupliquées interrégionales.