Configurer des instances dupliquées externes

Cette page explique comment configurer une instance Cloud SQL qui réplique les données sur une instance dupliquée externe à Cloud SQL à l'aide de l'extension pglogical avec logical decoding.

Pour en savoir plus sur la configuration des instances dupliquées externes, consultez la section À propos de la réplication externe.

Définir la configuration de l'instance dupliquée externe

Avant de commencer

Pour effectuer cette tâche, vous devez disposer d'une instance Cloud SQL et d'une instance PostgreSQL externe répondant aux exigences relatives aux instances dupliquées externes.

Configurer l'instance principale

  1. Accédez à la page Instances Cloud SQL dans Google Cloud Console.
  2. Autorisez l'adresse IP de l'instance dupliquée externe à accéder à l'instance principale.

    Pour en savoir plus sur l'activation de l'accès à une adresse IP, consultez la section Configurer l'accès pour les connexions IP.

  3. Enregistrez l'adresse IP publique et l'adresse IP sortante publique de l'instance principale pour une utilisation ultérieure. Vous pouvez trouver ces valeurs sur la page Présentation de l'instance.
  4. Cliquez sur l'icône Cloud Shell  dans l'angle supérieur droit.
  5. Lorsque l'invite Cloud Shell s'affiche, utilisez le client PostgreSQL intégré pour vous connecter à votre instance principale :
    
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
    
       
  6. Saisissez votre mot de passe racine. L'invite postgres doit alors s'afficher.
  7. Créez un utilisateur PostgreSQL avec l'attribut REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Installez et configurez l'extension pglogical :

    Modifiez l'instance Cloud SQL en ajoutant et en définissant les options suivantes :

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Pour en savoir plus sur ces options, consultez la page Ressources PostgreSQL.

    Redémarrez la base de données, connectez-vous en tant qu'utilisateur replication_user et créez l'extension pglogical :

    CREATE EXTENSION pglogical;
       
  9. Créez un nœud pglogical :

    Un _nœud_ pglogical représente une instance PostgreSQL physique et stocke les détails de connexion de cette instance.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. Si vous lancez une nouvelle base de données, créez la même base de données et les mêmes tables sur les instances principale et dupliquée. Exemple :
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
    
    
  11. Si vous disposez déjà d'une base de données sur l'instance principale, vous devez la créer sur l'instance dupliquée. Pour ce faire, exportez la base de données de l'instance principale vers un bucket Cloud Storage, puis importez-la dans l'instance dupliquée. Apprenez-en plus sur l'exportation de données de Cloud SQL vers un fichier de vidage SQL dans Cloud Storage.
  12. Pour gérer la réplication de différents ensembles de données dans différentes destinations, pglogical utilise le concept d'ensemble de réplication. Par exemple, pour ajouter une table à l'ensemble de réplication par défaut, procédez comme suit :
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Configurer l'instance dupliquée externe

  1. Créez un utilisateur spécial pour la réplication et accordez-lui des droits de réplication :
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Si vous lancez une nouvelle base de données, utilisez REPLICATION_USER pour créer la même base de données et les mêmes tables sur les instances principale et dupliquée. Exemple :
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. Si vous chargez l'instance dupliquée externe avec un fichier exporté à partir de l'instance principale, téléchargez ce fichier à partir de Cloud Storage. Si votre instance dupliquée externe se trouve sur une instance Compute Engine, vous pouvez télécharger le fichier à l'aide de la commande gsutil :
    gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importez le fichier dans votre base de données.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Installez pglogical en fonction de votre système d'exploitation (par exemple, sudo apt-get install postgresql-13-pglogical sur les systèmes Debian exécutant la version 13 de PostgreSQL).
  6. Connectez-vous à la base de données en tant qu'utilisateur replication_user, puis définissez les paramètres suivants :
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. Créez un nœud pglogical :
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. Créez un abonnement pglogical :
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. Vérifiez l'état de l'abonnement :
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Si l'état replicating s'affiche, le processus de configuration a réussi.
  11. Insérez des données dans l'instance principale, puis vérifiez qu'elles s'affichent également dans l'instance dupliquée.

Résoudre les problèmes

Consultez la section Résoudre les problèmes liés à pglogical.

Étapes suivantes