GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer la réplication maître-esclave pour PostgreSQL 9.6 sur Ubuntu 16.04

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 et 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 (les esclaves). 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 le serveur Ubuntu 16.04. 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 :

  1. Installez PostgreSQL 9.6.
  2. Configurer le pare-feu UFW.
  3. Configurer le serveur MAÎTRE.
  4. Configurer le serveur ESCLAVE.
  5. Copier les données PostgreSQL du MAITRE vers l'ESCLAVE.
  6. Test.

Prérequis :

  • 1 serveur Ubuntu 16.04
    • MAÎTRE - Autoriser la lecture et l'écriture - IP :10.0.15.10
  • 1 serveur Ubuntu 16.04
    • ESCLAVE - Lecture seule - IP :10.0.15.11
  • Privilèges racine

Étape 1 - Installer PostgreSQL 9.6

Dans ce tutoriel, nous allons installer la dernière version de PostgreSQL 9.6. Dans le référentiel officiel Ubuntu, ils ne fournissent que PostgreSQL 9.5, nous devons donc installer directement la dernière version à partir du référentiel PostgreSQL.

Ajoutez le dépôt postgreSQL 9.6 au répertoire sources.list.d.

echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list

Et importez la clé de signature PostgreSQL dans le système.

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Maintenant, mettez à jour le référentiel système avec la commande apt.

apt-get update

Ensuite, installez le package PosgreSQL 9.6 avec la commande apt ci-dessous.

apt-get install -y postgresql-9.6 postgresql-contrib-9.6

Si l'installation est terminée, ajoutez-la pour qu'elle démarre automatiquement au démarrage.

systemctl enable postgresql

Par défaut, PostgreSQL s'exécute sur l'adresse IP localhost (127.0.0.1) avec le port 5432 sur Ubuntu, vérifiez-le avec la commande netstat.

netstat -plntu

PostgreSQL 9.6 est en cours d'exécution sur le système. À l'étape suivante, nous devons configurer un mot de passe pour l'utilisateur postgres.

Depuis le compte root, connectez-vous à l'utilisateur postgres avec la commande su, puis accédez au terminal frontal postgres psql.

su - postgres
psql

Veuillez modifier le mot de passe de l'utilisateur postgres et vérifier les informations de connexion avec les requêtes postgres ci-dessous.

\password postgres
\conninfo

PostgreSQL 9.6 a été installé sur le système, s'exécute sans erreur et le mot de passe de l'utilisateur postgres a été mis à jour.

Étape 2 - Configurer le pare-feu UFW

UFW ou Uncomplicated Firewall est une application pour gérer le pare-feu basé sur iptables sur Ubuntu. UFW est l'outil de configuration de pare-feu par défaut pour Ubuntu Linux et fournit un moyen convivial de configurer le pare-feu.

Nous pouvons installer ufw à partir du référentiel principal Ubuntu avec la commande apt.

apt-get install -y ufw

Ajoutez de nouveaux services au pare-feu UFW :ajoutez les services SSH et PostgreSQL avec les commandes ci-dessous.

ufw allow ssh
ufw allow postgresql

Activez le pare-feu UFW et vérifiez l'état.

ufw enable
ufw status

Le pare-feu UFW a été installé et le service PostgreSQL a été ajouté.

REMARQUE :

Exécutez les étapes 1 et 2 sur le serveur MAÎTRE et ESCLAVE.

Étape 3 - Configurer le serveur PostgreSQL MASTER

Le serveur maître a l'adresse IP 10.0.15.10 et le service postgres s'exécutera sous cette adresse IP avec le port par défaut. Le serveur maître aura l'autorisation de lire et d'écrire dans la base de données et d'effectuer une réplication en continu vers le serveur esclave.

Allez dans le répertoire de configuration de postgres '/etc/postgresql/9.6/main ' et modifiez le fichier postgresql.conf fichier avec vim.

cd /etc/postgresql/9.6/main/
vim postgresql.conf

