Comment configurer la réplication logique postgresql sur Ubuntu

Comment configurer la réplication logique postgresql sur Ubuntu
«Les données sont une partie très importante de toute application. PostgreSQL est un serveur de base de données populaire pour stocker les données de l'application. La disponibilité des données est une caractéristique essentielle de toute base de données. Il est préférable de conserver plusieurs copies de la base de données pour assurer la disponibilité des données de l'application. Si aucune copie de sauvegarde de la base de données n'est stockée et si la base de données se bloque à tout moment, l'application ne sera pas accessible. Une ou plusieurs copies de la base de données PostgreSQL peuvent être stockées pour éviter cette situation, et elle est appelée réplication. Deux types de réplication peuvent être effectués sur PostgreSQL. Ce sont une réplication logique et une réplication physique. La voie de configurer la réplication logique de la base de données PostgreSQL a été expliquée dans ce tutoriel."

Réplication logique

La façon de reproduire les objets de données et leurs modifications est appelée réplication logique. Il fonctionne basé sur la publication et l'abonnement. Il utilise WAL (journalisation d'écriture) pour enregistrer les changements logiques dans la base de données. Les modifications apportées à la base de données sont publiées sur la base de données de l'éditeur, et l'abonné reçoit la base de données répliquée de l'éditeur en temps réel pour assurer la synchronisation de la base de données.

L'architecture de la réplication logique

Le modèle éditeur / abonné est utilisé dans la réplication logique de PostgreSQL. L'ensemble de réplication est publié sur le nœud de l'éditeur. Une ou plusieurs publication sont souscrites par le nœud abonné. La réplication logique copie un instantané de la base de données de publication à l'abonné, qui est appelé la phase de synchronisation du tableau. La cohérence transactionnelle est maintenue en utilisant Commit lorsqu'une modification est effectuée sur le nœud d'abonné. La méthode manuelle de réplication logique postgresql a été montrée dans la partie suivante de ce tutoriel.

Le processus de réplication logique est illustré dans le diagramme suivant.

Tous les types d'opérations (insérer, mettre à jour et supprimer) sont reproduits en réplication logique par défaut. Mais les changements dans l'objet qui seront reproduits peuvent être limités. L'identité de réplication doit être configurée pour l'objet qui est nécessaire pour ajouter à la publication. La clé primaire ou index est utilisée pour l'identité de réplication. Si le tableau de la base de données source ne contient aucune clé primaire ou index, alors le complet sera utilisé pour l'identité réplique. Cela signifie que toutes les colonnes de la table seront utilisées comme clé. La publication sera créée dans la base de données source en utilisant la commande de publication Create, et l'abonnement sera créé dans la base de données de destination en utilisant la commande de création d'abonnement. L'abonnement peut être arrêté ou repris en utilisant la commande alter abonnement et supprimé par la commande d'abonnement Drop. La réplication logique est implémentée par l'expéditeur WAL, et il est basé sur le décodage WAL. Le Wal Sender charge le plugin de décodage logique standard. Ce plugin transforme les modifications récupérées du WAL dans le processus de réplication logique, et les données sont filtrées en fonction de la publication. Ensuite, les données sont transférées en continu en utilisant le protocole de réplication au travailleur de réplication qui mappe les données avec le tableau de la base de données de destination et applique les modifications basées sur l'ordre transactionnel.

Caractéristiques de réplication logique

Certaines caractéristiques importantes de la réplication logique ont été mentionnées ci-dessous.

  • Les objets de données se reproduisent en fonction de l'identité de réplication, comme la clé principale ou la clé unique.
  • Différents index et définitions de sécurité peuvent être utilisés pour écrire des données dans le serveur de destination.
  • Le filtrage basé sur des événements peut être effectué en utilisant une réplication logique.
  • La réplication logique prend en charge la version croisée. Cela signifie qu'il peut être mis en œuvre entre deux versions différentes de la base de données PostgreSQL.
  • Les abonnements multiples sont soutenus par la publication.
  • Le petit ensemble de tables peut être reproduit.
  • Il faut une charge de serveur minimum.
  • Il peut être utilisé pour les mises à niveau et la migration.
  • Il permet un streaming parallèle parmi les éditeurs.

Avantages de la réplication logique

