diff --git a/HowtoPostgreSQL.md b/HowtoPostgreSQL.md index 20a7168d..e5754f25 100644 --- a/HowtoPostgreSQL.md +++ b/HowtoPostgreSQL.md @@ -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)