Configurer Cloud SQL et le serveur externe pour la réplication

Cette page explique comment configurer votre serveur externe pour la réplication sur Cloud SQL, créer une instance de représentation source sur Cloud SQL et répliquer les données vers Cloud SQL. Vous devez suivre intégralement la procédure présentée sur cette page avant de passer aux étapes de réplication.

Database Migration Service constitue une alternative aux procédures décrites sur cette page. Il offre une réplication continue ou une migration de base de données ponctuelle depuis un serveur externe vers Cloud SQL.

Avant de commencer

Terminologie

  • Serveur externe. Serveur PostgreSQL externe à Cloud SQL à partir duquel vous souhaitez répliquer des données. Il est également appelé "base de données source" ou "serveur de base de données externe". Il peut s'agir d'une autre instance Cloud SQL ou de tout autre serveur de base de données, par exemple, sur site, Amazon Relational Database Service (RDS), etc.

  • Instance de représentation source. Instance Cloud SQL de simulation qui représente le serveur externe auprès de l'instance dupliquée Cloud SQL. Elle est visible dans la console Google Cloud et ressemble à une instance Cloud SQL classique, mais elle ne contient pas de données, nécessite une configuration ou une maintenance, ni n'affecte la facturation.

  • Instance dupliquée Cloud SQL. Instance Cloud SQL dupliquée du serveur externe. Également appelée instance dupliquée principale externe avec accès en lecture.

  • Compte utilisateur de réplication. Compte utilisateur PostgreSQL sur le serveur externe disposant des autorisations suffisantes pour permettre la réplication entre le serveur externe et l'instance dupliquée Cloud SQL.

  • Importation gérée. Processus d'importation des données directement depuis le serveur externe vers l'instance dupliquée Cloud SQL. Dans ce cas, Cloud SQL se connecte au serveur externe à l'aide du compte utilisateur de réplication et exécute le vidage des données directement sur le serveur externe pour importer des données vers l'instance dupliquée Cloud SQL.

Configurer un projet Google Cloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL Admin API.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud SQL Admin API.

    Enable the API

  8. Assurez-vous de disposer des rôles d'administrateur Cloud SQL, d'administrateur de l'espace de stockage et de lecteur de Compute sur votre compte utilisateur.

    Accéder à la page IAM

Installer le Google Cloud SDK

Pour configurer la réplication, installez le SDK Google Cloud pour votre serveur externe. Vous pouvez installer le SDK sur votre serveur externe, à moins qu'il soit déjà installé ailleurs.

Configurer le serveur externe pour la réplication

Cloud SQL permet d'effectuer des migrations continues à partir de bases de données sources vers des bases de données de destination Cloud SQL.

Les bases de données sources compatibles avec PostgreSQL incluent :

  • Service PostgreSQL autogéré (sur site ou sur une VM cloud que vous contrôlez entièrement) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16 et 17
  • Amazon RDS 9.6.10+, 10.5+, 11.1+, 12, 13, 14, 15, 16 et 17
  • Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14, 15, 16 et 17
  • Cloud SQL 9.6, 10, 11, 12, 13, 14, 15, 16 et 17

Pour configurer votre source, vous devez configurer à la fois l'instance source et les bases de données sources sous-jacentes.

Checklist du serveur externe

Si l'instance répliquée Cloud SQL est activée avec une adresse IP privée, car l'adresse IP privée sortante n'est pas statique, configurez le pare-feu du serveur externe pour autoriser la plage d'adresses IP internes allouée à l'Accès privé aux services du réseau VPC utilisé par l'instance répliquée Cloud SQL en tant que réseau privé.

Le pare-feu du serveur de base de données source doit être configuré pour autoriser l'intégralité de la plage d'adresses IP internes allouée à la connexion de service privée du réseau VPC que l'instance de destination Cloud SQL utilise comme champ privateNetwork dans ses paramètres ipConfiguration.

Pour trouver la plage d'adresses IP internes, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Réseaux VPC.

    Accéder à la page Réseaux VPC

  2. Sélectionnez le réseau VPC que vous souhaitez utiliser.

  3. Cliquez sur l'onglet Connexion au service privé.