Certains avantages de la réplication logique sont mentionnés ci-dessous.

  • Il est utilisé pour la réplication entre deux versions différentes des bases de données PostgreSQL.
  • Il peut être utilisé pour reproduire les données entre différents groupes d'utilisateurs.
  • Il peut être utilisé pour rejoindre plusieurs bases de données dans une seule base de données à des fins analytiques.
  • Il peut être utilisé pour envoyer des modifications incrémentielles dans un sous-ensemble d'une base de données ou d'une seule base de données à d'autres bases de données.

Inconvénients de la réplication logique

Certaines limites de la réplication logique sont mentionnées ci-dessous.

  • Il est obligatoire d'avoir la clé principale ou la clé unique dans le tableau de la base de données source.
  • Le nom complet de la table est requis entre la publication et l'abonnement. Si le nom de la table n'est pas le même pour la source et la destination, alors la réplication logique ne fonctionnera pas.
  • Il ne prend pas en charge la réplication bidirectionnelle.
  • Il ne peut pas être utilisé pour reproduire le schéma / DDL.
  • Il ne peut pas être utilisé pour reproduire tronqué.
  • Il ne peut pas être utilisé pour reproduire les séquences.
  • Il est obligatoire d'ajouter des privilèges de super utilisateur à toutes les tables.
  • Un ordre différent de colonnes peut être utilisé dans le serveur de destination, mais les noms de colonne doivent être les mêmes pour l'abonnement et la publication.

Implémentation de réplication logique

Les étapes de l'implémentation de la réplication logique dans la base de données PostgreSQL ont été présentées dans cette partie de ce tutoriel.

Conditions préalables

UN. Configurer le maître et les nœuds répliques

Vous pouvez définir le maître et les nœuds répliques de deux manières. Une façon consiste à utiliser deux ordinateurs distincts où le système d'exploitation Ubuntu est installé, et une autre façon consiste à utiliser deux machines virtuelles qui sont installées sur le même ordinateur. Le processus de test du processus de réplication physique sera plus facile si vous utilisez deux ordinateurs distincts pour le nœud maître et le nœud de réplique car une adresse IP spécifique peut être facilement attribuée pour chaque ordinateur. Mais si vous utilisez deux machines virtuelles sur le même ordinateur, l'adresse IP statique devra être définie pour chaque machine virtuelle et s'assurer que les deux machines virtuelles peuvent communiquer entre elles via l'adresse IP statique. J'ai utilisé deux machines virtuelles pour tester le processus de réplication physique dans ce tutoriel. Le nom d'hôte du maître Le nœud a été défini sur Fahmida-Master, et le nom d'hôte du réplique Le nœud a été défini sur fahmida-esclave ici.

B. Installez PostgreSQL sur les nœuds maître et répliques

Vous devez installer la dernière version du serveur de base de données PostgreSQL sur deux machines avant de démarrer les étapes de ce tutoriel. La version 14 de PostgreSQL a été utilisée dans ce tutoriel. Exécutez les commandes suivantes pour vérifier la version installée du PostgreSQL dans le nœud maître.

Exécutez la commande suivante pour devenir un utilisateur racine.

$ sudo -i

Exécutez les commandes suivantes pour vous connecter en tant qu'utilisateur de Postgres avec des privilèges SuperUser et établissez la connexion avec la base de données PostgreSQL.

$ su - Postgres
$ psql

La sortie montre que PostgreSQL version 14.4 a été installé sur Ubuntu version 22.04.1.

Configurations de nœud primaire

Les configurations nécessaires pour le nœud principal ont été présentées dans cette partie du tutoriel. Après avoir configuré la configuration, vous devez créer une base de données avec le tableau dans le nœud principal et créer un rôle et une publication pour recevoir une demande du nœud de réplique, et stocker le contenu mis à jour du tableau dans le nœud de réplique.

UN. Modifier le postgresql.confli déposer

Vous devez configurer l'adresse IP du nœud principal dans le fichier de configuration PostgreSQL nommé postgresql.confli qui est situé sur l'emplacement, / etc / postgresql / 14 / main / postgresql.confli. Connectez-vous en tant qu'utilisateur racine dans le nœud principal et exécutez la commande suivante pour modifier le fichier.

