负载均衡学习
一、什么是负载均衡
负载均衡 是一种将网络流量、工作负载或请求分发到多个服务器或资源的技术。它旨在提高系统的性能、可伸缩性和可靠性,确保资源的有效利用和高可用性。
在负载均衡中,多个服务器或资源被组成一个集群或池,并共享同一个服务地址。当用户发起请求时,负载均衡器会根据一定的算法和策略将请求分发到其中的服务器或资源上,使得每个服务器都能够处理适当的工作负载,并避免单个服务器过载。
负载均衡的主要目标包括:
-
分发负载:负载均衡器可以将流量平衡地分发到多个服务器上,确保每个服务器都能够处理适量的请求,避免单点故障和过载现象。
-
提高性能:通过将请求分发到多个服务器上,并行处理请求,负载均衡可以提高系统的响应速度和吞吐量,减少用户等待时间。
-
实现高可用性:负载均衡器可以检测服务器的健康状态,并自动将流量重新分发到可用的服务器上,从而实现高可用性和故障恢复能力。
-
扩展性:通过向负载均衡集群添加更多的服务器,系统可以轻松扩展,以适应日益增长的用户和流量需求。
二、为什么需要负载均衡
从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,但不同的机器面临的业务压力不尽相同,为了使各机器均匀的分担业务处理压力,需要在集群前面增加负载均衡设备,实现业务被平均分发到各业务处理单元。

三、负载均衡特点
1. 高性能和可伸缩性
随着用户数量和流量的增长,单个服务器可能无法满足系统的性能要求。通过负载均衡,流量可以平衡地分发到多个服务器上,充分利用资源,提高整体性能和吞吐量。负载均衡还可以轻松地添加更多的服务器来扩展系统的处理能力,以适应不断增长的需求。
2. 高可用性
当单个服务器出现故障或需要维护时,负载均衡可以自动将流量重新分发到其他健康的服务器上,确保系统的可用性和持续性。通过在集群中使用负载均衡,可以实现容错和故障恢复,避免单点故障导致的服务中断。
3. 优化资源利用
负载均衡可以根据服务器的性能和负载情况智能地分发请求,使得每个服务器都能够处理适量的工作负载。这可以避免某些服务器过载,而其他服务器处于低负载状态的情况,从而更有效地利用资源。
4. 提高用户体验
负载均衡可以将用户请求分发到离用户较近或网络延迟较低的服务器上,减少响应时间和网络延迟,提供更好的用户体验。
5. 灵活性和可配置性
负载均衡提供了多种算法和策略来适应不同的需求和场景。根据应用程序的特点和要求,可以灵活配置负载均衡的行为和参数,以实现最佳的性能和资源利用。
总而言之,负载均衡是一种关键的技术,可以提高系统的性能、可用性和可伸缩性,优化资源利用,提供良好的用户体验,并适应不断变化的需求和流量模式。它是构建高性能、高可用性的现代计算系统的重要组成部分。
四、负载均衡的原理
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。
纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。
横向扩展,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。典型的集群和负载均衡架构:如下图:

应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)
五、常见算法
(1)随机算法
Random随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
(2)轮询及加权轮询
轮询(Round Robbin)当服务器群中各服务器的处理能力相同时,且每笔业务处理量差异不大时,最适合使用这种算法。 轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
加权轮询(Weighted Round Robbin)为轮询中的每台服务器附加一定权重的算法。比如服务器1权重1,服务器2权重2,服务器3权重3,则顺序为1-2-2-3-3-3-1-2-2-3-3-3- ......
(3)最小连接及加权最小连接
最少连接(Least Connections)在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。即使在每台服务器处理能力各不相同,每笔业务处理量也不相同的情况下,也能够在一定程度上降低服务器的负载。
加权最少连接(Weighted Least Connection)为最少连接算法中的每台服务器附加权重的算法,该算法事先为每台服务器分配处理连接的数量,并将客户端请求转至连接数最少的服务器上。
(4)哈希算法
普通哈希
一致性Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
(5)IP地址散列
通过管理发送方IP和目的地IP地址的散列,将来自同一发送方的分组(或发送至同一目的地的分组)统一转发到相同服务器的算法。当客户端有一系列业务需要处理而必须和一个服务器反复通信时,该算法能够以流(会话)为单位,保证来自相同客户端的通信能够一直在同一服务器中进行处理。
(6)URL散列
通过管理客户端请求URL信息的散列,将发送至相同URL的请求转发至同一服务器的算法。
六、常见负载均衡架构
6.1 DNS域名解析负载均衡
DNS负载均衡:通过在DNS服务器中配置多个IP地址,将请求分发到不同的服务器上。这种方式适用于分布在不同地理位置的服务器群集,可以根据用户的位置或其他策略选择最接近的服务器。
利用DNS处理域名解析请求的同时进行负载均衡是另一种常用的方案。在DNS服务器中配置多个A记录,如:www.mysite.com IN A 114.100.80.1、www.mysite.com IN A 114.100.80.2、www.mysite.com IN A 114.100.80.3.
每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样A记录中配置的多个服务器就构成一个集群,并可以实现负载均衡。
DNS域名解析负载均衡的优点是将负载均衡工作交给DNS,省略掉了网络管理的麻烦,缺点就是DNS可能缓存A记录,不受网站控制。事实上,大型网站总是部分使用DNS域名解析,作为第一级负载均衡手段,然后再在内部做第二级负载均衡。
6.2 LVS负载均衡机制:NAT模式
NAT是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。
IP负载均衡在内核进程完成数据分发,较反向代理均衡有更好的处理性能。但由于所有请求响应的数据包都需要经过负载均衡服务器,因此负载均衡的网卡带宽成为系统的瓶颈。
6.3 LVS负载均衡机制:DR模式
DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

6.4 反向代理负载均衡(nginx)
反向代理的作用是保护网站安全,所有互联网的请求都必须经过代理服务器,相当于在web服务器和可能的网络攻击之间建立了一个屏障。
代理服务器也可以配置缓存加速web请求。当用户第一次访问静态内容的时候,静态内存就被缓存在反向代理服务器上,这样当其他用户访问该静态内容时,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力。
另外,反向代理服务器也可以实现负载均衡的功能。
由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是部署简单,缺点是可能成为系统的瓶颈
-
传统硬件负载均衡器:使用专用的硬件设备来实现负载均衡功能。这些设备通常具有高性能和可靠性,能够处理大量的网络流量并分发到后端服务器。
-
软件负载均衡器:基于软件的负载均衡器是在普通服务器上运行的负载均衡软件。常见的软件负载均衡器包括Nginx、HAProxy、Apache HTTP Server等。它们提供负载均衡的功能,并且可以根据需求进行灵活配置和扩展
-
会话持久性负载均衡:为了确保用户的会话状态一致,这种负载均衡架构会将同一个用户的请求路由到同一个后端服务器上。这可以通过在负载均衡器上存储会话信息或使用专门的会话持久性解决方案实现。
-
应用层负载均衡:在应用层面上实现负载均衡,可以根据应用协议和请求内容进行智能路由。例如,根据URL、HTTP标头或负载内容进行请求分发和处理,以实现更精细的负载均衡和流量控制。
-
分布式负载均衡:将负载均衡功能分布到多个节点或边缘设备中,使得负载均衡决策更加分散和灵活。这种架构适用于大规模系统和分布式环境,可以实现更高的可伸缩性和容错性。
负载均衡可以应用于各种网络服务,例如网站、应用程序、数据库、存储等。常见的负载均衡算法包括轮询、最小连接数、加权轮询、加权最小连接数等,根据具体的需求和场景选择适合的负载均衡算法。
总之,负载均衡是一种通过分发流量和请求到多个服务器或资源上,提高系统性能、可扩展性和可靠性的技术。它是构建高性能、高可用性的分布式系统和服务的重要组成部分。
参考链接:https://blog.csdn.net/tuwenqi2013/article/details/104582838
更多推荐



所有评论(0)