[TOC]
0x00 前言简述
0.基础介绍
Q:什么是负载均衡?
答: 负载均衡(Load Balance:
英 /ˈbæləns/
:别名:SLB后面统一采用该名称
)建立在现有网络结构之上,它提供了一种廉价有效透明代理的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性;
负载均衡有两方面的含义:
- 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
- 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总返回给用户,系统处理能力得到大幅度提高。 简单的说一切为了用户的使用体验(减少工作响应时间)以及将系统资源使用率达到最高(将单个繁重的工作转发给后端多个节点处理), 目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性;
1.负载均衡分类
SLB 工作层次分类:
- (1) 四层负载均衡(
常用
-TCP): 工作在OSI模型的传输层,即支持TCP/UDP协议的应用,协议中包含源和目标IP以及源和目标端口;- 原理: 四层负载均衡服务器在接受到客户端请求后,通过修改数据包得
地址信息(ip 端口号)
将流量转发到应用服务器;
- 原理: 四层负载均衡服务器在接受到客户端请求后,通过修改数据包得
- (2) 七层负载均衡(
常用
-HTTP): 工作在OSI模型的应用层,该层协议较多常用http/radius/dns等,SLB可以通过选择不同的协议来进行负载;- 原理: 七层负载均衡可以对同一个Web服务器进行负载,它除了根据IP加端口进行负载外,还可根据
http协议中的URL/浏览器类别/语言
来决定是否要进行负载均衡;
- 原理: 七层负载均衡可以对同一个Web服务器进行负载,它除了根据IP加端口进行负载外,还可根据
- (3) 二层负载均衡(mac):根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
- (4) 三层负载均衡(ip) : 根据OSI模型分的三层负载, 一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应. (即一个ip对一个ip的转发, 端口全放开)
2.负载均衡区别
在实际运维工作中常见的是四层与七层负载下面来说说两种负载均衡的区别:
1) 名称叫法以及实现方式的异同:
- 四层负载均衡器称为四层交换机(L4 Switch):主要分析IP层及TCP/UDP层, 在三层SLB基础上通过其VIP地址,在加上四层中的应用端口,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,
转发
至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。 - 七层负载均衡器称为七层交换机(L7 switch):主要分析应用层的信息以及IP层,应用层如HTTP协议URI或Cookie信息、浏览器类别、语言来决定是否要进行负载均衡,然后通过
代理
方式与后台服务器通信, 它在四层SLB基础上实现七层负载均衡所以它也支持四层负载均衡中的一些协议;
2) 适用的协议区别
- 四层SLB: TCP/UDP/IP 适用于任何基于tcp/ip协议的软件的负载均衡,较为灵活可以作为多种软件的负载均衡器。(haproxy、LVS)
- 七层SLB: HTTP/FTP/MySQL/Redis 等等,适用于web服务器的负载均衡,可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性(nginx 常被称为反向代理服务器);
3) 进行负载通信的区别
- 四层SLB:以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接
转发
给该服务器。TCP的连接建立即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作
。并且为了保证服务器回包可以正确的返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。 - 七层SLB:以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先
代理
最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器,在这样的情况下它更类似于一个代理服务器
,即负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接;
4) 不同层的均衡器额外实现的功能
- 四层SLB: 无
- 七层SLB: 压缩技术 缓存技术 防盗链技术
5) 安全性区别说明,例如网络中最常见的SYN Flood攻击,使用虚假IP地址对同一目标发送SYN攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到Denial of Service(DoS)的目的;
- 四层SLB: 四层模式下这些SYN攻击都会被转发到后端的服务器上
- 七层SLB: 七层模式下这些SYN攻击自然在负载均衡设备上就截止,不会将其代理通信到后端服务器上, 这是由于其设定多种策略,过滤特定报文,从而达到从应用层面进一步提高系统整体安全
6) 负载均衡实现软件与硬件是不同的
代码语言:javascript复制#实现四层负载均衡的软件优缺点:
A10:硬件负载均衡器,成本稍高。
F5:硬件负载均衡器,功能很好,但是成本很高。
lvs:重量级的四层负载软件
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
haproxy:模拟四层转发,较灵活
#实现七层负载均衡的软件优缺点:
A10:硬件负载均衡器,功能完整但是成本很高。
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
apache:功能较差
Mysql proxy:功能尚可。
总结:
1.举个例子形象的说明:四层负载均衡就像银行的自助排号机,每一个达到银行的客户根据排号机的顺序,选择对应的窗口接受服务;而七层负载均衡像银行大堂经理,先确认客户需要办理的业务,再安排排号。这样办理理财、存取款等业务的客户,会根据银行内部资源得到统一协调处理,加快客户业务办理流程。
2.总体对比
代码语言:javascript复制2.1) 智能性
* 七层负载均衡由于具备OIS七层的所有功能,所以在处理用户需求上能更加灵活,从理论上讲,七层模型能对用户的所有跟服务端的请求进行修改。例如对文件header添加信息,根据不同的文件类型进行分类转发。
* 四层模型仅支持基于网络层的需求转发,不能修改用户请求的内容。
2.2) 安全性
* 七层负载均衡由于具有OSI模型的全部功能,能更容易抵御来自网络的攻击;
* 四层模型从原理上讲,会直接将用户的请求转发给后端节点,无法直接抵御网络攻击。
2.3) 复杂度
* 四层模型一般比较简单的架构,容易管理,容易定位问题;
* 七层模型架构比较复杂,通常也需要考虑结合四层模型的混用情况,出现问题定位比较复杂。
2.4) 效率比
四层模型基于更底层的设置,通常效率更高,但应用范围有限;
七层模型需要更多的资源损耗,在理论上讲比四层模型有更强的功能,现在的实现更多是基于http应用。
2.5) 成本比
四层负载均衡明显的对负载均衡设备的要求稍低, 采用LVS软件便可以轻松实现负载,采用硬件均衡器,由于功能不如七层那么完整价格稍低(同等条件下)。
七层负载均衡明显的对负载均衡设备的要求更高, 也可以Haproxy软件进行实现但是实现效果远不如硬件负载均衡器,由于其功能实现较多所以可能会按照特定模块进行购买,从而增加成本。
3.从上面实现软硬件上来看一般是lvs做4层负载;nginx做7层负载(也能做4层负载通过stream模块)
;haproxy比较灵活4层和7层负载均衡都能做;
4.我们知道四层负载与七层负载最大的区别就是效率与功能
的区别,从下面图中简单的总结上面的知识;
WeiyiGeek.L4vsL7
4.负载均衡技术方案说明
Q:如何实现SLB进行应用流量分发?
答: 常规的实现方式就两种,一种是走硬件,另外一种是走软件;
软/硬件负载均衡区别 (1)软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive ipvs等
优点: 基于特定环境,配置简单,使用灵活,成本低廉,可以满足普通的企业一般的负载均衡需求; 缺点: 依赖于操作系统,增加资源开销并且软件可扩展性并不是很好;软件的优劣决定环境的性能;系统的安全,软件的稳定性均会影响到整个环境的安全。
(2)硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备
,这种设备通常是一个独立于系统的硬件,我们称之为负载均衡器(可以串联部署或者旁路部署
)。
优点: 独立于系统,整体性能大量提升,在功能、性能上优于软件方式;智能的流量管理,多种策略可选,能达到最佳的负载均衡效果; 缺点: 价格昂贵
本地/全局负载均衡
描述:负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)
和全局负载均衡(Global Load Balance,也叫地域负载均衡)
,本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。
(1)本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。
(2)全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度(类似于CDN内容分发
),也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。
网络层次上的负载均衡
描述: 针对网络上负载过重的不同瓶颈所在,从网络的不同层次入手,我们可以采用相应的负载均衡技术来解决现有问题; 随着带宽增加与数据流量不断增大,网络核心部分的数据接口将面临瓶颈问题,原有的单一线路将很难满足需求,而且线路的升级又过于昂贵甚至难以实现,这时就可以考虑采用链路聚合(Trunking)技术
。
链路聚合技术(第二层负载均衡)将多条物理链路当作一条单一的聚合逻辑链路使用,网络数据流量由聚合逻辑链路中所有物理链路共同承担,由此在逻辑上增大了链路的容量,使其能满足带宽增加的需求。
现代负载均衡技术通常操作于网络的第四层或第七层
:
代码语言:javascript复制(1) 四层负载均衡将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次 TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目标地址是服务器群VIP(虚拟 IP,Virtual IP address)连接请求的数据包流经交换机,交换机根据源端和目的IP地址、TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。
(2) 七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。
#七层负载均衡优点表现在如下几个方面:
1)通过对HTTP报头的检查,可以检测出HTTP400、500和600系列的错误信息,因而能透明地将连接请求重新定向到另一台服务器,避免应用层故障。
2)可根据流经的数据类型(如判断数据包是图像文件、压缩文件或多媒体文件格式等),把数据流量引向相应内容的服务器来处理,增加系统性能。
3)能根据连接请求的类型,如是普通文本、图象等静态文档请求,还是asp、cgi等的动态文档请求,把相应的请求引向相应的服务器来处理,提高系统的性能及安全性。
#七层负载均衡缺点表现在如下几个方面:
1)七层负载均衡受到其所支持的协议限制(一般只有HTTP),这样就限制了它应用的广泛性。
2)七层负载均衡检查HTTP报头会占用大量的系统资源,势必会影响到系统的性能,在大量连接请求的情况下,负载均衡设备自身容易成为网络整体性能的瓶颈。
原文作者: WeiyiGeek [https://weiyigeek.top]
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/4-23-109.html
更多最新文章, 请关注我的微信公众账号【WeiyiGeek】或者【B站专栏】哟, 谢谢支持!(๑′ᴗ‵๑) ❤
5.负载均衡需求与应用
应用场景说明:
- (1)四层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。
- (2)七层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。
购买七层应用需要考虑的问题:
- 1)是否真的必要。七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。在设计系统时需要考虑四层七层同时应用的混杂情况。
- 2)是否真的可以提高安全性。例如SYN Flood攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗DDoS能力,否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。
- 3)是否有足够的灵活度。七层应用的优势是可以让整个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。最简单的一个考核就是能否取代后台Nginx或者Apache等服务器上的调度功能。能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。
6.负载均衡策略
描述:在各负载均衡方式中针对不同的应用需求,在OSI参考模型的第二、三、四、七层
的负载均衡都有相应的负载均衡策略;
在实际应用中,我们可能不想仅仅是把客户端的服务请求平均地分配给内部服务器,而不管服务器是否宕机。而是想使Pentium III服务器
比Pentium II
能接受更多的服务请求,一台处理服务请求较少的服务器能分配到更多的服务请求,出现故障的服务器将不再接受服务请求直至故障恢复等等。选择合适的负载均衡策略,使多个设备能很好的共同完成任务,消除或避免现有网络负载分布不均、数据流量拥挤反应时间长的瓶颈;
负载均衡策略的优劣及其实现的难易程度有两个关键因素:
(1) 负载均衡算法
代码语言:javascript复制1)轮循均衡(Round Robin):每一次来自网络的请求轮流分配给内部中的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
2)权重轮循均衡(Weighted Round Robin):根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。例如:服务器A的权值被设计成1,B的权值是 3,C的权值是6,则服务器A、B、C将分别接受到10%、30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。
3)随机均衡(Random):把来自网络的请求随机分配给内部中的多个服务器。
4)权重随机均衡(Weighted Random):此种均衡算法类似于权重轮循算法,不过在处理请求分担时是个随机选择的过程。
5)响应速度均衡(Response Time):负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。此种均衡算法能较好的反映服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。
6)最少连接数均衡(Least Connection):客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如FTP。
7)处理能力均衡:此种均衡算法将把服务请求分配给内部中处理负荷(根据服务器CPU型号、CPU数量、内存大小及当前连接数等换算而成)最轻的服务器,由于考虑到了内部服务器的处理能力及当前网络运行状况,所以此种均衡算法相对来说更加精确,尤其适合运用到第七层(应用层)负载均衡的情况下。
8)DNS响应均衡(Flash DNS):在Internet上,无论是HTTP、FTP或是其它的服务请求,客户端一般都是通过域名解析来找到服务器确切的IP地址的。在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自相对应服务器的IP地址(即与此负载均衡设备在同一位地理位置的服务器的IP地址)并返回给客户端,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其它的IP地址响应。在种均衡策略适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的。
(2) 对网络系统状况的检测方式和能力
F&Q
Q:负载均衡时的数据流都经过负载均衡器,如何解决负载均衡器成为瓶颈的问题?
答: 在四层SLB中可以通过修改tcp报文的源地址和目的地址,使从web服务器中返回的数据直接返回到客户端,然而在七层负载均衡中无法直接做到,由于它和客户端与服务端都进行了三次握手,所以采用将所有服务器主机ip虚拟化成负载均衡服务器的IP,这样服务器集群的所有主机都可以访问外界网络,因为ip地址(网络层,三层)都是相同,所以只能通过第二层来分辨数据流向,修改数据链路层(二层)目的主机的MAC地址,使请求发到web服务器上,然后才真正建立起tcp连接,然后web服务器因为可以联网就可以直接返回数据给客户端;
Q:SLB问题之访问如何代入访问者IP?
答:常常需要在请求过滤器中加入
X-Forwarded-For
请求头(比如 A10:https://www.a10networks.com.cn/)然后负载均衡中将访问者的IP代入其头部中,然后应用获取即可;