$ nano / etc / postgresql / 14 / main / postgresql.confli

Découvrez le écouter_address variable dans le fichier, supprimez le hachage (#) du début de la variable pour décommenter la ligne. Vous pouvez définir un astérisque (*) ou l'adresse IP du nœud principal pour cette variable. Si vous définissez Asterisk (*), le serveur principal écoutera toutes les adresses IP. Il écoutera l'adresse IP spécifique si l'adresse IP du serveur principal est définie sur cette variable. Dans ce didacticiel, l'adresse IP du serveur principal qui a été définie sur cette variable est 192.168.dix.5.

écouter_addressess = ""

Ensuite, découvrez le Wal_level variable pour définir le type de réplication. Ici, la valeur de la variable sera logique.

wal_level = logique

Exécutez la commande suivante pour redémarrer le serveur PostgreSQL après avoir modifié le postgresql.confli déposer.

$ systemctl redémarrer postgresql

*** Remarque: Après la configuration de la configuration, si vous faites face à un problème démarrant le serveur PostgreSQL, exécutez les commandes suivantes pour la version 14 PostgreSQL.

$ sudo chmod 700 -r / var / lib / postgresql / 14 / main
$ sudo -i -u postgres
# / usr / lib / postgresql / 10 / bin / pg_ctl redémarrage -d / var / lib / postgresql / 10 / main

Vous pourrez vous connecter avec le serveur PostgreSQL après avoir exécuté la commande ci-dessus.

Connectez-vous au serveur PostgreSQL et exécutez l'instruction suivante pour vérifier la valeur actuelle du niveau WAL.

# Show wal_level;

B. Créer une base de données et une table

Vous pouvez utiliser n'importe quelle base de données PostgreSQL existante ou créer une nouvelle base de données pour tester le processus de réplication logique. Ici, une nouvelle base de données a été créée. Exécutez la commande SQL suivante pour créer une base de données nommée échantillonné.

# Créer une base de données SampledB;

La sortie suivante apparaîtra si la base de données est créée avec succès.

Vous devez modifier la base de données pour créer un tableau pour le échantillonné. Le «\ c» avec le nom de la base de données est utilisé dans PostgreSQL pour modifier la base de données actuelle.

L'instruction SQL suivante modifiera la base de données actuelle de Postgres à SampledB.

# \ c SampledB

L'instruction SQL suivante créera un nouveau tableau nommé livre dans la base de données échantillonnée. La table contiendra trois champs. Ce sont des identifiants, un titre et un auteur_.

# Créer un livre de table (
Clé primaire en série ID,
Titre Varchar (50),
AUDOR_NAME VARCHAR (50));

La sortie suivante apparaîtra après avoir exécuté les instructions SQL ci-dessus.

Exécutez les deux instructions d'insertion suivantes pour insérer deux enregistrements dans le tableau du livre.

# Insérer dans le livre (titre, auteur_name)
VALEURS («Postgresql 14 Administration Cookbook», «Simon Riggs, Gianni Ciolli»);
# Insérer dans le livre (titre, auteur_name)
VALEURS («Apprendre Postgresql», «Luca Ferrari, Enrico Pirozzi»);

La sortie suivante apparaîtra si les enregistrements sont insérés avec succès.

Exécutez la commande suivante pour créer un rôle avec le mot de passe qui sera utilisé pour établir une connexion avec le nœud principal à partir du nœud de réplique.

# Créer le mot de passe de la réplication de la réplication de la réplication du rôle '12345';

La sortie suivante apparaîtra si le rôle est créé avec succès.

Exécutez la commande suivante pour accorder toutes les autorisations sur le livre table pour le répliquant.

# Grant tout sur le livre à la réplique;

La sortie suivante apparaîtra si l'autorisation est accordée pour le répliquant.

C. Modifier le pg_hba.confli déposer

Vous devez configurer l'adresse IP du nœud de réplique dans le fichier de configuration PostgreSQL nommé pg_hba.confli qui est situé sur l'emplacement, / etc / postgresql / 14 / main / pg_hba.confli. Connectez-vous en tant qu'utilisateur racine dans le nœud principal et exécutez la commande suivante pour modifier le fichier.

$ nano / etc / postgresql / 14 / main / pg_hba.confli

