上文我们已经实现了mycat集群(https://www.cnblogs.com/zwh0910/p/17278863.html),现在我们来实现mycat集群的负载均衡
在前面架构中,虽然对mycat做了集群,保障了mycat的可靠性,但是,应用程序需要连接到多个mycat,显然不是很友好的,也就是说缺少负载均衡的组件,接下来我们来了解下HAProxy。
一、HAProxy简介
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxv特别适用于那些负载特大的web5站点,这些站点通常又需要会话保持或七层外理。HAProxy云行在当前的硬件上,完全可以支持数以万计的并发连接。并目它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(UserSpace)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub,Bitbucket、Stack Overfilow、Reddit,Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网服务系统都使用了HAProxy。
官网: http://www.haproxy.org/
关于并发性能,haproxy可以做到千万级的并发。(当然了,运行环境不同,测试结果也不相同的)
架构
二、部署安装HAProxy
我们依然是通过 docker进行安装。
拉取镜像
docker pull haproxy:2.5.13
创建目录,用于存放配置文件
mkdir /root/haproxy
编写配置文件:
cd haproxy/
vim haproxy.cfg
内容如下:
global log 127.0.0.1 local2 maxconn 4000 daemon defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 listen admin_stats bind 0.0.0.0:4001 mode http stats uri /dbs stats realm Global\ statistics stats auth admin:admin123 listen proxy-mysql bind 0.0.0.0:4002 mode tcp balance roundrobin option tcplog server mycat1 localhost:8066 check port 8066 maxconn 2000 server mycat2 localhost:8067 check port 8067 maxconn 2000
global为全局配置,defaults为默认配置,listen为监听,admin_stats为管理界面,端口为4001,登录认证的账号为admin,密码为admin123,uri为浏览器访问的路径IP:prot/uri。proxy-mysql为mysql代理,端口为4002,采用的负载均衡策略balance为roundrobin。
云服务器要放开4001和4002端口
保存退出
创建容器
docker create --name haproxy --net host -v /root/haproxy:/usr/local/etc/haproxy haproxy:2.5.13
启动容器:
docker restart haproxy && docker logs -f haproxy
结果如下:
[root@hecs-140905 haproxy]# docker restart haproxy && docker logs -f haproxy haproxy [NOTICE] (1) : haproxy version is 2.5.13-6f0edfa [NOTICE] (1) : path to executable is /usr/local/sbin/haproxy [WARNING] (1) : config : 'option forwardfor' ignored for proxy 'proxy-mysql' as it requires HTTP mode. [NOTICE] (1) : New worker (8) forked [NOTICE] (1) : Loading success.
浏览器访问:http://114.115.246.152:4001/dbs,显示如下:
输入haproxy.cfg文件中配置的用户名admin,密码admin123,点击登录后进入如下页面:
测试通过haproxy代理连接到两个mycat
注意:用户名和密码使用mycat的用户和密码
打开TB_AD表,
此时已经实现了通过haproxy代理对接两个mycat,并且两个mycat又分别对接到两个mysql集群。亲测有效