GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment installer et configurer la réplication maître-esclave avec PostgreSQL 9.6 sur CentOS 7

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

  1. Installer PostgreSQL 9.6
  2. Démarrer et configurer PostgreSQL 9.6
  3. Configurer le pare-feu
  4. Configurer le serveur maître
  5. Configurer le serveur esclave
  6. 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

    Cent OS
    1. Comment installer et configurer Nginx sur CentOS 7

    2. Comment installer et configurer Postgres 13 Ubuntu 20.04

    3. Comment installer et configurer Postgres 13 sur Centos 8

    4. Comment installer et configurer Postgres 14 Ubuntu 20.04

    5. Comment installer et configurer Postgres 14 sur Debian 11

    Comment installer et configurer GitLab CE sur CentOS 7

    Comment installer et configurer Zabbix sur CentOS 7

    Comment installer OwnCloud 8 avec Nginx et MariaDB sur CentOS 7

    Comment installer et configurer OpenLiteSpeed ​​avec PHP 7 sur CentOS 7

    Comment installer et utiliser Ruby on Rails avec PostgreSQL sur CentOS 7

    Comment installer PostgreSQL avec pgAdmin sur CentOS 8