我有一个Web应用程序的多个PostgreSQL服务器。通常,一个主机和多个从机处于热备用模式(异步流复制)。
我使用PGBouncer进行连接池:在连接到本地主机上的数据库的每台PG服务器(端口6432)上安装了一个实例。我使用事务池模式。
为了在从属服务器上平衡只读连接的负载,我将HAProxy(v1.5)与conf差不多使用:
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
因此,我的Web应用程序连接到haproxy(端口10001),该端口在每个PG从站上配置的多个pgbouncer上进行负载平衡连接。
这是我当前架构的表示图:
这样可以很好地工作,但是我意识到有些实现方式大不相同:Web应用程序连接到单个PGBouncer实例,该实例连接到HAproxy,后者在多个PG服务器上实现负载平衡:
最好的方法是什么?第一个(我当前的一个)还是第二个?一种解决方案比另一种解决方案有什么优势?
谢谢