HAProxy拆分读/写postgresql

时间:2014-07-31 14:12:07

标签: postgresql file-io split load-balancing haproxy

我使用postgresql作为数据库。我有一个带有流复制的主/从。我想使用HAProxy进行负载平衡。我想将写入发送给主服务器,并将读取发送给从服务器。我可以用haproxy做到吗?

2 个答案:

答案 0 :(得分:4)

不,你不能。 HAProxy不理解PostgreSQL协议,所以它不知道“读取”或“写入”是什么。

看看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,因此我们需要定义 routerssettings.databases,以便所有写操作都在 HAProxy 服务器 (5438) 的一个端口上完成,所有读操作都在另一个(5439)。