haproxy七层代理
一,负载均衡
1.1定义
负载均衡:简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
-
负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理
-
通常包括应用程序处理负载和网络流量负载,每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。
1.2负载均衡的优点
-
Web服务器的动态水平扩展-->对用户无感知、
-
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
-
节约公网IP地址-->降低IT支出成本
-
隐藏内部服务器IP-->提高内部服务器安全性
-
配置简单-->固定格式的配置文件
-
功能丰富-->支持四层和七层,支持动态下线主机
-
性能较强-->并发数万甚至数十万
1.3 负载均衡集群技术实现
-
负载均衡技术类型:基于 4 层或者7负载均衡技术
-
负载均衡实现方式:硬件设备、软件负载均衡
-
硬件负载均衡产品:
-
F5 美国F5网络公司 F5 | 多云安全和应用交付
-
Netscaler 美国思杰公司 https://www.citrix.com.cn/praducts/citrix-adc/、
-
Array 华耀 北京华耀科技有限公司
-
AD-1000 深信服 深信服 - 让每个用户的数字化更简单、更安全-深信服
-
-
软件负载均衡产品: LVS(Linux Virtual Server)、 haproxy、Nginx、Ats(apache traffic server)
实现原理图:
负载均衡分类:
-
二层负载均衡(mac):数据链路层 mac地址
一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应。
-
三层负载均衡(ip):网络层 ip地址
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。
-
四层负载均衡(tcp):传输层 port
在三层负载均衡的基础上,用ip+port接收请求,再转发到对应的机器。
-
七层负载均衡(http):应用层 url ip+port
根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器
四层负载均衡
-
工作流程:首先主要通过报文中的目标ip地址和端口,接着上负载均衡设备设置服务器选择方式(分发策略,轮询),记录tcp、udp流量走向,选择的内部服务器。
--------仔细就是在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发到后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
-
可提供四层负载均衡的软件:lvs(重量级)、Nginx(。轻量级、通过upstream模块实现)、haproxy (模拟4级转发,7级转发灵活)
七层负载均衡
-
首先通过虚拟Url或者主机进行流量识别,依据应用层进行信息分析,决定是否负载均衡,
-
若需要,则负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以此时的七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
示意图:
-
实现七层负载均衡的软件有:
-
haproxy:全面支持四层,七层代理,会话保持,标记,路径转移;
-
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
-
apache:功能较差
-
Mysql proxy:功能尚可。
四层与七层的区别
-
七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。
-
分层位置:四层负载均衡在传输层及以下,七层负载均衡在应用层及以下
-
性能:四层负载均衡架构无需解析报文消息内容,在网络吞吐量与处理能力上较高:七层可支持解析应用层报文消息内容,识别URL、Cookie、HTTP header等信息。
-
原理:四层负载均衡是基于ip+port;七层是基于虚拟的URL或主机IP等。
-
功能类比:四层负载均衡类似于路由器;七层类似于代理服务器。
-
安全性:四层负载均衡无法识别DDoS攻击;七层可防御SYNCookie/Flood攻击