Configurer l'instance source

Pour configurer votre instance source, procédez comme suit :

  1. Si votre instance source n'inclut pas la base de données postgres, créez-la.
  2. Installez le package pglogical sur l'instance source
  3. Définissez les paramètres suivants, si nécessaire.

    Si l'instance PostgreSQL source est Amazon RDS, incluez ces paramètres dans un nouveau groupe de paramètres et associez le groupe de paramètres à l'instance.

    • Si la source est Cloud SQL, définissez les options cloudsql.logical_decoding et cloudsql.enable_pglogical sur on.

      Pour activer des options dans Cloud SQL, consultez la page Configurer des options de base de données.

    • Définissez shared_preload_libraries de façon à inclure pglogical à l'aide de la commande suivante :

      ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
            
    • Définissez wal_level sur logical à l'aide de la commande suivante :

          ALTER SYSTEM SET wal_level = 'logical';
          

      Si l'instance PostgreSQL source est Amazon RDS, pour activer les journaux WAL au niveau logical, définissez le paramètre rds.logical_replication sur 1.

    • Définissez wal_sender_timeout sur 0 à l'aide de la commande suivante :

      ALTER SYSTEM SET wal_sender_timeout = 0;

      La valeur 0 désactive le mécanisme de délai avant expiration utilisé pour interrompre les connexions de réplication inactives.

    • Définissez max_replication_slots sur le nombre maximal d'emplacements de réplication que l'instance source peut accepter. Exécutez la commande suivante, après avoir remplacé # par le nombre :

      ALTER SYSTEM SET max_replication_slots = #;

      Cloud SQL requiert un emplacement pour chaque base de données migrée. Spécifiez au moins le nombre d'abonnements attendus, avec certaines réserves pour la synchronisation des tables.

      Par exemple, si l'instance source dispose de cinq bases de données et que deux tâches de migration sont créées pour cette source, le nombre d'emplacements de réplication doit être supérieur ou égal à 5 x 2 = 10, en plus du nombre d'emplacements de réplication que vous utilisez déjà.

    • Définissez max_wal_senders sur une valeur au moins égale à celle de max_replication_slots, en plus du nombre d'expéditeurs déjà utilisés sur votre instance. Exécutez la commande suivante en remplaçant # par le nombre total de processus d'envoi WAL exécutés simultanément :

      ALTER SYSTEM SET max_wal_senders = #;

      Par exemple, si le paramètre max_replication_slots est défini sur 10 et que vous utilisez déjà deux expéditeurs, le nombre de processus d'envoi WAL exécutés en même temps est de 10 + 2 = 12.

    • Définissez max_worker_processes, au minimum, sur un nombre égal à la somme du nombre de bases de données de l'instance source et du nombre de processus de calcul déjà utilisés sur l'instance. Exécutez la commande suivante, en remplaçant # par le nombre total :

      ALTER SYSTEM SET max_worker_processes = #;
  4. Les paramètres que vous définissez à cette étape s'appliquent à un serveur de base de données PostgreSQL en cours d'exécution. Vous pouvez également rendre ces modifications persistantes en les incluant dans le fichier postgresql.conf.

  5. Si l'instance dupliquée Cloud SQL utilise une adresse IP privée, configurez le pare-feu du serveur externe pour autoriser la plage d'adresses IP internes allouée à l'accès aux services privés du réseau VPC de l'instance dupliquée.
  6. Pour appliquer les modifications de configuration, redémarrez l'instance source.

Activer la surveillance du délai de réplication pour les versions PostgreSQL antérieures à 9.6

