Transportez des bases de données PostgreSQL entre deux instances de base de données Amazon RDS à l'aide de pg_transport - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Transportez des bases de données PostgreSQL entre deux instances de base de données Amazon RDS à l'aide de pg_transport

Créée par Raunak Rishabh (AWS) et Jitender Kumar (AWS)

Environnement : PoC ou pilote

Source : Bases de données : relationnelles

Cible : Amazon RDS pour PostgreSQL

Type R : Déménager

Charge de travail : Open source

Technologies : migration ; bases de données

Services AWS : Amazon RDS

Récapitulatif

Ce modèle décrit les étapes de migration de bases de données extrêmement volumineuses entre deux instances de base de données Amazon Relational Database Service (Amazon RDS) pour PostgreSQL à l'aide de l'extension pg_transport. Cette extension offre un mécanisme physique de transport permettant de déplacer chaque base de données. En diffusant les fichiers de base de données avec un traitement minimal, il fournit une méthode extrêmement rapide pour migrer des bases de données volumineuses entre des instances de base de données avec un temps d'arrêt minimal. Cette extension utilise un modèle d'extraction dans lequel l'instance de base de données cible importe la base de données depuis l'instance de base de données source.

Conditions préalables et limitations

Prérequis

  • Les deux instances de base de données doivent exécuter la même version majeure de PostgreSQL.

  • La base de données ne doit pas exister sur la cible. Dans le cas contraire, le transport échoue.

  • Aucune extension autre que pg_transport ne doit être activée dans la base de données source.

  • Tous les objets de la base de données source doivent se trouver dans le tablespace pg_default par défaut.

  • Le groupe de sécurité de l'instance de base de données source doit autoriser le trafic provenant de l'instance de base de données cible.

  • Installez un client PostgreSQL tel que psql PgAdminou pour fonctionner avec l'instance de base de données Amazon RDS PostgreSQL. Vous pouvez installer le client dans votre système local ou utiliser une instance Amazon Elastic Compute Cloud (Amazon EC2). Dans ce modèle, nous utilisons psql sur une instance EC2.

Limites

  • Vous ne pouvez pas transporter de bases de données entre différentes versions majeures d'Amazon RDS for PostgreSQL.

  • Les privilèges d'accès et la propriété de la base de données source ne sont pas transférés vers la base de données cible.

  • Vous ne pouvez pas transporter de bases de données sur des répliques en lecture ou sur des instances parentes de répliques en lecture.

  • Vous ne pouvez pas utiliser les types de données reg dans les tables de base de données que vous prévoyez de transporter avec cette méthode.

  • Vous pouvez exécuter jusqu'à 32 transports au total (y compris les importations et les exportations) en même temps sur une instance de base de données.

  • Vous ne pouvez pas renommer ou inclure/exclure des tables. Tout est migré tel quel.

Prudence

  • Effectuez des sauvegardes avant de supprimer l'extension, car la suppression de l'extension supprime également les objets dépendants et certaines données essentielles au fonctionnement de la base de données.

  • Tenez compte de la classe d'instance et des processus exécutés sur d'autres bases de données de l'instance source lorsque vous déterminez le nombre de travailleurs et les work_mem valeurs de pg_transport.

  • Lorsque le transport démarre, toutes les connexions à la base de données source sont interrompues et la base de données passe en mode lecture seule.

Remarque : Lorsque le transport est exécuté sur une base de données, il n'affecte pas les autres bases de données du même serveur.

Versions du produit

Architecture

Transport de bases de données PostgreSQL entre des instances de base de données Amazon RDS

Outils

  • pg_transport fournit un mécanisme de transport physique pour déplacer chaque base de données. En diffusant les fichiers de base de données avec un minimum de traitement, le transport physique déplace les données beaucoup plus rapidement que les processus de vidage et de chargement traditionnels et nécessite un minimum de temps d'arrêt. Les bases de données transportables PostgreSQL utilisent un modèle d'extraction dans lequel l'instance de base de données de destination importe la base de données à partir de l'instance de base de données source. Vous installez cette extension sur vos instances de base de données lorsque vous préparez les environnements source et cible, comme expliqué dans ce modèle.

  • psql vous permet de vous connecter à vos instances de base de données PostgreSQL et de les utiliser. Pour installer psql sur votre système, consultez la page des téléchargements de PostgreSQL.

Épopées

TâcheDescriptionCompétences requises

Créez un groupe de paramètres pour le système cible.

Spécifiez un nom de groupe qui l'identifie en tant que groupe de paramètres cible ; par exemple,pgtarget-param-group. Pour obtenir des instructions, consultez la documentation Amazon RDS.

DBA

Modifiez les paramètres du groupe de paramètres.

Définissez les paramètres suivants :

  1. Ajoutez pg_transport au shared_preload_libraries paramètre.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Définissez le paramètre pg_transport.num_workers. Choisissez le nombre de travailleurs avec lesquels vous souhaitez effectuer le transport. La valeur que vous définissez détermine le nombre de transport.send_file travailleurs qui seront créés dans la source.

  3. Augmentez la valeur de max_worker_processes jusqu'à plus de trois fois la valeur depg_transport.num_workers. Par exemple, si vous définissez la valeur pg_transport.num_workers de 4, la max_worker_processes valeur doit être d'au moins 13. En cas d'échec, pg_transport recommande une valeur minimale. 

  4. pg_transport.timingRéglé sur 1. Ce paramètre permet de signaler les informations temporelles pendant le transport.

  5. Définissez le paramètre pg_transport.work_mem. Ce paramètre indique la mémoire maximale à allouer à chaque travailleur. La valeur par défaut est de 128 Mo.

