HAProxy拆分读/写postgresql

HAProxy拆分读/写postgresql,postgresql,file-io,split,load-balancing,haproxy,Postgresql,File Io,Split,Load Balancing,Haproxy,我使用postgresql作为数据库。我有一个主/从流式复制。我想使用HAProxy进行负载平衡。我想将写操作发送给主机,将读操作发送给从机。我能用haproxy做这个吗?不,你不能。HAProxy不理解PostgreSQL协议,所以它不知道什么是“读”或“写” 看看PgPool II,它可以在有限的范围内做到这一点。在实践中,通常最好配置应用程序,以便它知道如何将其只读查询路由到不同的服务器(如果可能)。我们通过定义一个前端用于读取,另一个用于写入,每个前端监听不同的端口,并将它们路由到后端,

我使用postgresql作为数据库。我有一个主/从流式复制。我想使用HAProxy进行负载平衡。我想将写操作发送给主机,将读操作发送给从机。我能用haproxy做这个吗?

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


看看PgPool II,它可以在有限的范围内做到这一点。在实践中,通常最好配置应用程序,以便它知道如何将其只读查询路由到不同的服务器(如果可能)。

我们通过定义一个前端用于读取,另一个用于写入,每个前端监听不同的端口,并将它们路由到后端,在后端组织数据库集群

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,因此需要定义
路由器
设置。数据库
因此所有写入操作都在HAProxy服务器(5438)的一个端口上完成,所有读取操作都在另一个端口(5439)上完成