简单学习总结前端
四层负载均衡工做在OSI模型的传输层,主要工做是转发,它在接收到客户端的流量之后经过修改数据包的地址信息将流量转发到应用服务器。java
七层负载均衡工做在OSI模型的应用层,由于它须要解析应用层流量,因此七层负载均衡在接到客户端的流量之后,还须要一个完整的TCP/IP协议栈。七层负载均衡会与客户端创建一条完整的链接并将应用层的请求流量解析出来,再按照调度算法选择一个应用服务器,并与应用服务器创建另一条链接将请求发送过去,所以七层负载均衡的主要工做就是代理。node
1)四层的负载均衡就是基于IP+端口的负载均衡:linux
对应的负载均衡器称为四层交换机(L4 switch),主要分析IP层及TCP/UDP层,实现四层负载均衡。此种负载均衡器不理解应用协议(如HTTP/FTP/MySQL等等)。
实现四层负载均衡的软件有:nginx
2)七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡正则表达式
对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡之外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议。
实现七层负载均衡的软件有:算法
总的来讲,通常是lvs作4层负载;nginx作7层负载;haproxy比较灵活,4层和7层负载均衡都能作。sql
(1)目前负载均衡系统有Nginx、LVS、F5,即:apache
(2)软件和硬件的区别在于性能,硬件远远高于软件,即:后端
(3)4层和7层的区别在于协议和灵活性,即:
技术原理上的区别。
所谓四层负载均衡,也就是主要经过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即经过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改成后端服务器IP),直接转发给该服务器。TCP的链接创建,即三次握手是客户端和服务器直接创建的,负载均衡设备只是起到一个相似路由器的转发动做。在某些部署状况下,为保证服务器回包能够正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
所谓七层负载均衡,也称为“内容交换”,也就是主要经过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备若是要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端创建链接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,而后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
负载均衡设备在这种状况下,更相似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别创建TCP链接。因此从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
一、轮询法
将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的链接数和当前的系统负载。
二、加权轮询法
不一样的后端服务器可能机器的配置和当前系统的负载并不相同,所以它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,下降其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
三、随机法
经过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由几率统计理论能够得知,随着客户端调用服务端的次数增多,
其实际效果愈来愈接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。
四、加权随机法
与加权轮询法同样,加权随机法也根据后端机器的配置,系统的负载分配不一样的权重。不一样的是,它是按照权重随机请求后端服务器,而非顺序。
五、哈希算法
六、最小链接数法
最小链接数算法比较灵活和智能,因为后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的链接状况,动态地选取其中当前
积压链接数最少的一台服务器来处理当前的请求,尽量地提升后端服务的利用效率,将负责合理地分流到每一台服务器。
七、IP地址散列
经过管理发送方IP和目的地IP地址的散列,未来自同一发送方的分组(或发送至同一目的地的分组)统一转发到相同服务器的算法。当客户端有一系列业务须要处理而必须和一个服务器反复通讯时,该算法可以以流(会话)为单位,保证来自相同客户端的通讯可以一直在同一服务器中进行处理。八、URL散列
经过管理客户端请求URL信息的散列,将发送至相同URL的请求转发至同一服务器的算法。轮询是默认的方式,每一个请求按时间顺序逐一分配到不一样的后端服务器上。若是后台服务器上某一台宕机了,它能够自动剔除。
缺点:可靠性低和负载分配不均衡。适用于图片服务器和静态页面服务器集群。
指定轮询的概率,wight和访问比率成正比,用于后台服务器性能不均匀的状况。
upstream linuxidc{
server 10.0.0.77 weight=5;
server 10.0.0.88 weight=10;
}复制代码
根据每一个请求的ip的hash结果分配,所以每一个固定ip能访问到同一个后端服务器,能够解决session问题。
upstream favresin{
ip_hash;
server 10.0.0.10:8080;
server 10.0.0.11:8080;
}复制代码
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream favresin{
server 10.0.0.10:8080;
server 10.0.0.11:8080;
fair;
}复制代码
按照访问url的hash结果来分配请求,每一个固定的url访问同一个后端服务器。若是后端服务器是缓存时效率高。
upstream resinserver{
server 10.0.0.10:7777;
server 10.0.0.11:8888;
hash $request_uri;
hash_method crc32;
}
例:在upstream中加入hash语句,hash_method是使用的hash算法。
复制代码
在upstream模块中,能够经过server命令指定后端服务器的IP地址和端口,同时还能够设置每台后端服务器在负载均衡调度中的状态,
upstream参数解析
示例:
tips:
upstream bakend{ #定义负载均衡设备的Ip及设备状态
ip_hash;
server 192.0.0.1:8090 weight=5 max_fails=3 fail_timeout=20s;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}复制代码