Ajouter les informations suivantes à la fin de ce fichier.

héberger / 32 Scram-Sha-256

L'IP du serveur esclave est définie sur «192.168.dix.10 ”ici. Selon les étapes précédentes, la ligne suivante a été ajoutée au fichier. Ici, le nom de la base de données est échantillonné, l'utilisateur est répliquant, et l'adresse IP du serveur de répliques est 192.168.dix.dix.

hôte Sampedb Replicauser 192.168.dix.10/32 SCRAM-SHA-256

Exécutez la commande suivante pour redémarrer le serveur PostgreSQL après avoir modifié le pg_hba.confli déposer.

$ systemctl redémarrer postgresql

D. Créer une publication

Exécutez la commande suivante pour créer une publication pour le livre tableau.

# Créer une publication BookPub pour le livre de table;

Exécutez la méta-command PSQL suivante pour vérifier que la publication est créée avec succès ou non.

$ \ drp+

La sortie suivante apparaîtra si la publication est créée avec succès pour le tableau livre.

Configurations de nœuds de réplique

Vous devez créer une base de données avec la même structure de table qui a été créée dans le nœud principal dans le nœud de réplique et créer un abonnement pour stocker le contenu mis à jour du tableau à partir du nœud principal.

UN. Créer une base de données et une table

Vous pouvez utiliser n'importe quelle base de données PostgreSQL existante ou créer une nouvelle base de données pour tester le processus de réplication logique. Ici, une nouvelle base de données a été créée. Exécutez la commande SQL suivante pour créer une base de données nommée réplicadb.

# Créer une base de données ReplicAdB;

La sortie suivante apparaîtra si la base de données est créée avec succès.

Vous devez modifier la base de données pour créer un tableau pour le réplicadb. Utilisez le «\ c» avec le nom de la base de données pour modifier la base de données actuelle comme avant.

L'instruction SQL suivante modifiera la base de données actuelle de postgres pour réplicadb.

# \ c réplicadb

L'instruction SQL suivante créera un nouveau tableau nommé livre dans le réplicadb base de données. Le tableau contiendra les trois mêmes champs que le tableau créé dans le nœud principal. Ce sont des identifiants, un titre et un auteur_.

# Créer un livre de table (
Clé primaire en série ID,
Titre Varchar (50),
AUDOR_NAME VARCHAR (50));

La sortie suivante apparaîtra après avoir exécuté les instructions SQL ci-dessus.

B. Créer un abonnement

Exécutez l'instruction SQL suivante pour créer un abonnement pour la base de données du nœud principal pour récupérer le contenu mis à jour du tableau du livre du nœud principal au nœud de réplique. Ici, le nom de la base de données du nœud principal est échantillonné, L'adresse IP du nœud principal est «192.168.dix.5», Le nom d'utilisateur est répliquant, Et le mot de passe est «12345".

# Créer des livres d'abonnement Connexionb Connexion 'dbname = SampledB host = 192.168.dix.5 utilisateur = mot de passe réplicauser = 12345 port = 5432 'publication bookpub;

La sortie suivante apparaîtra si l'abonnement est créé avec succès dans le nœud de réplique.

Exécutez la méta-command PSQL suivante pour vérifier que l'abonnement est créé avec succès ou non.

# \ drs+

La sortie suivante apparaîtra si l'abonnement est créé avec succès pour le tableau livre.

C. Vérifiez le contenu de la table dans le nœud de réplique

Exécutez la commande suivante pour vérifier le contenu de la table du livre dans le nœud de réplique après l'abonnement.

# livre de table;

La sortie suivante montre que deux enregistrements insérés dans le tableau du nœud principal ont été ajoutés au tableau du nœud de réplique. Il est donc clair que la réplication logique simple a été terminée correctement.

Vous pouvez ajouter un ou plusieurs enregistrements ou mettre à jour des enregistrements ou supprimer des enregistrements dans le tableau du livre du nœud principal ou ajouter une ou plusieurs tables dans la base de données sélectionnée du nœud principal et vérifier la base de données du nœud de réplique pour vérifier que le contenu mis à jour du contenu mis à jour La base de données principale est répliquée correctement dans la base de données du nœud de réplique ou non.

