用于 MySQL 主从复制的 HAProxy

Pha*_*dra 5 mysql haproxy master-slave

我们正在设置 MySQL 主从复制,一切正常。

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

我们考虑将负载(仅读取)分配给 Master 和 Slave。所以我们想到了使用 HAProxy 将负载分配到两个 MySQL 服务器。

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

Gre*_*mar 5

我已经为我的项目实现了相同的功能。我在 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
Run Code Online (Sandbox Code Playgroud)

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


giu*_*ppe 1

我们已经成功地为非常密集的读/写应用程序实现了数据库架构。我们有 1 个 MASTER,所有读/写操作都在其中发生,2 个 SLAVES(A、B)则在所有读操作中发生。通常,主从复制假设读取在从属设备上进行,所有其他操作(读取和写入)在主设备上进行。换句话说,从机平衡读取。

我们在提供读取请求的 WebServer 之后放置一个 HAProxy。WebServer 通过 HAProxy 连接到从属服务器。HAProxy 检查从站的状态并平衡主站和从站之间的请求。为了方便配置,我们将数据库服务器放在单独的局域网上。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
Run Code Online (Sandbox Code Playgroud)

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

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

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