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