目录
https://www.jianshu.com/p/fa937b8e6712
二层负载均衡
通过MAC地址互联,请求到虚拟MAC再分配到真实MAC,就MAC到MAC两层。
三层负载均衡
通过IP互联,请求到虚拟IP,然后通过中间层转发到真实IP。
四层负载均衡
通过IP+端口,请求到IP+端口,通过发布三层的ip地址然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,发布到后台服务器,并记录下这个TCP或者 UDP的流量是发向哪个服务器的,后续也继续转发到该服务器。
主要分析ip层及TCP/UDP层,实现四层流量负载均衡。
工作在OSI的第4层,即TCP层,如LVS, F5
七层负载均衡
通过URL,即通过URL请求连接,它在四层负载的基础上再对应用层进行分析,比如这个URL的HTTP协议URI和cookie等信息。
除了支持4层负载均衡以外,还要分析应用层的信息,如HTTP协议URI或cookie信息。
工作在OSI的最高层:应用层。如haproxy, mysql proxy
区别
4层负载均衡
主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标ip地址进行修改(改为后端服务器ip),直接转发给该服务器。
TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到了一个类似路由转发的作用。
在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
7层负载均衡
也称为“内容交换”。通过报文中真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立三次握手后,才可能接收到客户端发送的真正应用层内容的报文,然后再根据报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最注重选择的内部服务器。
负载均衡设备在这种情况下更类似一个代理服务器。负载均衡和前端的客户端以及后台的服务器会分别建立TCP连接。
对负载设备的要求更高,处理能力比4层的低。
好处
1.使得整个网络更智能化。如一个网站的流量可以通过7层的方式,将图片发送到特定的图片服务器并可以使用缓存技术;将文字类发送到特定的文字服务器并可以使用压缩技术。
2.安全性。
网络中最常见的就是SYN Flood攻击(https://blog.csdn.net/u010918487/article/details/95587308),即黑客控制众多源客户端,使用虚假IP地址对同一目标发送SYN攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到DoS(denial of service)的目的。
在4层负载均衡下,这些SYN攻击都会被转发到后端服务器,而7层下这些SYN会在负载均衡设备上被截止,不会影响后台服务器运行。
负载均衡器优缺点
nginx
优点
1.工作在网络的7层上,可以针对http应用做一些分流的策略,如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活。
2.对网络稳定性的依赖很小,理论上能ping通就能进行负载均衡,LVS对网络依赖性很大。
3.nginx安装和配置简单,测试方便,基本能把错误日志打印出来。LVS的配置、测试花的时间很长
4.可以承担高负载压力且稳定,在硬件不差的情况下能支撑几万次的并发,负载度比LVS小一些
5.可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等,并且会把返回错误的请求重新提交到另一个节点,但是不支持url检测
6.可以作为web服务器,反向代理加速器,中层反向代理,静态网页和服务器。
缺点
1.仅支持http, https, email协议,适用范围小。
2.对后端服务器的检查只支持端口检测,不支持url检测,不支持session的直接保持,但可以通过ip hash解决。
LVS
优点
1.抗负载能力强,工作在第四层,仅做转发使用,没有流量产生,对内存和cpu消耗比较低。
2.配置性比较低,没有太多可配置的东西。
3.无流量,只转发请求,保证均衡器IO性能不会受到大流量的影响
4.应用范围广,由于工作在第四层,几乎可以对所有应用做负载均衡。
缺点
本身不支持正则,不能动静分离。
HAProxy
1.支持虚拟主机
2.支持session保持,cookie的引导;支持通过获取指定url检测后端服务器状态
3.性能和并发上优于nginx。
4.支持TCP协议的负载均衡转发。
5.支持的负载均衡算法多:
① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③ leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ ri,表示根据请求的URI;
⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求