一、haproxy简介
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。
(1)免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与硬件级的F5相媲美;
(2)根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个数值作为软件级负载均衡器是相当惊人的;
(3)HAProxy 支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器;这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用;这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)HAProxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡;
(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警;
(7)HAProxy支持虚拟主机。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。包括lvs,Nginx,ApacheProxy,lighttpd等。
国内生产环境上使用Haproxy的公司很多,例如淘宝的CDN系统
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。基于合理的配置及优化,完全可以实现单机支持数以万计的并发连接。
HAProxy支持2种主要的代理模式:第一种代理模式是"tcp",即OSI网络模型中的第4层传输层协议;第二种代理模式是“http”,即OSI网络模型中的第7层应用层协议。在tcp模式下,HAProxy支持在客户端和服务器之间双向转发流量。http模式下,HAProxy进行协议分析,能够针对分析结果和用户配置来决定允许、拒绝、交换、增加、修改等工作策略。
二、haproxy的安装
1、yum安装
第一步:下载
[root@ren4 ~]# yum -y install haproxy
第二步:启动
[root@ren4 ~]# systemctl restart haproxy
第三步:查看是否启动成功(默认监听5000端口,可修改为80端口)
[root@ren4 haproxy]# lsof -i :5000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 38195 haproxy 5u IPv4 114916 0t0 TCP *:commplex-main (LISTEN)
haproxy的配置文件:
[root@ren4 haproxy]# rpm -qc haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
三、haproxy添加后端节点
[root@ren4 haproxy]# vim /etc/haproxy/haproxy.cfg
backend app
balance roundrobin
server app5 192.168.11.5:80 weight 1
server app6 192.168.11.6:80 weight 3
[root@ren4 haproxy]# systemctl restart haproxy
[root@ren4 haproxy]# firewall-cmd --add-port=5000/tcp
success
四、后端节点准备测试文件及测试结果
节点1:192.168.11.5
[root@ren5 ~]# echo "this is 5" > /var/www/html/index.html
[root@ren5 ~]# systemctl restart httpd
[root@ren5 ~]# firewall-cmd --add-port=80/tcp
节点2:192.168.11.6
[root@ren6 html]# echo "this is 6" > /var/www/html/index.html
[root@ren6 html]# systemctl restart httpd
[root@ren6 html]# firewall-cmd --add-port=80/tcp
success
测试结果:
五、haproxy监控web显示配置
在defaults后添加以下的内容:
1 defaults 2 stats refresh 30s #统计页面自动刷新时间 3 stats uri /stats #统计页面url(注意stats后是uri) 4 stats realm baison-test-Haproxy #统计页面密码框上提示文本 5 stats auth admin:123 #统计页面用户名和密码设置 6 stats hide-version #隐藏统计页面上HAProxy的版本信息
浏览器访问结果: