文章目录
概念
负载均衡(Load Balancing)是一种分布式计算技术,它将工作负载(Workload)从一个节点分摊到多个节点上,以实现高可用性和高性能。而常说的四层负载均衡与七层负载均衡,指是在 OSI 模型的哪一层进行请求转发。
OSI 模型(Open Systems Interconnection Model)全称“开放式系统互联模型”,诞生于 1984 年,是一种概念模型(如下图中间部分)。OSI参考模型并不是一个标准,而是一个在制定标准时所使用的概念性框架。例如 TCP/IP 四层模型是一个实现的应用模型,是由七层模型简化合并而来。
分类
二层负载均衡
负载均衡器对外依然提供一个VIP(虚IP),集群中不同的机器采用相同 IP 地址,但是机器的 MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。
三层负载均衡
和二层负载均衡类似,负载均衡服务器对外依然提供一个VIP(虚IP),但是集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。
四层负载均衡
四层即传输层,其通过 IP + 端口的方式进行路由转发(这里的四层可以理解为只工作到第四层,即只解析网络包到第四层,根据四层的内容比如 TCP port,IP 等就能确定转发给谁),根据负载均衡器设置的负载均衡策略,决定最终请求的真实服务器。
以 TCP 为例,客户端向负载均衡发送 SYN 请求建立第一次连接。通过配置的负载均衡算法选择一台后端服务器,并且将报文中的 IP 地址信息修改为后台服务器的 IP 地址信息,因此 TCP 三次握手连接是与后端服务器直接建立起来的。
常见的四层负载均衡设备有:F5、LVS 等。
转发有多种模式
- DR模式也叫作三角传输,通过修改数据包的目的MAC地址来让流量经过二层转发到达应用服务器,这样应用服务器就可以直接将应答发给应用服务器,性能比较好。由于这种模式需要依赖二层转发,因此它要求负载均衡服务器和应用服务器必须在一个二层可达的环境内,并且需要在应用服务器上配置VIP。
- NAT模式通过修改数据包的目的IP地址,让流量到达应用服务器,这样做的好处是数据包的目的IP就是应用服务器的IP,因此不需要再在应用服务器上配置VIP了。缺点是由于这种模式修改了目的IP地址,这样如果应用服务器直接将应答包发给客户端的话,其源IP是应用服务器的IP,客户端就不会正常接收这个应答,因此我们需要让流量继续回到负载均衡,负载均衡将应答包的源IP改回VIP再发到客户端,这样才可以保证正常通信,所以NAT模式要求负载均衡需要以网关的形式存在于网络中。
- TUNNEL模式的优缺点和DR是一样的,并且TUNNEL模式要求应用服务器必须支持TUNNEL功能。
- FULLNAT模式是在NAT模式的基础上做一次源地址转换(即SNAT),做SNAT的好处是可以让应答流量经过正常的三层路由回到负载均衡上,这样负载均衡就不需要以网关的形式存在于网络中了,对网络环境要求比较低,缺点是由于做了SNAT,应用服务器会丢失客户端的真实IP地址。
七层负载均衡
OSI 的第七次是应用层,其一般是基于请求 URL 地址的方式进行代理转发(这里的七层指的是解析网络包到第七层,要根据七层的内容比如 HTTP URL path,HTTP header 等才能确定转发给谁)。七层服务均衡在应用层选择服务器,只能先与负载均衡设备进行 TCP 连接,然后负载均衡设备再与后端服务器建立另外一条 TCP 连接通道。因此,七层设备在网络性能损耗会更多一些。
常见的七层负载均衡设备有:Nginx 等。
对比
对比四层和七层负载均衡差异:
- 工作层级不同。四层负载均衡工作在传输层,七层负载均衡工作在应用层。
- 建立连接不同。四层负载均衡,客户端直接与后端服务器建立连接,本质是转发;七层负载均衡则作为中间人与上下游建立连接,本质是代理。
- 效率不同。四层负载均衡相对效率较高,七层负载均衡效率较低。
- 灵活性方面。七层负载均衡可以做更多的改造,例如可以对流量进行清洗,避免 DDOS 攻击。而四层负载均衡,由于是客户端与后端服务器直连,负载均衡设备无法介入。
总体看四层负载均衡的优势是性能高,七层负载均衡的优势是功能强。
常用负载均衡器
在软件均衡器方面,又分为直接建设在操作系统内核的均衡器和应用程序形式的均衡器两种。前者的代表是LVS(Linux Virtual Server),后者的代表有Nginx、HAProxy、KeepAlived,等等;前者的性能会更好,因为它不需要在内核空间和应用空间中来回复制数据包;而后者的优势是选择广泛,使用方便,功能不受限于内核版本。
在硬件均衡器方面,往往会直接采用应用专用集成电路(Application Specific Integrated Circuit,ASIC)来实现。因为它有专用处理芯片的支持,可以避免操作系统层面的损耗,从而能够达到最高的性能。这类的代表就是著名的F5和A10公司的负载均衡产品。
常见负载均衡算法
负载均衡算法可以分为两类:静态负载均衡算法和动态负载均衡算法。
静态负载均衡算法
轮询(Round Robin):顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。
比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。
动态负载均衡算法
最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。
最快模式(Fastest):传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
观察模式(Observed):连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。
预测模式(Predictive):BIG-IP利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。(被BIG-IP 进行检测)
动态性能分配(Dynamic Ratio-APM):BIG-IP 收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。
动态服务器补充(Dynamic Server Act.):当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。
服务质量(QoS):按不同的优先级对数据流进行分配。
服务类型(ToS): 按不同的服务类型(在Type of Field中标识)负载均衡对数据流进行分配。
规则模式:针对不同的数据流设置导向规则,用户可自行设置。
附
OSI 七层模型和TCP/IP模型及对应协议(详解)
参考
周志明的架构课 – 常见的四层负载均衡的工作模式是怎样的