PostgreSQL : ajout info pour pgbouncer

This commit is contained in:
Romain Dessort 2018-01-25 16:45:12 -05:00
parent b9f133a075
commit a113b45961

View file

@ -946,12 +946,85 @@ pg_benchmark executed 30 tests in about 5 seconds
## Outils
* pgbouncer
* pgpool -> rmw
* barman
* pgbadger
* phpmyadmin / pgadmin
* pg_bench_*
### PgBouncer
PgBouncer, de même que PgPool-II, permet de multiplexer plusieurs connexions à PostgreSQL en une seule : PgBouncer va recevoir les multiples connexions des clients et les envoyer à PostgreSQL à travers un pool de connexions qu'il maintient de manière persistente avec le serveur. L'intérêt principal est d'offrir un gain de performance puisque, avec PostgreSQL, une nouvelle connexion signifie un fork d'un nouveau processus, ce qui coûteux pour le système.
Les autres avantages sont notamment la possibilité de gérer la répartition des requêtes vers plusieurs serveurs PostgreSQL en réplication ou le redémarrage d'un serveur PostgreSQL sans coupure (les requêtes seront alors mises en file d'attente jusqu'à ce que le serveur soit à nouveau opérationnel.
Dans une infrastructure multi-serveurs, il peut être installé soit sur chacun des frontaux web à la manière d'un HAProxy, soit sur les serveurs de bases de données dépendamment de ce que l'on recherche.
Installation :
~~~
# apt install pgbouncer
~~~
Augmentation du nombre de fichiers ouverts maximum :
~~~
# echo "ulimit -n 65536" >>/etc/default/pgbouncer
~~~
Note : en stretch PgBouncer n'a toujours pas d'unité systemd donc le fichier `/etc/default/pgbouncer` est toujours pris en compte.
La configuration se fait ensuite dans le fichier `/etc/pgbouncer/pgbouncer.ini
~~~
[databases]
# La base foodb est héberger sur le serveur accessible sur 10.0.0.32
foodb = host=10.0.0.32
[…]
[pgbouncer]
# À décommenter si pgbouncer doit être accessible depuis d'autres machines
#listen_addr = *
# Utilisateurs qui auront accès à la pseudo-base pgbouncer
admin_users = pgbpostgres
stats_users = pgbstats
# La connexion au serveur redevient libre lorsque le client termine une transaction
# Autres valeurs possibles : session (lorsque le client ferme la session), statement (lorsque la requête se termine)
pool_mode = transaction
# Nombre maximum de connexions entrantes
max_client_conn = 5000
# Nombre de connexion maintenues avec le serveur
default_pool_size = 20
log_connections = 0
log_disconnections = 0
~~~
Il est également nécessaire de lister les utilisateurs pouvant se connecter, puisque l'authentification se fera désormais au niveau de PgBouncer. Dans le fichier `/etc/pgbouncer/userlist.txt` :
~~~
"pgbpostgres" "some_password"
"pgbstats" "some_password"
"jdoe" "some_password"
[…]
~~~
Une fois démarré, PgBouncer écoute sur le port tcp/6432.
Une pseudo-base spécifique à PgBouncer permet de faire des opérations d'administration et de récupérer des statistiques intéressantes :
~~~
psql -p 6432 -U pgbpostgres pgbouncer
pgbouncer=# show help;
~~~
### pgpool -> rmw
### barman
### pgbadger
### phpmyadmin / pgadmin
### pg_bench_*
(TODO)