Insérez de nouveaux enregistrements dans le nœud principal:

Exécutez les instructions SQL suivantes pour insérer trois enregistrements dans le livre Tableau du serveur principal.

# Insérer dans le livre (titre, auteur_name)
Valeurs («L'art de Postgresql», «Dimitri Fontaine»),
('PostgreSQL: Informatique, 3e édition', «Regina OBE et Leo Hsu»),
(«Postgresql High Performance Cookbook», «Chitij Chauhan, Dinesh Kumar»);

Exécutez la commande suivante pour vérifier le contenu actuel du livre table dans le nœud primaire.

# Select * dans le livre;

La sortie suivante montre que trois nouveaux enregistrements ont été correctement insérés dans le tableau.

Vérifiez le nœud de réplique après insertion

Maintenant, vous devez vérifier si le livre Le tableau du nœud de réplique a été mis à jour ou non. Connectez-vous au serveur postgresql du nœud de réplique et exécutez la commande suivante pour vérifier le contenu du livre tableau.

# livre de table;

La sortie suivante montre que trois nouveaux enregistrements ont été insérés dans le livres Tableau du réplique nœud qui a été inséré dans le primaire nœud du livre tableau. Ainsi, les modifications dans la base de données principale ont été répliquées correctement dans le nœud de réplique.

Mettre à jour l'enregistrement dans le nœud principal

Exécutez la commande de mise à jour suivante qui mettra à jour la valeur du nom de l'auteur champ où la valeur du champ ID est 2. Il n'y a qu'un seul enregistrement dans le livre table qui correspond à l'état de la requête de mise à jour.

# Mettez à jour le jeu de livres auteur_name = «Fahmida» où id = 2;

Exécutez la commande suivante pour vérifier le contenu actuel du livre table dans le primaire nœud.

# Select * dans le livre;

La sortie suivante montre que L'auteur_nom La valeur de champ de l'enregistrement particulier a été mise à jour après l'exécution de la requête de mise à jour.

Vérifiez le nœud de réplique après la mise à jour

Maintenant, vous devez vérifier si le livre Le tableau du nœud de réplique a été mis à jour ou non. Connectez-vous au serveur postgresql du nœud de réplique et exécutez la commande suivante pour vérifier le contenu du livre tableau.

# livre de table;

La sortie suivante montre qu'un enregistrement a été mis à jour dans le livre Tableau du nœud de réplique, qui a été mis à jour dans le nœud principal du livre tableau. Ainsi, les modifications dans la base de données principale ont été répliquées correctement dans le nœud de réplique.

Supprimer l'enregistrement dans le nœud principal

Exécutez la commande de suppression suivante qui supprimera un enregistrement du livre Tableau du primaire Node où la valeur du champ Auteur_name est «Fahmida». Il n'y a qu'un seul enregistrement dans le livre table qui correspond à l'état de la requête de suppression.

# Supprimer du livre où auteur_name = «Fahmida»;

Exécutez la commande suivante pour vérifier le contenu actuel du livre table dans le primaire nœud.

# Select * dans le livre;

La sortie suivante montre qu'un enregistrement a été supprimé après avoir exécuté la requête de suppression.

Vérifiez le nœud de réplique après la suppression

Maintenant, vous devez vérifier si le livre Le tableau du nœud de réplique a été supprimé ou non. Connectez-vous au serveur postgresql du nœud de réplique et exécutez la commande suivante pour vérifier le contenu du livre tableau.

# livre de table;

La sortie suivante montre qu'un enregistrement a été supprimé dans le livre Tableau du nœud de réplique, qui a été supprimé dans le nœud principal du livre tableau. Ainsi, les modifications dans la base de données principale ont été répliquées correctement dans le nœud de réplique.

Conclusion

Le but de la réplication logique pour maintenir la sauvegarde de la base de données, l'architecture de la réplication logique, les avantages et les inconvénients de la réplication logique, et les étapes de la mise en œuvre de la réplication logique dans la base de données PostgreSQL ont été expliquées dans ce didacticiel avec des exemples. J'espère que le concept de réplication logique sera effacé pour les utilisateurs, et les utilisateurs pourront utiliser cette fonctionnalité dans leur base de données PostgreSQL après avoir lu ce tutoriel.