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.
Avantages de la réplication logique
Certains avantages de la réplication logique sont mentionnés ci-dessous.
Inconvénients de la réplication logique
Certaines limites de la réplication logique sont mentionnées ci-dessous.
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.