Si vous effectuez une migration depuis une version PostgreSQL antérieure à 9.6, la métrique de délai de réplication n'est pas disponible par défaut. Vous pouvez utiliser l'une des trois options suivantes pour suivre cette métrique et garantir un temps d'arrêt minimal lorsque vous promouvez la base de données :

  • Option 1 : activez le serveur externe Cloud SQL pour suivre le délai de réplication en accordant l'accès à une requête spécifique. À l'aide d'un utilisateur disposant du droit SUPERUSER, procédez comme suit :

    1. Définissez la fonction suivante pour permettre au serveur externe d'interroger le délai de réplication.

      CREATE OR REPLACE FUNCTION pg_stat_replication_user()
      RETURNS TABLE (
      pid               integer                  ,
      usesysid          oid                      ,
      username          name                    ,
      application_name  text                     ,
      client_addr       inet                     ,
      client_hostname   text                     ,
      client_port       integer                  ,
      backend_start     timestamp with time zone ,
      backend_xmin      xid                      ,
      state             text                     ,
      sent_location     pg_lsn                   ,
      write_location    pg_lsn                   ,
      flush_location    pg_lsn                   ,
      replay_location   pg_lsn                   ,
      sync_priority     integer                  ,
      sync_state        text
      )
      LANGUAGE SQL
      SECURITY DEFINER
      AS $$
       SELECT *
       FROM pg_catalog.pg_stat_replication;
      $$;
      
    2. Accordez l'autorisation EXECUTE à l'utilisateur en exécutant les commandes suivantes :

      1. REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
      2. GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
  • Option 2 : accordez le privilège SUPERUSER directement à l'utilisateur utilisé pour se connecter à l'instance source. Cela permet au serveur externe de lire directement le délai de réplication.

  • Option 3 : suivez le délai de réplication indépendamment à l'aide de la requête suivante :

        SELECT current_timestamp, application_name,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag,
        pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag
        FROM pg_stat_replication
        WHERE application_name like 'cloudsql%';
      

    Dans cette option, Cloud SQL ne reflète pas la métrique de délai de réplication dans les graphiques ou les réponses de l'API.

Configurer vos bases de données sources

Le serveur externe Cloud SQL migre toutes les bases de données de votre instance source, sauf les éléments suivants :

  • Pour les sources sur site : bases de données de modèles template0 et template1
  • Pour les sources Amazon RDS : template0, template1 et rdsadmin
  • Pour les sources Cloud SQL : bases de données de modèles template0 et template1

Effectuez les opérations suivantes sur chaque base de données de votre instance source qui ne figure pas dans la liste précédente :

  1. Pour installer l'extension pglogical, exécutez la commande suivante sur chaque base de données de votre instance source :

    CREATE EXTENSION IF NOT EXISTS pglogical

    Pour les tables sans clé primaire, Cloud SQL accepte la migration de l'instantané initial et des instructions INSERT pendant la phase de capture de données modifiées (CDC pour "Change Data Capture"). Migrez les instructions UPDATE et DELETE manuellement.

  2. Connectez-vous à l'instance et exécutez les commandes suivantes pour définir des droits pour l'utilisateur sur chacune des bases de données migrées, ainsi que pour la base de données postgres par défaut.

    L'utilisateur que vous utilisez pour vous connecter à l'instance source est configuré en tant qu'utilisateur sur la page Profils de connexion. Vous pouvez créer un utilisateur ou réutiliser un utilisateur existant.

    • Sur tous les schémas de chaque base de données à migrer, à l'exception du schéma d'informations et des schémas commençant par pg_, exécutez la commande suivante :

      GRANT USAGE on SCHEMA schema to username;
      GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username;
      GRANT SELECT on ALL TABLES in SCHEMA schema to username;
    • Sur chaque base de données à migrer, exécutez la commande suivante :

      GRANT USAGE on SCHEMA pglogical to PUBLIC;
    • Pour obtenir les informations de réplication des bases de données sources,sur toutes les bases de données, exécutez la commande suivante :

      GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
    • Si la source est Amazon RDS, exécutez la commande suivante :

      GRANT rds_replication to username;

      Sinon, exécutez la commande suivante :

      ALTER USER username with REPLICATION;

Configurer une instance de représentation source

L'instance de représentation source fait référence au serveur externe. Elle ne contient que les données de requête du serveur externe. Créez les données de requête et utilisez-les dans une commande curl qui crée l'instance de représentation source dans Cloud SQL.