Pour plus d'informations sur ces paramètres, consultez la documentation Amazon RDS.

DBA
TâcheDescriptionCompétences requises

Créez un groupe de paramètres pour le système source.

Spécifiez un nom de groupe qui l'identifie en tant que groupe de paramètres source ; par exemple,pgsource-param-group. Pour obtenir des instructions, consultez la documentation Amazon RDS.

DBA

Modifiez les paramètres du groupe de paramètres.

Définissez les paramètres suivants :

  1. Ajoutez pg_transport au shared_preload_libraries paramètre.

    shared_preload_libraries = pg_stat_statements, pg_transport
  2. Définissez le paramètre pg_transport.num_workers. La valeur de ce paramètre définie dans la cible détermine le nombre de transport.send_file travailleurs à utiliser. Si une importation est en cours d'exécution sur cette instance, augmentez cette valeur, mais tenez compte du nombre de travailleurs déjà en cours d'exécution.

  3. Augmentez la valeur de max_worker_processes jusqu'à plus de trois fois la valeur de pg_transport.num_workers sur la cible. Par exemple, si vous définissez la valeur pg_transport.num_workers de 4 sur la cible, la max_worker_processes valeur sur la source doit être d'au moins 13. En cas d'échec, pg_transport recommande une valeur minimale. 

  4. Définissez le paramètre pg_transport.work_mem. Ce paramètre indique la mémoire maximale à allouer à chaque travailleur. La valeur par défaut est de 128 Mo.

Pour plus d'informations sur ces paramètres, consultez la documentation Amazon RDS.

DBA
TâcheDescriptionCompétences requises

Créez une nouvelle instance de base de données Amazon RDS for PostgreSQL vers laquelle transporter votre base de données source.

Déterminez la classe d'instance et la version de PostgreSQL en fonction des besoins de votre entreprise.

DBA, administrateur système, architecte de base de données

Modifiez le groupe de sécurité de la cible pour autoriser les connexions sur le port de l'instance de base de données depuis l'instance EC2.

Par défaut, le port de l'instance PostgreSQL est 5432. Si vous utilisez un autre port, les connexions à ce port doivent être ouvertes pour l'instance EC2.

DBA, administrateur système

Modifiez l'instance et attribuez le nouveau groupe de paramètres cible.

Par exemple, pgtarget-param-group.

DBA

Redémarrez l'instance de base de données Amazon RDS cible.

Les paramètres shared_preload_libraries et max_worker_processes sont des paramètres statiques qui nécessitent un redémarrage de l'instance.

DBA, administrateur système

Connectez-vous à la base de données depuis l'instance EC2 à l'aide de psql.

Utilisez la commande  : 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Créez l'extension pg_transport.

Exécutez la requête suivante en tant qu'utilisateur ayant le rds_superuser rôle :

create extension pg_transport;
DBA
TâcheDescriptionCompétences requises

Modifiez le groupe de sécurité de la source pour autoriser les connexions sur le port de l'instance de base de données depuis l'instance Amazon EC2 et l'instance de base de données cible

Par défaut, le port de l'instance PostgreSQL est 5432. Si vous utilisez un autre port, les connexions à ce port doivent être ouvertes pour l'instance EC2.

DBA, administrateur système

Modifiez l'instance et assignez le nouveau groupe de paramètres source.

Par exemple, pgsource-param-group.

DBA

Redémarrez l'instance de base de données Amazon RDS source.

Les paramètres shared_preload_libraries et max_worker_processes sont des paramètres statiques qui nécessitent un redémarrage de l'instance.

DBA

Connectez-vous à la base de données depuis l'instance EC2 à l'aide de psql.

Utilisez la commande  : 

psql -h <rds_end_point> -p PORT -U username -d database -W
DBA

Créez l'extension pg_transport et supprimez toutes les autres extensions des bases de données à transporter.

Le transport échouera si des extensions autres que pg_transport sont installées sur la base de données source. Cette commande doit être exécutée par un utilisateur doté du rds_superuser rôle.

DBA
TâcheDescriptionCompétences requises

Effectuez un essai à sec.

Utilisez la transport.import_from_server fonction pour effectuer d'abord un essai à sec :

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');

Le dernier paramètre de cette fonction (défini surtrue) définit le cycle à sec.

Cette fonction affiche toutes les erreurs que vous pourriez rencontrer lors de l'exécution du transport principal. Résolvez les erreurs avant d'exécuter le transport principal.

DBA

Si le dry run est réussi, lancez le transport de la base de données.

Exécutez la transport.import_from_server fonction pour effectuer le transport. Il se connecte à la source et importe les données. 

SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);

Le dernier paramètre de cette fonction (défini surfalse) indique qu'il ne s'agit pas d'un essai à sec.

DBA

Effectuez les étapes après le transport.

Une fois le transport de la base de données terminé :

  • Validez les données dans l'environnement cible.

  • Ajoutez tous les rôles et autorisations à la cible.

  • Activez toutes les extensions requises dans la cible et dans la source, si nécessaire.

  • Annulez la valeur du max_worker_processes paramètre.

DBA

Ressources connexes