Pgpool
Sommaire
Installation
On récupère les sources de Pgpool : http://www.pgpool.net/mediawiki/index.php/Downloads
On lance le script de configuration :
- --prefix : L'emplacement du dossier d'installation
- --with-pgsql : L'emplacement du dossier d'installation de postgresql
- --with-openssl : Pour activer le support SSL (on ne sait jamais )
On peux ensuite passer à l aphase de compilation
Configuration
pcp.conf
Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface.
Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :
nom_d_utilisateur:[mot de passe crypté en md5]
Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.
/opt/pgpool/bin/pg_md5 -p password: <votre mot de passe>
pgpool.conf
Dans les sections suivantes, seuls les paramètres relatifs à ceux ci sont lister
Paramètre communs
- listen_addresses = '*' : Interface d'écoute. Dans notre cas, toutes les interfaces
- port = 9999 : Port d'écoute. A changer si on a plusieurs instances de pgpool lancé en même temps
- backend_hostname0 = '192.168.100.40' : IP du premier serveur
- backend_port0 = 5462 : Port du premier serveur
- backend_weight0 = 1 : Poids attribué au premier serveur ( seulement si le mode load-balancing est activer )
- #backend_data_directory0 = '/data' : Répertoire contenant les données ( optionnel )
- #backend_flag0 = 'ALLOW_TO_FAILOVER' : Optionnel
- backend_hostname1 = '192.168.100.41'
- backend_port1 = 5462
- backend_weight1 = 1
- #backend_data_directory1 = '/data1'
- #backend_flag1 = 'ALLOW_TO_FAILOVER'
- pid_file_name = '/opt/pgpool/var/run/pgpool/pgpool.pid' : Emplacement du ficher contenant le PID du process ( Nécessaire de créer le chemin )
Mode Réplication
- replication_mode = on : Mettre ce paramètre à true active le mode de réplication. La valeur par défaut est false.
- Le reste des options est laissé par défaut
Mode Load-balancing
- load_balance_mode = on : Lorsque ce paramètre est à true, les requêtes de type SELECT sont distribuées à chaque serveur PostgreSQL pour obtenir une répartition de la charge entre les serveurs. La valeur par défaut est false.
- Le reste des paramètres est laissé par défaut
Watchdog
Demarrage/Arret
Démarrage
Pour démarrer le processus pgpool :
Arret
L'emplacement du ficher contenant le numéro de processus est paramétré dans le fichier /opt/pgpool/etc/pgpool.conf .
Script
#! /bin/bash
# Auteur : Devleeschauwer Denis
# PgPool Sogo start script
#
# Octobre 2012
#
#GLOBAL VARIABLES
DIRECTORY=/opt/pgpool-sogo
#LOG_FILE=/opt/postgres-sogo/postgres.log
APPLICATION="PgPool Sogo"
######################################################################
##########################Function####################################
######################################################################
start ()
{
#Commande pour demmarer pgpool
cd $DIRECTORY/bin
./pgpool -f $DIRECTORY/etc/pgpool.conf -F $DIRECTORY/etc/pcp.conf -c -D
if [ $? -eq 0 ]
then
echo "Start $APPLICATION Instance [OK]"
else
echo "Start $APPLICATION Instance [KO]"
fi
}
stop ()
{
#Commande pour arreter pgpool
cd $DIRECTORY/bin
./pgpool -f $DIRECTORY/etc/pgpool.conf -F $DIRECTORY/etc/pcp.conf -m fast stop
if [ $? -eq 0 ]
then
echo "Stop $APPLICATION Instance [OK]"
else
echo "Stop $APPLICATION Instance [KO]"
fi
}
restart ()
{
stop
sleep 2
start
}
case "$1" in
'start')
start
;;
'stop')
stop
;;
'status')
cat $DIRECTORY/var/run/pgpool/pgpool.pid > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "$APPLICATION Instance Running"
else
echo "$APPLICATION Instance Stop"
fi
;;
'restart')
restart
;;
*)
echo "Usage: $0 { start | stop | restart | status }"
exit 1
;;
esac
exit 0Procédures
Nouvelle instance pgpool
Pour créer une nouvelle instance de pgpool, il est nécessaire de (re)compiler en indiquant un emplacement différent.
- On supprime le répertoire des sources s'il existe ( dans /root )
- On désarchive les sources, on se rend dans le dossier et on crée le répertoire de destination :
- On configure, compile et install pgpool :
[root@ordi ~]# make
[root@ordi ~]# make install
- On lance la commande pg_md5 -p qui va nous donner le mot de passe crypté en md5 de l'utilisateur de notre base
pg_md5 -p password: e9d02c2b06de38e1f1969453b1d7f083
- On copie ce mot de passe que l'on va recopier dans le fichier pcp.conf
# USERID:MD5PASSWD postgres:e8a48653851e28c69d0506508fb27fc5 redmine:e9d02c2b06de38e1f1969453b1d7f083
- On édite le fichier pgpool.conf pour renseigner l'ip et le port de pgpool et les paramètres pour le watchdog
Avant d'assigner les ports, consulter le tableau suivant
On édite les variables suivantes :
# L' IP et le port que l'on assigne ( même port que PostgreSQL pour une question de cohérence )
listen_addresses = '*' : Interface d'écoute. Dans notre cas, toutes les interfaces
port = 5434 : Port d'écoute. A changer si on a plusieurs instances de pgpool lancé en même temps
# - pgpool Communication Manager Connection Settings -
#98+les 2 derniers chiffre du port de PostgreSQL (Questions de cohérence également )
pcp_port = 9834
# Port number for pcp
# (change requires restart)
#
#DebPgsql
#
backend_hostname0 = '192.168.168.11' : IP du premier serveur
backend_port0 = 5434 : Port du premier serveur
backend_weight0 = 1 : Poids attribué au premier serveur ( seulement si le mode load-balancing est activer )
#backend_data_directory0 = '/data' : Répertoire contenant les données ( optionnel )
#backend_flag0 = 'ALLOW_TO_FAILOVER' : Optionnel
#
#DebPgsql2
#
backend_hostname1 = '192.168.168.12'
backend_port1 = 5434
backend_weight1 = 1
#backend_data_directory1 = '/data1'
#backend_flag1 = 'ALLOW_TO_FAILOVER'
# Envoyer les logs de pgpool dans le système de logs du système
log_destination = 'syslog'
pid_file_name = '/opt/pgpool-nomApplicatifs/var/run/pgpool/pgpool.pid' : Emplacement du ficher contenant le PID du process
( Nécessaire de créer le chemin )
# Pour différencier dans le système de logs les différentes instances de pgpool
syslog_ident = 'pgpool-nomApplicatifs'
replication_mode = on : Mettre ce paramètre à true active le mode de réplication. La valeur par défaut est false. Le reste des options est laissé par défaut
load_balance_mode = on : Lorsque ce paramètre est à true, les requêtes de type SELECT sont distribuées à chaque serveur PostgreSQL pour
obtenir une répartition de la charge entre les serveurs. La valeur par défaut est false.
Le reste des paramètres est laissé par défaut
- On crée le chemin pour le fichier de log
- On copie le script d'automatisation d'un pgpool déjà existant ( ex : sogo )
- On édite les variables globales du script
# MOIS ANNEE # #GLOBAL VARIABLES DIRECTORY=/opt/pgpool-nomApplicatif APPLICATION="PgPool NomApplicatif"
On active le script au démarrage et à l’arrêt du système
- Pour activer le Watchdog suivre cette procédure
Désynchronisation
Si à un moment donné, il existe une désynchronisation entre les serveurs PostgreSQL, voici les étapes a effectué :
- Couper les pgpool ( 192.168.1.178 et 192.168.1.179 )
- Couper les Postgresql ( 192.168.1.176 et 192.168.1.177 }
- On synchronise la base de donnée du serveur correct vers celui défectueux ( avec l'utilisateur postgres ):
- On relance les Postgresql
- On relance les pgpool