Créer les données de requête

Les données de requête contiennent des informations de base sur votre serveur de base de données source au format JSON. Elles peuvent être configurées pour une instance dupliquée Cloud SQL sur un réseau public ou privé et doivent contenir les informations suivantes :

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "caCertificate": "SOURCE_CERT",
        "clientCertificate": "CLIENT_CERT",
        "clientKey": "CLIENT_KEY"
      }
    }

exemple d'importation gérée

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}
Propriété Description
SOURCE_NAME Nom de l'instance de représentation source à créer.
REGION Région dans laquelle vous souhaitez que l'instance de représentation source réside.
DATABASE_VERSION Version de base de donnée qui s'exécute sur votre serveur externe. Les options sont POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17.
SOURCE HOST Adresse IPv4 et port du serveur externe, ou adresse DNS du serveur externe. Si le serveur externe est hébergé sur Cloud SQL, le port est 5432.
USERNAME Compte utilisateur de réplication sur le serveur externe.
PASSWORD Mot de passe du compte utilisateur de réplication.
BUCKET Nom du bucket contenant le fichier de vidage. À n'inclure que si vous configurez la réplication avec un fichier de vidage existant dans un bucket Cloud Storage.
DUMP_FILE Fichier du bucket contenant les données du serveur externe.
CLIENT_CA_CERT Certificat CA sur le serveur externe. À n'inclure que si SSL/TLS est utilisé sur le serveur externe.
CLIENT_CERT Certificat client sur le serveur externe. Requis uniquement pour l'authentification serveur-client. À n'inclure que si SSL/TLS est utilisé sur le serveur externe.
CLIENT_KEY Fichier de clé privée du certificat client sur le serveur externe. Requis uniquement pour l'authentification serveur-client. À n'inclure que si SSL/TLS est utilisé sur le serveur externe.

Créer une instance de représentation source

Avant d'effectuer cette étape, vous devez créer un fichier JSON contenant les données de requête source.

Ensuite, pour créer l'instance de représentation source dans Cloud SQL, ouvrez un terminal et exécutez les commandes suivantes :

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

exemple

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Valeur Description
PROJECT_ID ID de votre projet dans Google Cloud.
JSON_PATH Chemin d'accès au fichier JSON contenant les données de requête du serveur externe.

Mettre à jour une instance de représentation source

Si vous mettez à jour les données de requête à partir du serveur externe, vous pouvez mettre à jour l'instance de représentation source existante afin qu'elle utilise les valeurs modifiées.

Modifier les données de requête

Mettez à jour les données de requête pour inclure tous les champs qui ont été modifiés. Cela inclut les champs hostPort, username, password, caCertificate, clientCertificate et clientKey. Après avoir mis à jour les données de requête, utilisez-les dans une commande curl pour mettre à jour l'instance dans Cloud SQL.

L'exemple suivant montre comment mettre à jour les champs username et password avec un nom d'utilisateur et un mot de passe différents :

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "DATABASE_VERSION",
      "onPremisesConfiguration": {
        "username": "NEW_USERNAME",
        "password": "NEW_PASSWORD"
      }
    }

exemple d'importation gérée

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "POSTGRES_9_6",
  "onPremisesConfiguration": {
    "username": "newReplicationUser",
    "password": "525#@%*@"
  }
}
Propriété Description
SOURCE_NAME Nom de l'instance de représentation source.
REGION Région où se trouve l'instance de représentation source.
DATABASE_VERSION Version de base de donnée qui s'exécute sur votre serveur externe. Les options sont POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17.
NEW_USERNAME Nouveau compte utilisateur de réplication sur le serveur externe.
NEW_PASSWORD Mot de passe du nouveau compte.

Modifier une instance de représentation source

Avant d'effectuer cette étape, vous devez créer un fichier JSON contenant les données de requête modifiées.

Ensuite, pour modifier l'instance de représentation source dans Cloud SQL, ouvrez un terminal et exécutez les commandes suivantes :

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_NAME

