之前的文章配置过haproxy以及简单使用,具体可以参考《Centos系统环境下进行负载均衡软件Haproxy安装及配置》(http://www.21yunwei.com/archives/5111), 今天文章记录下通过配置Haproxy代理实现MySQL从服务器的负载均衡。
haproxy本身支持TCP协议的负载均衡转发,对于各种基于tcp的软件进行负载均衡比如mysql,之前配置的web负载均衡都是基于应用层,今天记录下tcp的。
环境准备:
- centos 6.x三台,具体如下:
- IP:192.168.1.104 角色:haproxy,mysql_master
- IP:192.168.1.122 角色:mysql_slave
- IP:192.168.1.123 角色:mysql_slave
- 说明:
- mysql主从安装这里不单独配置写出,配置非常简单,可以参考之前的博客文章《Linux系统如何设置mysql数据库主从以及互为主从》(http://www.21yunwei.com/archives/1035)
- 由于1.104已经配置了mysql_master占用了3306端口,haproxy我们启用3307端口测试。
一、配置haproxy
global
log 127.0.0.1 local2
chroot /usr/share/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug]
listen test1
bind 192.168.1.104:3307
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.1.122:3306
server s2 192.168.1.123:3306
二、测试mysql的负载均衡
利用navicat连接192.168.1.104的3307端口,理论上我们会连接到后端的122或者123的mysql上,为了区别,我们分别从mysql_slave单独建立两个库以便区分:
- 192.168.1.122 mysql_slave建立测试数据库web122;
- 192.168.1.123 mysql_slave建立测试数据库web123;
(具体sql语句:create database web122/123 default charset utf8;)
连接测试:
连接进入查看:
查看我们连接到了192.168.1.123 mysql_slave,看到了建立的测试库web123.
断开连接,重新连接:
查看我们连接到了192.168.1.122 mysql_slave,看到了建立的测试库web122.
总结,配置Haproxy代理实现MySQL从服务器的负载均衡已经完成。后续需要根据配置文件进行一些参数的优化或者架构的优化,比如配置keepalive实现高可用、根据mysql_slave配置分配权重等等,具体情况具体分析。