Décommentez la ligne 'listen_addresses' et remplacez la valeur par l'adresse IP du serveur maître '10.0.15.10 '.

listen_addresses = '10.0.15.10'

Décommentez la ligne 'wal_level' et remplacez la valeur par '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 remplacez l'option archive_command par la commande 'cp %p /var/lib/postgresql/9.6/main/archive/%f'.

archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'

Pour les paramètres 'Réplication', dans ce tutoriel nous utilisons 2 serveurs uniquement, maître et esclave, décommentez le 'wal_sender ' et changez la valeur en 2 , et pour les '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 le nom 'pgslave001 '.

synchronous_standby_names = 'pgslave001'

Enregistrez le fichier et quittez l'éditeur.

Dans le fichier postgresql.conf, le mode archive est activé, nous devons donc créer un nouveau répertoire pour l'archive. Créez un nouveau répertoire d'archives, modifiez l'autorisation et remplacez le propriétaire par l'utilisateur postgres.

mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/

Ensuite, modifiez le fichier pg_hba.conf pour la configuration de l'authentification.

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

Enregistrez et quittez, puis redémarrez PostgreSQL.

systemctl restart postgresql

PostgreSQL s'exécute sous l'adresse IP 10.0.15.10, vérifiez-la avec la commande netstat.

netstat -plntu

Ensuite, créez un nouvel utilisateur pour la réplication. Nous allons créer un nouvel utilisateur nommé 'réplica ' avec le mot de passe '[email protected] '. Veuillez choisir un mot de passe sécurisé ici pour votre configuration ! Connectez-vous à l'utilisateur postgres et accédez au terminal frontal postgres psql.

su - postgres
psql

Créer un nouveau 'réplica ' utilisateur avec mot de passe '[email protected] ' avec la requête postgres ci-dessous.

CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '[email protected]';

Vérifiez maintenant le nouvel utilisateur avec 'du ' ci-dessous, et vous verrez l'utilisateur dupliqué avec des privilèges de réplication.

\du

La configuration du serveur MASTER est terminée.

Étape 4 - Configurer le serveur ESCLAVE

Le serveur SLAVE a l'adresse IP 10.0.15.11. Et ce serveur n'aura qu'une autorisation READ sur la base de données. Le serveur de base de données Postgres s'exécutera sous l'adresse IP du serveur, et non sous une adresse IP locale.

Arrêtez le service postgres sur le serveur esclave avec la commande systemctl ci-dessous.

systemctl stop postgresql

Allez dans le répertoire de configuration de Postgres '/etc/postgresql/9.6/main ', puis éditez le fichier de configuration 'postgresql.conf '.

cd /etc/postgresql/9.6/main/
vim postgresql.conf

Décommentez la ligne listen_addresses et remplacez la valeur par l'adresse IP du serveur esclave 10.0.15.11 .

listen_addresses = '10.0.15.11'

Décommentez la ligne 'wal_level' et remplacez la valeur par 'hot_standby '.

wal_level = hot_standby

Pour le niveau de synchronisation, décommentez la ligne synchronous_commit et modifiez la valeur comme indiqué ci-dessous.

synchronous_commit = local

Pour le paramètre de réplication, décommentez la ligne max_wal_senders et remplacez la valeur par '2 ' parce qu'il suffit d'utiliser 2 serveurs. Et pour les wal_keep_segments, changez la valeur en '10 '.

max_wal_senders = 2
wal_keep_segments = 10

Décommentez la ligne 'synchronous_standby_names' pour le nom de l'application et remplacez la valeur par le nom 'pgslave001 '.

synchronous_standby_names = 'pgslave001'

Activer hot_standby pour le serveur esclave en décommentant la ligne suivante et en changeant la valeur en 'on '.

hot_standby = on

Enregistrez le fichier et quittez l'éditeur.

Étape 5 - Copier les données PostgreSQL du MAÎTRE vers l'ESCLAVE