exemple

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X PATCH \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Valeur Description
PROJECT_ID ID de votre projet dans Google Cloud.
JSON_PATH Chemin d'accès au fichier JSON contenant les données de requête du serveur externe.
SOURCE_NAME Nom de l'instance de représentation source.

Configurer une instance dupliquée Cloud SQL

L'instance dupliquée Cloud SQL contient à terme les données du serveur externe. Dans cette étape, vous allez créer les données de requête et les utiliser dans une commande curl qui crée l'instance dupliquée Cloud SQL dans Cloud SQL.

Créer les données de requête

Les données de requête contiennent des informations de base sur votre serveur externe et votre instance dupliquée Cloud SQL au format JSON. Les données de requête peuvent être configurées pour une instance dupliquée Cloud SQL sur un réseau public ou privé et doivent contenir les informations suivantes :

replica.json

    {
        "settings": {
            "tier": "TIER",
            "dataDiskSizeGb": "DISK_SIZE",
            "ipConfiguration": {
                "ipv4Enabled": "PUBLIC_IP_STATUS",
                "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
             },
             "availabilityType": "AVAILABILITY_TYPE"
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "DATABASE_VERSION",
        "name": "REPLICA_NAME"
    }

exemple

    {
        "settings": {
            "tier": "db-custom-4-15360",
            "dataDiskSizeGb": "100"
        },
        "masterInstanceName": "source-instance",
        "region": "us-central1",
        "databaseVersion": "POSTGRES_16",
        "name": "replica-instance"
    }
Valeur Description
TIER Type de machine qui héberge votre instance dupliquée. Si vous ne savez pas quel type de machine utiliser, commencez par db-custom-2-7680. Vous pourrez modifier sa taille et d'autres valeurs acceptées ultérieurement si nécessaire.
DISK_SIZE Taille de l'espace de stockage pour l'instance dupliquée Cloud SQL, en Go.
PUBLIC_IP_STATUS Détermine si une adresse IP publique est attribuée à l'instance. Par défaut, la valeur de cette propriété est true. Pour désactiver l'attribution d'une adresse IP publique à l'instance répliquée, définissez la valeur sur false. Si la règle d'administration constraints/sql.restrictPublicIp a été activée pour votre projet, vous devez définir la valeur de la propriété ipv4Enabled sur false pour créer l'instance répliquée Cloud SQL. Pour en savoir plus sur la désactivation de l'attribution d'adresses IP publiques, consultez Désactiver une adresse IP publique.
PROJECT_ID Si l'instance répliquée Cloud SQL se trouve sur un réseau privé, incluez la propriété privateNetwork dans le fichier replica.json. Pour PROJECT_ID, spécifiez l'ID de votre projet dans Google Cloud.
NETWORK_NAME Nom du réseau privé à utiliser avec l'instance dupliquée Cloud SQL.
AVAILABILITY_TYPE Type de disponibilité de l'instance dupliquée Cloud SQL. La valeur par défaut est ZONAL. Pour définir la haute disponibilité sur l'instance dupliquée, définissez la valeur sur REGIONAL. Pour en savoir plus sur les valeurs autorisées, consultez la section SqlAvailabilityType.
Après avoir créé une instance dupliquée externe à haute disponibilité, vous ne pouvez pas la remplacer par une instance dupliquée standard. L'inverse est également vrai. Vous ne pouvez pas remplacer une instance dupliquée externe standard par une instance dupliquée haute disponibilité.
Le basculement manuel peut entraîner une migration irrécupérable si il est tenté alors que l'instance charge toujours les données initiales, ou un temps d'arrêt temporaire si l'instance est déjà en cours de réplication à partir de la source. Vérifiez l'état de la réplication.
SOURCE_REPRESENTATION_INSTANCE_NAME Nom de l'instance de représentation source.
SOURCE_REGION Région attribuée à l'instance de représentation source.
DATABASE_VERSION Version de base de donnée à utiliser avec l'instance dupliquée Cloud SQL. Les options pour cette version sont POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 ou POSTGRES_17. Faites correspondre la version de base de données exécutée sur votre serveur externe ou définissez la valeur sur une version ne dépassant pas la version supérieure.
REPLICA_NAME Nom de l'instance dupliquée Cloud SQL à créer.

Créer une instance dupliquée Cloud SQL

Avant d'effectuer cette étape, vous devez créer un fichier JSON contenant les données de requête de l'instance dupliquée. Ensuite, pour créer une instance dupliquée Cloud SQL, ouvrez un terminal Cloud Shell et exécutez les commandes suivantes :

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

exemple

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./replica.json \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Valeur Description
PROJECT_ID ID de votre projet dans Google Cloud, qui doit être identique à celui de l'instance source.
JSON_PATH Chemin d'accès au fichier JSON contenant les données de requête de l'instance dupliquée Cloud SQL.

Vérifier votre configuration

Pour vous assurer que vos instances ont été correctement configurées, accédez à la page Instances Cloud SQL.

Vous devriez voir votre instance de représentation source et l'instance dupliquée Cloud SQL dans une liste semblable à celle-ci :

ID d'instance Type Adresse IP publique
(-) source-representation-instance Database external primary 10.68.48.3:5432
replica-instance Database read replica 34.66.48.59

Assurez-vous également que vous disposez de l'autorisation cloudsql.instances.migrate sur l'instance répliquée Cloud SQL. Cette autorisation est incluse dans les rôles IAM cloudsql.admin ou cloudsql.editor.

Ajouter des utilisateurs à l'instance dupliquée Cloud SQL

Vous ne pouvez pas importer de comptes utilisateur de base de données à partir du serveur externe, mais vous pouvez les créer sur une instance dupliquée Cloud SQL. Effectuez cette opération avant la réplication à partir du serveur externe.

Obtenir l'adresse IP sortante de l'instance dupliquée Cloud SQL

Vous pouvez utiliser l'adresse IP sortante de l'instance dupliquée Cloud SQL pour établir une connexion sécurisée entre le serveur externe et l'instance dupliquée Cloud SQL. Cette adresse IP ne vous sera pas facturée.

Console

Pour obtenir l'adresse IP sortante de l'instance dupliquée, procédez comme suit :

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

    Accéder à la page Instances Cloud SQL

  2. À côté de l'adresse IP publique de l'instance dupliquée Cloud SQL, passez la souris sur l'info-bulle Plus d'infos et récupérez l'adresse IP sortante.

    Notez que l'adresse IP sortante ne correspond pas à l'adresse IP affichée dans la liste principale pour l'instance dupliquée dans la console Google Cloud.

gcloud

Pour obtenir l'adresse IP sortante de l'instance dupliquée, exécutez la commande suivante :

gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
Valeur Description
REPLICA_NAME Nom de l'instance dupliquée Cloud SQL dont vous souhaitez récupérer l'adresse IP publique sortante.

Autoriser les connexions entrantes sur le serveur externe

L'instance dupliquée Cloud SQL doit se connecter au serveur externe pour que la réplication aboutisse. Vous devez configurer le pare-feu réseau pour que votre serveur externe accepte les connexions à partir de l'adresse IP sortante de l'instance dupliquée Cloud SQL si les conditions suivantes s'appliquent :

  • Le serveur externe est protégé par un pare-feu ou par une autre restriction réseau.
  • Votre instance dupliquée Cloud SQL utilise une adresse IP publique.

Pour vous connecter à l'instance dupliquée Cloud SQL, utilisez l'adresse IP principale de l'instance dupliquée. Cette adresse IP s'affiche dans la console Google Cloud.

Mettre à jour l'instance de représentation source pour autoriser la réplication sur l'instance dupliquée Cloud SQL

Après avoir configuré l'instance de représentation source pour l'instance dupliquée Cloud SQL, vous devrez peut-être mettre à jour l'instance de représentation source. Par exemple, les scénarios suivants nécessitent une mise à jour de vos configurations :

  • L'hôte, le port ou l'adresse IP du serveur externe sont modifiés.
  • Vous souhaitez utiliser un autre utilisateur de réplication PostgreSQL.
  • Le mot de passe de l'utilisateur de réplication PostgreSQL est modifié.
  • Les certificats SSL utilisés pour se connecter en toute sécurité au serveur externe sont modifiés.

Initier l'instance dupliquée Cloud SQL

Pour le chargement initial des données du serveur externe dans l'instance dupliquée Cloud SQL, utilisez une importation gérée. Il utilise un service qui extrait les données du serveur externe et les importe directement dans l'instance Cloud SQL. Pour en savoir plus, consultez la section Utiliser une importation gérée pour configurer la réplication à partir de bases de données externes.

Surveiller la duplication

Une fois que l'instance dupliquée Cloud SQL a terminé la réplication, elle se connecte au serveur externe et applique toutes les mises à jour effectuées après l'exportation. Vérifiez l'état de la réplication.

Il est important de vérifier l'état de la duplication avant de promouvoir l'instance dupliquée sur une instance autonome. Si le processus de réplication n'est pas terminé, une instance dupliquée promue ne dispose pas de toutes les modifications provenant de votre serveur externe.

Si le délai de réplication ne tend pas vers 0, prenez les mesures nécessaires pour y remédier. Nous vous conseillons de vérifier les métriques suivantes : /postgresql/external_sync/initial_sync_complete, postgresql/external_sync/max_replica_byte_lag et database/replication/state. Consultez la liste des métriques Cloud SQL.

Une fois que l'instance dupliquée Cloud SQL a rattrapé le serveur externe et qu'elle ne présente pas de délai de réplication, connectez-vous à votre base de données. Exécutez les commandes de base de données appropriées pour vous assurer que le contenu est conforme aux attentes par rapport au serveur externe. Conservez votre serveur externe jusqu'à la fin des validations nécessaires.

Configurer une instance répliquée en cascade

Après la migration, vous pouvez créer des instances répliquées en cascade sous votre instance répliquée Cloud SQL avant de promouvoir cette instance.

Pour créer une instance répliquée en cascade, exécutez les commandes suivantes :

Console

  1. Dans la console Google Cloud, 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 votre instance répliquée Cloud SQL en tant qu'instance principale à l'aide de l'option --master-instance-name :
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    Remplacez les éléments suivants:
    • REPLICA_NAME : ID unique de l'instance répliquée que vous créez.
    • PARENT_REPLICA_NAME : nom de l'instance répliquée Cloud SQL
  3. Une fois l'instance répliquée créée, 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 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": "EXTERNAL_SERVER_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"

Promouvoir l'instance dupliquée

Pour promouvoir votre instance dupliquée, procédez comme suit :

  1. Promouvez l'instance dupliquée en instance principale.
  2. Ajoutez des instances dupliquées avec accès en lecture à votre instance.
  3. Facultatif : Configurez la haute disponibilité pour votre instance. Pour éviter les temps d'arrêt supplémentaires, vous pouvez activer la haute disponibilité lors de la configuration d'une instance dupliquée en définissant AVAILABILITY_TYPE sur REGIONAL.

Limites

  • Si vous installez des extensions sur vos bases de données sources externes que Cloud SQL n'est pas compatible, Cloud SQL ne les migrera pas lorsque vous migrerez les bases de données vers une instance de destination. Pour assurer une migration fluide, vérifiez qu'aucun objet ni aucune application ne fait référence aux extensions. Avant de procéder à la migration, nous vous recommandons de supprimer les extensions ainsi que toutes les références des bases de données sources.

    Pour en savoir plus sur les extensions compatibles avec Cloud SQL, consultez Configurer des extensions PostgreSQL.

  • Si vous installez l'extension pg_cron sur vos bases de données sources externes, Cloud SQL ne migre pas l'extension ni les paramètres cron associés à l'extension lorsque vous migrez les bases de données vers une instance de destination. Après avoir migré les bases de données et promu le réplica, Google vous recommande de réactiver l'extension pg_cron sur chaque base de données migrée.

Étape suivante