Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HAProxy用于MySQL主从复制_Mysql_Haproxy_Master Slave - Fatal编程技术网

HAProxy用于MySQL主从复制

HAProxy用于MySQL主从复制,mysql,haproxy,master-slave,Mysql,Haproxy,Master Slave,我们正在进行MySQL主从复制设置,一切正常 当前,所有加载(读/写)都将进入主服务器。我们的应用程序有99%的读取和1%的写入 我们考虑将负载(仅读取)分配给主服务器和从服务器。因此,我们考虑使用HAProxy将负载分配到两个MySQL服务器 我们的要求是,所有的写操作都只重定向到主服务器,而读取操作则分布在主服务器和从服务器之间。我们已经成功地为非常密集的读/写应用程序实现了我们的数据库体系结构。 我们有一个主设备,所有读/写操作都在其中进行;还有两个从设备(A、B),所有读操作都在其中进行

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

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

我们考虑将负载(仅读取)分配给主服务器和从服务器。因此,我们考虑使用HAProxy将负载分配到两个MySQL服务器


我们的要求是,所有的写操作都只重定向到主服务器,而读取操作则分布在主服务器和从服务器之间。

我们已经成功地为非常密集的读/写应用程序实现了我们的数据库体系结构。 我们有一个主设备,所有读/写操作都在其中进行;还有两个从设备(A、B),所有读操作都在其中进行。通常,主从复制假定读取在从机上进行,而所有其他事情(读取和写入)在主机上进行。换句话说,从机平衡读取

我们在提供读取请求的Web服务器之后放置一个HAProxy。Web服务器通过HAProxy连接到从属服务器。HAProxy检查从机的状态,并在主机和从机之间平衡请求。 为了便于配置,我们将DB服务器放在单独的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代理可以使用您想要的任何代理。 看一看,然后


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

MySQL Proxy具有拆分读/写拆分的功能。并在其背后实现多台mysql服务器的负载平衡。除了一些复杂的语句外,读/写分离在大多数情况下都有效

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


我已经为我的项目实现了同样的功能。 我在Ha代理(LB01)后面有两个DB服务器(DB01,DB02)。我点击ha代理,假设我的应用程序中有一个DB。在我的应用程序中,我将数据库查询分配为在3307上读取,在3306端口上写入

在haproxy.cfg(配置文件haproxy)中,两个侦听器为:

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模板,一个用于读取,另一个用于写入,从应用程序发出分布式mysql调用。

HA代理不会检查它是否为读/写查询。(这更像是应用程序逻辑)。您的应用程序应该选择要查询的服务器:如果是“写”,那么是服务器A,否则是服务器B。如果您让服务器B运行HA代理,那么它可以在不同的DBServer之间平衡它接收的所有查询(“读”)。您在哪里找到它的读请求或写请求?在代码级别,如何检查其分布式数据库查询,如在3307端口读取和在3306端口写入。请解释:)