Ensuite, nous voulons remplacer le répertoire principal de postgres sur le 'SLAVE ' avec le répertoire de données principal de 'MASTER ' serveur.

Connectez-vous au serveur SLAVE et accédez à l'utilisateur postgres.

su - postgres

Allez dans le répertoire de données postgres 'main ' et sauvegardez-le en renommant le nom du répertoire.

cd 9.6/
mv main main-bekup

Créer un nouveau 'principal ' répertoire en tant que 'postgres ' et assurez-vous d'avoir une autorisation comme le répertoire main-bekup.

mkdir main/
chmod 700 main/

Ensuite, copiez le répertoire principal du serveur MASTER vers le serveur SLAVE avec pg_basebackup commande, nous utiliserons l'utilisateur de réplique pour effectuer cette copie de données.

pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Password:

Lorsque le transfert de données est terminé, accédez au répertoire de données principal et créez un nouveau recovery.conf fichier.

cd /var/lib/postgresql/9.6/main/
vim recovery.conf

Collez la configuration ci-dessous :

standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

Enregistrez et quittez, puis changez les permissions du fichier en 600 avec chmod.

chmod 600 recovery.conf

Démarrez maintenant PostgreSQL 9.6 sur le serveur SLAVE et assurez-vous que le service postgres s'exécute sur l'adresse IP 10.0.15.11 avec netstat.

systemctl start postgresql
netstat -plntu

Le transfert de données et la configuration du serveur SLAVE sont terminés.

Étape 6 - Tester

Pour les tests, nous allons vérifier l'état de la réplication de PostgreSQL 9.6 et essayer de créer une nouvelle table sur le serveur MASTER, puis vérifier la réplication en vérifiant toutes les données du serveur SLAVE.

Connectez-vous au serveur MASTER et connectez-vous à l'utilisateur postgres.

su - postgres

Exécutez les commandes psql ci-dessous pour voir l'état de la réplication.

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"

Vous obtiendrez les résultats ci-dessous.

Ensuite, essayez de créer une nouvelle table à partir du serveur MASTER. Connectez-vous à l'utilisateur postgres sur le serveur maître.

su - postgres
psql

Et créez une nouvelle table nommée 'replica_test ' et insérez des données dans la table en exécutant les requêtes postgres ci-dessous.

CREATE TABLE replica_test (hakase 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');

Ensuite, connectez-vous à l'utilisateur postgres sur le serveur SLAVE et accédez au terminal psql.

su - postgres
psql

Vérifiez les données sur le 'replica_test ' table avec la requête postgres ci-dessous.

select * from replica_test;

Et vous obtiendrez les mêmes données que sur le MASTER, elles sont répliquées du serveur MASTER vers le serveur SLAVE.

Test supplémentaire :

Testez pour écrire sur le serveur SLAVE avec la requête ci-dessous.

INSERT INTO replica_test VALUES ('this is SLAVE');

Et vous obtiendrez un message d'erreur sur 'Impossible d'exécuter INSERT ' requête sur le serveur SLAVE.

L'installation et la configuration de PostgreSQL 9.6 avec la réplication maître-esclave sur Ubuntu 16.04 Xenial Xerus ont réussi.


Ubuntu
  1. Comment installer PostgreSQL sur Ubuntu 18.04

  2. Installation d'Ubuntu 20.04 PostgreSQL

  3. Installation d'Ubuntu 22.04 PostgreSQL

  4. Comment installer un serveur PostgreSQL sur Ubuntu 18.04

  5. Le serveur Ubuntu pour les nuls

Comment installer Plex Media Server sur le serveur/bureau Ubuntu 20.04 LTS

Comment installer PostgreSQL sur Ubuntu 16.04

Comment configurer la réplication en continu PostgreSQL 12 dans CentOS 8

Comment installer OwnCloud sur Ubuntu Linux :un tutoriel pour les débutants

Comment configurer la réplication maître-esclave MySQL sur RHEL 7 ?

Installer PostgreSQL sur un serveur Ubuntu pour les configurations de sécurité