Skip to main content

Configure a Master Slave Replication

Deux serveurs PostgreSQL sont nécessaire, un étant le Master, l'autre le Slave.

La base de données test sera répliquée.

Les écritures devront se faire uniquement sur la base de données Master.

If sudo is not install

su
apt-get update
apt install sudo -y

Change pg_hba.conf file

Modifier le fichier /etc/postgresql/<your_version>/main/pg_hba.conf

Et ajouter les lignes ci-dessous.

# Change this lines
local bucardo bucardo trust
local all postgres trust
# And add this lines
host all postgres all trust
host bucardo bucardo all trust

# Reload PostgreSQL Service
sudo service postgresql restart

Create test database

Cette base de données sera répliqué sur le deuxième serveur PostgreSQL.

Jouer le script de création de base et de la table sur les deux serveurs PostgreSQL afin que leurs schema soient indentiques.

CREATE DATABASE test
WITH
OWNER = postgres
TEMPLATE = template0
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE "user" (
"uid" uuid PRIMARY KEY DEFAULT (uuid_generate_v4()),
"email" varchar UNIQUE NOT NULL,
"password" varchar NOT NULL,
"username" varchar NOT NULL
);

-- Uniquement sur la base de données Master
INSERT INTO public."user"(email, password, username)
VALUES ('[email protected]', 'StrongP@ssword', 'John');

Install Bucardo Requirements

L'outil choisi pour cette réplication est Bucardo. L'utilitaire doit être installé uniquement sur le serveur Master.

sudo apt-get install libdbix-safe-perl -y
sudo apt-get install libdbd-pg-perl -y
sudo apt-get install postgresql-plperl-13 -y

# For use 'make' command
sudo apt-get install build-essential -y

Download and Install Bucardo

Téléchargement de l'outil

mkdir bucardo
cd bucardo
# Download Bucardo
wget https://bucardo.org/downloads/Bucardo-5.6.0.tar.gz
# And it's signature
wget https://bucardo.org/downloads/Bucardo-5.6.0.tar.gz.asc
# Unzip the tar file
tar xvfz Bucardo-5.6.0.tar.gz
cd Bucardo-5.6.0/
perl Makefile.PL
sudo make install
# The bucardo command os now available
bucardo
# If you have an error with perl "perl: warning: Setting locale failed"
# Uncomment the file "fr_FR.UTF-8 UTF-8"
sudo nano /etc/locale.gen
sudo locale-gen
sudo mkdir -p /var/run/bucardo
sudo mkdir -p /var/log/bucardo

Création de la base de données et du role permettant de stocker les configurations de bucardo.

-- Create the user dans database "bucardo"
CREATE ROLE bucardo WITH
LOGIN
SUPERUSER
CREATEDB
CREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1
PASSWORD 'bucardo';

CREATE DATABASE bucardo
WITH
OWNER = bucardo
TEMPLATE = template0
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;

Bucardo Configuration

Initialisation

Initialisation de la base de données bucardo.

bucardo install
> Current connection settings:
> 1. Host: Localhost
> 2. Port: 5432
> 3. User: bucardo
> 4. Database: bucardo
> 5. PID directory: /var/run/bucardo
> Enter a number to change it, P to proceed, or Q to quit: P
>
> Attempting to create and populate the bucardo database and schema
> Database creation is complete

# If you want to change one of these setting, tap the number and set the new value
# If you don't have create a username, change it
# Idem from database

Sélection des bases

Sélection de la base de données source de la réplication (<...>_host).

Changer les variables dbname, port, host, user et password en fonction de vos configurations. List des varibles disponibles ici.

bucardo add db test_host dbname=test port=5432 host=localhost user=bucardo password=bucardo

Sélection de la base de données cible de la réplication (<...>_dest).

bucardo add db test_dest dbname=test port=5432 host=192.168.4.131 user=postgres password=postgres

Sélection des tables

Dans note exemple toutes les tables seront répliquées

# Add tables
bucardo add tables all db=test_host
> New tables added: 1

Création d'une herdTable

La herdTable permet de regrouper les tables qui doivent être synchronisées.

bucardo add herd test_copying_herd all
> Created relgroup "test_copying_herd"
> The following tables or sequences are now part of the relgroup "test_copying_herd":
> public.user

Création d'une synchronisation

La synchronisation permet de définir, la tables source, la table cible et la herdTable qui doivent être liées.

bucardo add sync sync_test relgroup=test_copying_herd dbs=test_host:source,test_dest:target onetimecopy=2
> Added sync "sync_test"
> Created a new dbgroup named "sync_test"

Lancement de la synchronisation

sudo bucardo start
> Checking for existing processes
> Starting Bucardo

sudo bucardo status
> PID of Bucardo MCP: 6793
> Name State Last good Time Last I/D Last bad Time
> ===========+========+============+=======+===========+===========+=======
> sync_test | Good | 14:13:44 | 18s | 0/0 | none |

Et voilà !

Maintenant sur votre 2ème BDD vous pouvez constater que les données ont été répliquées.

Un autre tuto m'ayant aidé à réaliser celui ci. Pour plus d'information: https://installvirtual.com/how-to-install-bucardo-for-postgres-replication/