Un moyen extrêmement simple, voire simpliste diront certains, de faire de la réplication est d’envoyer toutes les requêtes à tous les serveurs en réplication. Évidemment, cela donnera lieu à des limitations assez fortes, mais le résultat peut être intéressant.
|
|
|
1 Installation de pgPool-II
|
Comme vu dans l’article sur le mode de
pooling de connexions de pgPool-II, l’installation de pgPool-II est très simple. Nous n’allons reprendre ici que les commandes de base :
|
debian1:~# aptitude install postgresql-server-dev-8.4
debian1:~# wget -q http://pgfoundry.org/frs/download.php/2362/pgpool-II-2.2.4.tar.gz
debian1:~# tar xfz pgpool-II-2.2.4.tar.gz
debian1:~# cd pgpool-II-2.2.4
debian1:~/pgpool-II-2.2.4# ./configure –prefix=/opt/pgpool-II-2.2
[... messages de progression …]
debian1:~/pgpool-II-2.2.4# make
[... messages de progression ...]
debian1:~/pgpool-II-2.2.4# make install
[... messages de progression …]
|
La configuration a toujours lieu dans le fichier
pgpool.conf.
La première chose à faire est d’activer la réplication. Pour cela, il faut mettre Ã
‘on’ le paramètre
replication_mode.
Ceci fait, pgPool-II enverra une copie de chaque requête qu’il reçoit à tous les nœuds de bases de données. Néanmoins, par défaut, les
SELECT ne sont pas répliqués. Si vous souhaitez faire exécuter les
SELECT sur les différents nœuds, c’est possible. Il faut pour cela activer le paramètre
replicate_select. Nous n’allons pas le faire dans notre cas.
Ensuite, il faut configurer les différents nœuds. Nous avions déjà configuré le nœud 0 lors du précédent article sur pgPool-II, nous allons maintenant faire le nœud 1 :
|
backend_hostname1 = ‘debian2’
backend_port1 = 5432
|
pgPool-II va donc se connecter aux deux nœuds. Pour cela, il faut évidemment corriger la configuration des accès sur
debian1 et
debian2. La première chose à faire est d’autoriser les accès distants. Nous passons donc le paramètre
listen_addresses Ã
‘*’ dans le fichier
/etc/postgresql/8.4/main/postgresql.conf. Ensuite, nous devons autoriser les adresses IP des deux serveurs. Cela se fait dans le fichier
/etc/postgresql/8.4/main/pg_hba.conf. La configuration retenue est la suivante :
|
# Database administrative login by UNIX sockets
local all postgres ident
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.10.66/32 trust
host all all 192.168.10.67/32 trust
# IPv6 local connections:
host all all ::1/128 trust
|
De cette façon, nous autorisons les connexions de n’importe quel utilisateur PostgreSQL sur n’importe quelle base de données, à condition qu’elle provienne des adresses IP 192.168.10.66 et 192.168.10.67 (adresses IP des serveurs
debian1 et
debian2). Remarquez la méthode
trust. Seules les méthodes
trust,
password et
pam sont acceptées.
password est certainement un peu meilleur que
trust, car il est quand même nécessaire d’avoir un mot de passe. Cependant, ce dernier circule en clair sur le réseau.
pam est probablement le meilleur choix, à défaut de mieux. Néanmoins, cela vous contraint à créer autant d’utilisateurs Unix que de personnes capables de se connecter à l’instance PostgreSQL.
Maintenant que la configuration est faite, nous devons faire en sorte que PostgreSQL la prenne en compte. Si vous avez dû modifier le paramètre
listen_addresses, vous devez redémarrer PostgreSQL. Dans le cas contraire, un simple rechargement de la configuration suffit.
|
debian1:/opt/pgpool-II-2.2.4/etc# /etc/init.d/postgresql-8.4 restart
Reloading PostgreSQL 8.4 database server: main.
|
Tout ce travail fait sur
debian1 doit aussi être fait sur
debian2.
Avant de lancer pgPool-II, il est de bon ton de s’assurer que les connexions se font bien. Essayez de vous connecter sur les bases de
debian1 Ã partir de
debian1 et de
debian2. Puis, faites de même sur les bases de
debian2.
|
|
|
3 Utilisation de la réplication
|
Commençons par lancer le démon
pgpool :
|
debian1:~# cd /opt/pgpool-II-2.2.4/bin
debian1:/opt/pgpool-II-2.2.4/bin# ./pgpool -n
2009-08-27 02:43:38 LOG: pid 1469: pgpool successfully started
|
Maintenant, nous allons créer une base sur
debian1.
|
postgres@debian1:~$ createdb -p 9999 b1
|
Remarquez que nous utilisons toujours l’option
-p pour indiquer le numéro de port de
pgpool et donc bien nous assurer de passer par pgPool-II. Pour éviter d’avoir à saisir cette option, vous pouvez initialiser la variable d’environnement
PGPORT de cette façon :
|
postgres@debian1:~$ export PGPORT=9999
|
Évidemment, un moyen encore plus simple est de faire en sorte que pgPool-II écoute sur le port 5432.
Revenons-en à notre base de données. Nous l’avons créée sur
debian1. Voyons si elle existe bien :
|
postgres@debian1:~$ psql -l
Liste des bases de données
Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d’accès
—————-+———————+—————+——————-+———————+———————————-
b1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres
: postgres=CTc/postgres
(12 lignes)
|
Oui, c’est bien le cas. Maintenant, voyons si elle existe sur
debian2 :