Pgpool : Différence entre versions

De DiouxX's Wiki
Aller à : navigation, rechercher
(Page créée avec « {{ Introduction | Cette page permet d'installer et configurer pgpool pour de la réplication et de la répartition de charge }} == Installation == On récupère les sour... »)
 
Ligne 303 : Ligne 303 :
 
[http://pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-fr.html#Whatis Manuel utilisateur pgpool-II]
 
[http://pgpool.projects.postgresql.org/pgpool-II/doc/pgpool-fr.html#Whatis Manuel utilisateur pgpool-II]
  
[[Catégorie:Système]]
+
[[Catégorie:Database]]

Version du 20 avril 2013 à 19:18

Cette page permet d'installer et configurer pgpool pour de la réplication et de la répartition de charge

Installation

On récupère les sources de Pgpool : http://www.pgpool.net/mediawiki/index.php/Downloads

Konsole.png
[user@ordi ~]$ tar -xvf pgpool-II-3.2.0.tar.gz && cd pgpool-II-3.2.0/ && mkdir /opt/pgpool


On lance le script de configuration :

Konsole.png
[root@ordi ~]# ./configure --prefix=/opt/pgpool --with-pgsql=/opt/postgresql --with-openssl


  • --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

Konsole.png
[root@ordi ~]# make
[root@ordi ~]# make install


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

ICI

Demarrage/Arret

Démarrage

Pour démarrer le processus pgpool :

Konsole.png
[user@ordi ~]$ /opt/pgpool/bin/pgpool


Arret


Konsole.png
[user@ordi ~]$ kill -INT `cat /opt/pgpool-sogo/var/run/pgpool/pgpool.pid` > /dev/null 2>&1


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 0

Procé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 )
Konsole.png
[root@ordi ~]# rm -rf pgpool-II-3.2.0


  • On désarchive les sources, on se rend dans le dossier et on crée le répertoire de destination :
Konsole.png
[root@ordi ~]# tar -xvf pgpool-II-3.2.0.tar.gz && cd pgpool-II-3.2.0/ && mkdir /opt/pgpool-nomApplicatif


  • On configure, compile et install pgpool :
Konsole.png
[root@ordi ~]# ./configure --prefix=/opt/pgpool-nomApplicatif --with-pgsql=/opt/postgresql-X.X.X --with-openssl
[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
Konsole.png
[user@ordi ~]$ cd /opt/pgpool-nomApplicatif/etc/ && cp pcp.conf.sample pcp.conf && cp pgpool.conf.sample pgpool.conf && nano 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
BlocNotes.png
À noter !
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
Konsole.png
[root@ordi ~]# mkdir -p /opt/pgpool-nomApplicatif/var/run/pgpool


  • On copie le script d'automatisation d'un pgpool déjà existant ( ex : sogo )
Konsole.png
[root@ordi ~]# cp /etc/init/d/pgpool-sogo /etc/init.d/pgpool-nomApplicatif


  • 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

Konsole.png
[root@ordi ~]# update-rc.d pgpool-nomApplicatif defaults



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 )
Konsole.png
[root@ordi ~]# /etc/init.d/pgpool-nomApplicatif stop


  • Couper les Postgresql ( 192.168.1.176 et 192.168.1.177 }
Konsole.png
[root@ordi ~]# /etc/init.d/postgres-nomApplicatif stop


  • On synchronise la base de donnée du serveur correct vers celui défectueux ( avec l'utilisateur postgres ):
Konsole.png
[user@ordi ~]$ rsync -avz postgres-nomApplicatif/* postgres@192.168.168.12:/opt/postgres-nomApplicatif/


  • On relance les Postgresql
Konsole.png
[root@ordi ~]# /etc/init.d/postgres-nomApplicatif start


  • On relance les pgpool
Konsole.png
[root@ordi ~]# /etc/init.d/pgpool-nomApplicatif stop


Liens Externes

Manuel utilisateur pgpool-II