我使用postgresql作为数据库。我有一个带有流复制的主/从。我想使用HAProxy进行负载平衡。我想将写入发送给主服务器,并将读取发送给从服务器。我可以用haproxy做到吗?
答案 0 :(得分:4)
看看PgPool-II,它可以在有限的程度上做到这一点。在实践中,通常最好配置应用程序,以便它知道如果可能的话将其只读查询路由到不同的服务器。
答案 1 :(得分:1)
我们通过定义一个用于读取的前端和用于写入的其他前端来实现这一点,每个前端侦听不同的端口,并将它们路由到您组织数据库集群的后端。
HAProxy 配置示例:
frontend writes
bind *:5439
default_backend writes_db
frontend reads
bind *:5438
default_backend reads_db
backend writes_db
option pgsql-check user haproxy
server master_db ip.for.my.db:5432 check
backend reads_db
balance roundrobin
option pgsql-check user haproxy
server master_db ip.for.my.db:5432 check weight 30
server master_db ip.for.my.db:5432 check weight 70
在我们的例子中,我们使用 Django,因此我们需要定义 routers
和 settings.databases
,以便所有写操作都在 HAProxy 服务器 (5438) 的一个端口上完成,所有读操作都在另一个(5439)。