DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Comment migrer de PostgreSQL vers YugabyteDB avec YugabyteDB Voyager
    Uncategorized

    Comment migrer de PostgreSQL vers YugabyteDB avec YugabyteDB Voyager

    février 3, 2023
    Comment migrer de PostgreSQL vers YugabyteDB avec YugabyteDB Voyager
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    La migration d’un magasin de données d’un système à un autre peut sembler une tâche ardue.

    De nombreuses organisations ont des milliers d’applications, chacune soutenue par des bases de données relationnelles telles qu’Oracle, MySQL ou PostgreSQL. La mise à l’échelle des bases de données hébergées sur un seul nœud de base de données nécessite une capacité de stockage et de calcul accrue.

    Ces ressources ne sont pas illimitées et ont un coût financier élevé. Cela conduit souvent les équipes à évoluer horizontalement, en partageant manuellement leurs données à partir d’un système monolithique sur plusieurs nœuds de base de données pour atteindre la résilience des données, entre autres.

    Ce n’est pas une tache facile. Cela oblige les ingénieurs à détourner l’attention du développement d’applications afin de construire un système résilient et fiable.

    C’est là que les bases de données SQL distribuées comme YugabyteDB entrent. Base de données SQL open source, cloud native et distribuée, YugabyteDB a éliminé le besoin de partitionnement manuel des données en gérant automatiquement la réplication des données.

    Dans cet article, je vais vous montrer à quel point il est facile d’utiliser YugabyteDB Voyager pour migrer une application Node.js soutenue par une base de données PostgreSQL à nœud unique vers un cluster YugabyteDB distribué.

    Commencer

    Nous pourrions exécuter PostgreSQL sur nos machines en utilisant une installation locale ou dans Docker, mais ici, je vais montrer comment migrer une version cloud native de PostgreSQL, hébergée sur Google Cloud Platform (GCP).

    Instance PostgreSQL v11 sur Google Cloud SQL nommée yb-pg-voyager et définissez mon adresse IP publique sur la liste des réseaux autorisés

    J’ai créé une instance PostgreSQL v11 sur Google Cloud SQL nommée yb-pg-voyager et définir mon adresse IP publique sur la liste des réseaux autorisés afin que je puisse me connecter directement depuis ma machine.

    Bien que bénéfique à des fins de démonstration, je vous recommande de vous connecter en toute sécurité depuis l’intérieur d’un VPC, avec des certificats SSL pour sécuriser correctement vos transferts de données.

    Maintenant que nous avons une instance dans le cloud, ensemençons-la avec des données. J’ai choisi d’exécuter cette application de commerce électronique Hasura, qui est livrée avec un schéma de base de données complet. La base de données est livrée avec de nombreuses tables, séquences, procédures stockées, déclencheurs, etc. Vous pouvez consulter le schéma ici.

    Maintenant, nous arrivons quelque part ! Connectons l’application à notre base de données pour vérifier la configuration.

    Se connecter depuis l’application

    En exécutant l’application Hasura E-Commerce avec notre configuration de base de données, nous pouvons vérifier que nous avons correctement configuré notre base de données Google Cloud SQL.

    Exécution de l'application Hasura E-Commerce avec notre configuration de base de donnéesMaintenant que nous sommes opérationnels, migrons notre base de données vers un cluster exécuté dans YugabyteDB Managed.

    YugabyteDB géré

    YugabyteDB prend en charge l’installation locale, mais je préfère utiliser une solution entièrement gérée. Après tout, nous migrons depuis Cloud SQL, il est donc logique de déplacer nos données vers une base de données SQL distribuée exécutée dans le cloud avec des mises à niveau automatiques et une surveillance des performances.

    Il faut moins de cinq minutes pour démarrer avec YugabyteDB Managed. Commencez par créer un compte, puis suivez les étapes pour créer un cluster YugabyteDB.

    J’ai choisi de déployer un cluster à trois nœuds sur AWS, dans la région us-west-2. Cette configuration fournira une tolérance aux pannes dans les zones de disponibilité.

    Déployer un cluster à trois nœuds sur AWS, dans la région us-west-2

    Ajoutez votre adresse IP à la liste d’autorisation du cluster afin de pouvoir vous connecter depuis votre ordinateur à la base de données distante et télécharger les informations d’identification de la base de données avant de créer votre cluster.

    Une fois que le cluster est opérationnel, il est temps de migrer votre base de données.

    Migrer avec YugabyteDB Voyager

    Une fois notre base de données en place, nous sommes prêts à migrer de Cloud SQL vers YugabyteDB à l’aide du moteur de migration de données open source, YugabyteDB Voyager.

    Après avoir installé YugabyteDB Voyager, nous allons commencer par créer des utilisateurs dans nos bases de données source et cible et leur attribuer des rôles.

    1. Créez le ybvoyager utilisateur dans Cloud SQL et accordez les autorisations :

    postgres=> CREATE USER ybvoyager PASSWORD 'password';
    CREATE ROLE
    postgres=> \c postgres
    psql (15.1, server 11.16)
    You are now connected to database "postgres" as user "postgres".
    postgres=> SELECT 'GRANT USAGE ON SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \gexec
    postgres=> SELECT 'GRANT SELECT ON ALL TABLES IN SCHEMA ' || schema_name || ' TO ybvoyager;' FROM information_schema.schemata; \gexec

    2. Répétez ce processus dans YugabyteDB Managed :

    yugabyte=> CREATE USER ybvoyager PASSWORD 'password';
    yugabyte=> GRANT yb_superuser TO ybvoyager;

    Ensuite, nous allons créer un répertoire d’exportation, qui est utilisé pour stocker nos données avant de les migrer. Pour les déploiements plus importants, vous devrez vous assurer d’exporter vos données vers une machine disposant d’un espace de stockage suffisant.

    > mkdir $HOME/export-dir
    > export EXPORT_DIR=$HOME/export-dir

    Maintenant, nous pouvons commencer à migrer nos données vers YugabyteDB.

    1. Utilisez la commande export schema pour commencer à utiliser le répertoire d’exportation que nous venons de créer.

    > yb-voyager export schema --export-dir ~/export-dir-gcp \                        
           --source-db-type postgresql \
           --source-db-host [CLOUD_SQL_HOST] \
           --source-db-user postgres \
           --source-db-password ‘[CLOUD_SQL_PASSWORD]’ \
           --source-db-name postgres \
           --source-db-schema public
    
    export of schema for source type as 'postgresql'
    postgresql version: 11.16
    exporting the schema           done
    
    Exported schema files created under directory: /Users/bhoyer/export-dir-gcp/schema
    

    2. Utilisez la commande analyze-schema pour vérifier que le schéma a été correctement exporté. S’il y a des problèmes avec les instructions DDL qui ont été générées, il y aura des instructions pour apporter des modifications mineures au schéma.

    > yb-voyager analyze-schema --export-dir ~/export-dir --output-format txt

    Cela produira le fichier texte suivant.

    Fichier texte

    Ensuite, nous exportons nos données :

    > yb-voyager export data --export-dir ~/export-dir-gcp \
           --source-db-type postgresql \
           --source-db-host [CLOUD_SQL_HOST] \
           --source-db-user postgres \
           --source-db-password '[CLOUD_SQL_PASSWORD]' \
           --source-db-name postgres \
           --source-db-schema public
    
    export of data for source type as 'postgresql'
    Num tables to export: 9
    table list for data export: [public.user public.address public.order public.order_status public.order_product public.product public.product_category_enum public.product_review public.site_admin]
    calculating approx num of rows to export for each table...
    Initiating data export.
    Data export started.
    Exported tables:- {public.address,  public.order,  public.order_product,  public.order_status,  public.product,  public.product_category_enum,  public.product_review,  public.site_admin,  public.user}
    
    TABLE                	ROW COUNT
    address              	497      
    order                	2400     
    order_product        	4636     
    order_status         	6        
    product              	25428    
    product_category_enum	32       
    product_review       	0        
    site_admin           	1        
    user                 	499      
    
    Export of data complete ✅

    Nous sommes à mi-chemin. Nous pouvons maintenant importer le schéma et les données dans notre instance YugabyteDB Managed. Vous devrez noter vos détails de connexion dans la console cloud.

    1. Commencez par importer le schéma depuis notre répertoire d’exportation.

    > yb-voyager import schema --export-dir ~/export-dir-gcp \
           --target-db-host [YB_MANAGED_HOST] \
           --target-db-user admin \
           --target-db-password [YB_MANAGED_PASSWORD]
           --target-db-name yugabyte \
           --target-db-schema public
    YugabyteDB version: 11.2-YB-2.15.3.2-b0
    schemas to be present in target database "yugabyte": [public]
    ...
    NOTE: Materialised Views are not populated by default. To populate them, pass --refresh-mviews while executing `import schema --post-import-data`.

    YugabyteDB Voyager a pris avec succès le schéma, que nous avons exporté vers le répertoire d’exportation sur notre machine, et a créé les mêmes tables dans YugabyteDB Managed.

    2. Ensuite, importez les données de notre répertoire d’exportation.

    > yb-voyager import data --export-dir ~/export-dir-gcp \
           --target-db-host [YB_MANAGED_HOST] \
           --target-db-user admin \
           --target-db-password [YB_MANAGED_PASSWORD]
           --target-db-name yugabyte \
           --target-db-schema public
    import of data in "yugabyte" database started
    Target YugabyteDB version: 11.2-YB-2.15.3.2-b0
    Warning: Based on internal anaylsis, --target-db-host is identified as a load balancer IP which will be used to create connections for data import.
    	 To control the parallelism and servers used, refer to help for --parallel-jobs and --target-endpoints flags.
    Using 2 parallel jobs by default. Use --parallel-jobs to specify a custom value
    skipping already imported tables: []
    Preparing to import the tables: [address order order_product order_status product product_category_enum product_review site_admin user]
    order
    

    Comme nous pouvons le voir dans la sortie, YugabyteDB Voyager gère cette importation de données avec parallélisme, ce qui en fait un travail rapide.

    3. Pour conclure, importez les index et les déclencheurs.

    > yb-voyager import data --export-dir ~/export-dir-gcp \
           --target-db-host [YB_MANAGED_HOST] \
           --target-db-user admin \
           --target-db-password [YB_MANAGED_PASSWORD]
           --target-db-name yugabyte \
           --target-db-schema public
    	--post-import-schema
    YugabyteDB version: 11.2-YB-2.15.3.2-b0
    trigger.sql: CREATE TRIGGER set_address_updated_at BEFORE UPDATE ON public.address FOR EACH R ...
    . . .

    Nous pouvons maintenant dire au revoir à notre base de données fonctionnant dans GCP et connecter notre application à YugabyteDB Managed !

    Connexion à YugabyteDB Managed

    La migration de notre base de données PostgreSQL vers YugabyteDB Managed a été un jeu d’enfant. Changer notre application pour se connecter à YugabyteDB est tout aussi simple. YugabyteDB est compatible avec PostgreSQL, il nous suffit donc de modifier nos détails de connexion.

    ... 
    HASURA_GRAPHQL_DATABASE_URL: postgresql://admin:[YB_MANAGED_PASSWORD]@[YB_MANAGED_HOST]:5433/yugabyte
    PG_DATABASE_URL: postgresql://admin:[YB_MANAGED_PASSWORD]@[YB_MANAGED_HOST]:5433/yugabyte
    ...
    

    En exécutant à nouveau notre application, nous pouvons vérifier que notre base de données a été migrée avec succès.

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.