用于MySQL主从复制的HAProxy

时间:2015-01-22 13:14:48

标签: mysql haproxy master-slave

我们正在使用MySQL MASTER-SLAVE复制设置,一切正常。

目前所有加载(读/写)都将转到MASTER服务器。我们的应用程序有99%的读取和1%的写入。

我们考虑过向主服务器和从服务器分配负载(仅读取)。所以我们考虑使用HAProxy将负载分配给两个MySQL服务器。

我们的要求是将所有写入重定向到仅主服务器并将读取分配到主服务器和从服务器之间。

3 个答案:

答案 0 :(得分:4)

我已经为我的项目实现了相同的功能。 我在Ha-Proxy(LB01)后面有两个DB Server(DB01,DB02)。我从我的应用程序中假设一个数据库命中了ha-proxy。在我的应用程序中,我将数据库查询分发为3307上的读取并写入3306端口。

在haproxy.cfg(配置文件HAPROXY)中有两个LISTENER:

listen mysql-cluster
    bind  *:3306
    mode tcp
    balance roundrobin
    option mysql-check user mast_ha
    server DB01 10.x.x.x:3306 check maxconn 100000 


listen mysql-cluster-replica
    bind  *:3307
    mode tcp
    option mysql-check user mast_ha
    server DB02 10.x.x.x:3306 check maxconn 100000

通过制作两个jdbc模板从应用程序调用Distrubuted mysql,一个用于读取,另一个用于写入。

答案 1 :(得分:1)

我们已成功实施数据库架构,用于非常密集的读/写应用程序。 我们有一个MASTER,其中所有读/写操作发生,2 SLAVES(A,B)所有读取发生。通常,主从复制假定读取在主服务器上以及主服务器上的所有其他事物(读取和写入)。换句话说,奴隶平衡了阅读。

我们在WebServer服务读取请求之后放置了HAProxy。 WebServer通过HAProxy连接到从属服务器。 HAProxy检查从站的状态并平衡主站和从站之间的请求。 为了便于配置,我们将数据库服务器放在分开的LAN上。 HAProxy的配置非常简单:只需使用默认配置并更改listen语句即可。 例如:

listen slaves 10.8.214.14:3306
    balance     roundrobin
    option tcpka
    mode tcp
    option mysql-check user haproxy
    server  master   10.8.214.12:3306   check weight 1
    server  slave1   10.8.214.11:3306   check weight 1
    server  slave2   10.8.214.13:3306   check weight 1

还要记住在启动时启用haproxy。

如果您想先行一步,可以使用某些脚本集成对从站状态(SQL错误或同步问题)的监控。 Ha代理可以使用您想要的任何代理。 看一看herehere

如果您有非常密集的写入应用程序,我建议使用正确的存储引擎,例如TokuDB,它可以很好地扩展数据库大小。

答案 2 :(得分:0)

MySQL Proxy具有拆分读/写分割的功能。并负载平衡它背后的多个mysql服务器。对于某些复杂的语句,读/写拆分大部分都是可行的。

  

免责声明:MySQL Proxy目前是Alpha版本,不应在生产环境中使用。