J'ai plusieurs serveurs PostgreSQL pour une application Web. Généralement, un maître et plusieurs esclaves en mode de redondance d'UC (réplication de streaming asynchrone).
J'utilise PGBouncer pour le pool de connexion: une instance installée sur chaque serveur PG (port 6432) se connectant à la base de données sur localhost. J'utilise le mode pool de transactions.
Afin d'équilibrer la charge de mes connexions en lecture seule sur les esclaves, j'utilise HAProxy (v1.5) avec une conf plus ou moins comme ceci:
listen pgsql_pool 0.0.0.0:10001
mode tcp
option pgsql-check user ha
balance roundrobin
server master 10.0.0.1:6432 check backup
server slave1 10.0.0.2:6432 check
server slave2 10.0.0.3:6432 check
server slave3 10.0.0.4:6432 check
Ainsi, mon application Web se connecte à haproxy (port 10001), qui équilibre les connexions de charge sur plusieurs pgbouncer configurés sur chaque esclave PG.
Voici un graphique de représentation de mon architecture actuelle:
Cela fonctionne assez bien comme ceci, mais je me rends compte que certains implémentent cela de manière très différente: l'application Web se connecte à une seule instance de PGBouncer qui se connecte à HAproxy qui équilibre la charge sur plusieurs serveurs PG:
Quelle est la meilleure approche? Le premier (mon actuel) ou le second? Y a-t-il des avantages d'une solution par rapport à l'autre?
Merci