PostgreSQL ou Postgres est un système de gestion de base de données relationnelle objet open source (ORDBMS) avec plus de 15 ans de développement actif. C'est un serveur de base de données puissant qui peut gérer des charges de travail élevées. PostgreSQL peut être utilisé sur les serveurs Linux, Unix, BSD et Windows.
La réplication de base de données maître/esclave est un processus de copie (synchronisation) des données d'une base de données sur un serveur (le maître) vers une base de données sur un autre serveur (l'esclave). Le principal avantage de ce processus est de distribuer les bases de données sur plusieurs machines. Ainsi, lorsque le serveur maître rencontre un problème, une machine de sauvegarde avec les mêmes données est disponible pour traiter les demandes sans interruption.
PostgreSQL propose plusieurs façons de répliquer une base de données. Il peut être utilisé à des fins de sauvegarde et pour fournir un serveur de base de données à haute disponibilité. Dans ce tutoriel, nous allons vous montrer comment installer et configurer la réplication maître-esclave PostgreSQL 9.6 sur un serveur CentOS 7. Nous utiliserons le mode Hot standby, et c'est un très bon point de départ pour apprendre PostgreSQL en profondeur.
Ce que nous allons faire
- Installer PostgreSQL 9.6
- Démarrer et configurer PostgreSQL 9.6
- Configurer le pare-feu
- Configurer le serveur maître
- Configurer le serveur esclave
- Test
Prérequis
- 1 serveur CentOS 7
- Maître - Autorisation de lecture et d'écriture - IP :10.0.15.10
- 1 serveur CentOS 7
- Esclave - Autorisation de lecture uniquement - IP :10.0.15.11
- Privilèges racine
Étape 1 - Installer PostgreSQL 9.6
Dans ce didacticiel, nous expliquerons comment installer la dernière version 9.6 de PostgreSQL sur le serveur CentOS 7. Par défaut, le référentiel officiel CentOS propose une version plus ancienne, nous devons donc installer PostgreSQL à partir du référentiel officiel.
Ajoutez le nouveau référentiel PostgreSQL 9.6 au système.
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Installez maintenant PostgreSQL 9.6 à l'aide de la commande yum suivante.
yum -y install postgresql96-server postgresql96-contrib
Ainsi, vous pouvez installer PostgreSQL 9.6.
Étape 2 - Démarrer et configurer PostgreSQL 9.6
Avant de démarrer le service postgres, nous devons initialiser la base de données. Pour cela, allez dans '/usr/pgsql-9.6/bin ' et initialisez la base de données avec postgres setup 'postgresql96-setup '.
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Ensuite, démarrez le service postgres et activez-le pour qu'il démarre automatiquement au démarrage du système.
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Par défaut, postgres s'exécute sur le port 5432. Assurez-vous donc que l'état du port 5432 est 'LISTEN ' en exécutant la commande netstat de la manière suivante.
netstat -plntu
Si vous n'avez pas de commande netstat, installez net-tools. Cela fait partie des net-tools.
yum -y install net-tools
Donc PostgreSQL 9.6 a été lancé. Mais nous devons encore configurer le mot de passe pour l'utilisateur postgres. Connectez-vous en tant qu'utilisateur 'postgres', puis accédez au shell postgres 'psql'.
su - postgres
psql
Donnez le 'postgres ' utilisateur nouveau mot de passe avec la requête ci-dessous.
\password postgres
Enter new password:
Donc PostgreSQL 9.6 a été démarré et un nouveau mot de passe pour l'utilisateur postgres a été configuré.
Étape 3 - Configurer Firewalld
Firewalld est par défaut un outil de gestion de pare-feu sur CentOS 7. Nous allons démarrer ce service et ouvrir le port pour la connexion PostgreSQL.
Démarrez firewalld et activez-le pour qu'il démarre automatiquement au démarrage du système à l'aide des commandes suivantes :
systemctl start firewalld
systemctl enable firewalld
Ensuite, ajoutez le nouveau service postgres à firewalld avec les commandes suivantes.
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Vérifiez maintenant le port ouvert du service.
firewall-cmd --list-all
Et vous verrez que le service PostgreSQL a été ajouté au pare-feu.
REMARQUE : Exécutez les étapes 1, 2 et 3 sur tous les maîtres et esclaves.
Étape 4 - Configurer le serveur maître
Dans cette étape, nous allons configurer un serveur maître pour la réplication. Il s'agit du serveur principal, permettant le processus de lecture et d'écriture à partir des applications qui y sont exécutées. PostgreSQL sur le maître s'exécute uniquement sur l'adresse IP '10.0.15.10' et effectue la réplication en continu vers le serveur esclave.
Allez dans le répertoire de données pgsql '/var/lib/pgsql/9.6/data ' et éditez le fichier de configuration 'postgresql.conf '.
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Décommentez la ligne 'listen_addresses' et changez la valeur de l'adresse IP du serveur en '10.0.15.10'.
listen_addresses = '10.0.15.10'
Décommentez la ligne 'wal_level' et changez la valeur en 'hot_standby '.
wal_level = hot_standby
Pour le niveau de synchronisation, nous utiliserons la synchronisation locale. Décommentez et modifiez la ligne de valeur comme ci-dessous.
synchronous_commit = local
Activez le mode d'archivage et donnez à la variable archive_command une commande comme valeur.
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Pour les paramètres "Réplication", décommentez la ligne "wal_sender" et remplacez la valeur par 2 (dans ce didacticiel, nous n'utilisons que 2 serveurs maître et esclave), et pour la valeur "wal_keep_segments", la valeur est 10.
max_wal_senders = 2
wal_keep_segments = 10
Pour le nom de l'application, décommentez la ligne 'synchronous_standby_names' et remplacez la valeur par 'pgslave01 '.
synchronous_standby_names = 'pgslave01'
C'est ça. Enregistrez ces modifications et quittez l'éditeur.
Ensuite, dans le fichier postgresql.conf, le mode archive est activé, nous devons donc créer un nouveau répertoire à des fins d'archivage.
Créez un nouveau répertoire, modifiez ses autorisations et remplacez le propriétaire par l'utilisateur postgres.
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Modifiez maintenant le fichier pg_hba.conf.
vim pg_hba.conf
Collez la configuration ci-dessous jusqu'à la fin de la ligne.
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
Sauvegarder et quitter. Toute la configuration est terminée. Maintenant, redémarrez PostgreSQL 9.6 en utilisant la commande suivante.
systemctl restart postgresql-9.6
Ensuite, nous devons créer un nouvel utilisateur avec des privilèges de réplication. Nous allons créer un nouvel utilisateur nommé 'réplica '.
Connectez-vous en tant qu'utilisateur postgres et créez un nouveau 'réplica ' utilisateur avec mot de passe '[email protected] '.
su - postgres
createuser --replication -P replica
Enter New Password:
Ainsi, avec cela, la configuration principale de PostgreSQL 9.6 est terminée et l'utilisateur pour la réplication est créé.
Étape 5 - Configurer le serveur esclave
Dans cette étape, nous allons configurer le serveur esclave. Nous voulons remplacer le répertoire de données postgres sur le serveur esclave par les données postgres du serveur maître, puis configurer le serveur esclave pour qu'il s'exécute sous l'adresse IP '10.0.15.11', et enfin activer hot_standby dessus pour autoriser uniquement la lecture sans écriture.
Avant de commencer à configurer le serveur esclave, arrêtez le service postgres à l'aide de la commande systemctl ci-dessous.
systemctl stop postgresql-9.6
Ensuite, allez dans le répertoire postgres et dans le répertoire des données de sauvegarde.
cd /var/lib/pgsql/9.6/
mv data data-backup
Créez un nouveau répertoire de données et modifiez les autorisations de propriété du répertoire pour l'utilisateur postgres.
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Ensuite, connectez-vous en tant qu'utilisateur postgres et copiez tous les répertoires de données du 'Master ' au serveur 'Esclave ' serveur en tant qu'utilisateur de réplique.
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
Tapez votre mot de passe et attendez le transfert des données du serveur maître vers le serveur esclave.
Une fois le transfert terminé, accédez au répertoire de données postgres et modifiez le fichier postgresql.conf sur le serveur esclave.
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Remplacez la valeur de 'listen_addresses' par l'adresse IP du serveur esclave '10.0.15.11'.
listen_addresses = '10.0.15.11'
Activer 'hot_standby ' sur le serveur esclave en décommentant la ligne suivante et en changeant la valeur en 'on '.
hot_standby = on
C'est ça. Enregistrez les modifications et quittez l'éditeur.
Créez ensuite un nouveau 'recovery.conf ' fichier avec vim.
vim recovery.conf
Collez-y la configuration suivante.
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Enregistrez les modifications et quittez le fichier.
Remarque : Sur primary_conninfo , saisissez les détails de votre propre serveur.
Remplacez les autorisations de propriété du fichier recovery.conf par celles de l'utilisateur 'postgres'.
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
Et démarrez PostgreSQL 9.6 sur le serveur esclave.
systemctl start postgresql-9.6
La configuration du serveur esclave est terminée.
Maintenant, lorsque vous vérifiez le serveur esclave, vous verrez que PostgreSQL 9.6 est en cours d'exécution sur le serveur avec l'adresse IP '10.0.15.11 '.
netstat -plntu
Étape 6 - Tester
L'installation et la configuration de la réplication maître-esclave PostgreSQL 9.6 sont terminées. Pour tester la configuration, vérifiez le flux d'état de la réplication et testez la réplication des données du maître vers l'esclave.
Connectez-vous au serveur maître et passez à l'utilisateur postgres.
su - postgres
Ensuite, vérifiez la réplication de l'état de diffusion de PostgreSQL avec les commandes suivantes.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Vous devriez voir que la valeur d'état est 'streaming ', et le sync_state est 'sync '.
Ensuite, testez en insérant les données du maître, puis vérifiez toutes les données sur le serveur esclave.
Connectez-vous en tant qu'utilisateur postgres et accédez au shell PostgreSQL sur le 'MASTER ' serveur.
su - postgres
psql
Créer une nouvelle table 'replica_test ' et insérez-y des données avec les requêtes d'insertion suivantes.
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
Et maintenant, connectez-vous au 'SLAVE ' serveur similaire à la façon dont vous l'avez fait sur le maître.
su - postgres
psql
Vérifiez toutes les données de la table 'replica_test' à l'aide de la requête ci-dessous.
select * from replica_test;
Vous verrez donc que toutes les données sont répliquées du 'MASTER ' au serveur 'ESCLAVE ' serveur.
Test supplémentaire
Testez pour effectuer l'action 'WRITE' depuis le serveur 'SLAVE'.
INSERT INTO replica_test VALUES ('this is SLAVE');
Et le résultat devrait être 'Impossible d'exécuter INSERT '.
L'installation et la configuration de la réplication maître-esclave PostgreSQL 9.6 sur CentOS 7 sont donc réussies.
Références
- https://www.postgresql.org/download/linux/redhat/
- https://www.server-world.info/en/note?os=CentOS_7