SLB(Server Load Balance)服务通过设置虚拟服务地址(IP),将位于同一地域(Region)的多台云服务器(Elastic Compute Service,简称ECS)资源虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,将来自客户端的网络请求分发到云服务器池中。
负载均衡(Server Load Balancer,下文简称 SLB)的引入,可以降低单台云服务器 ECS(下文简称 ECS)出现异常时对业务的冲击,提升业务的可用性。同时,结合弹性伸缩服务,通过动态调整后端服务器,可以快速对业务进行弹性调整(扩容或缩容),以快速应对业务的发展。
SLB 基本概念
参考资料
SLB由 LoadBalancer、Listener、Backend Server 三个部分组成。
LoadBalancer:负载均衡实例。
Listener:用户定制的监听器,定义了负载均衡策略和转发规则。
BackendServer:后端的一组ECS(云服务器)。
负载均衡实例
性能保障型实例的三个关键指标:
- 最大连接数-Max Connection
最大连接数定义了一个负载均衡实例能够承载的最大连接数量。当实例上的连接超过规格定义的最大连接数时,新建连接请求将被丢弃。 - 每秒新建连接数-Connection Per Second(CPS)
每秒新建连接数定义了新建连接的速率。当新建连接的速率超过规格定义的每秒新建连接数时,新建连接请求将被丢弃。 - 每秒查询数-Query Per Second(QPS)
每秒请求数是七层监听特有的概念,指的是每秒可以完成的HTTP或HTTPS的查询(请求)的数量。当请求速率超过规格所定义的每秒查询数时,新建连接请求将被丢弃。
SLB架构
整个SLB架构分成三种:四层负载均衡,七层负载均衡 和 控制系统(用于 配置和监控 负载均衡系统),如下图所示;
四层负载均衡(传输层
四层负载均衡,采用开源软件LVS(linux virtual server),并根据云计算需求对其进行了定制化。适合无状态的
TCP
建议的应用场景
注重可靠性,对数据准确性要求高,速度可以相对较慢的场景;
示例:文件传输、发送或接收邮件、远程登录、无特殊要求的 Web 应用
特性
- 面向连接的协议;
- 在正式收发数据前,必须和对方建立可靠的连接;
- 基于源地址会话保持,在网络层可直接看到来源地址;
- 监听支持 TCP 和 HTTP 两种方式进行健康检查;
- 转发路径短,所以性能比 7 层更好,数据传输速度更快
UDP
建议的应用场景
- 关注实时性而相对不注重可靠性的场景;
- 示例:视频聊天、金融实时行情推送
特性
- 面向非连接的协议;
- 在数据发送前不与对方进行三次握手,直接进行数据包发送,不提供差错恢复和数据重传;
- 可靠性相对低;数据传输快
- 通过UDP报文探测来获取状态信息。
实现
- LVS(Linux Virtual Server):即Linux虚拟服务器
- 基于NAT的LVS模式负载均衡
- 基于TUN的LVS负载均衡
- 基于DR的LVS负载均衡
LVS的组成
- 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
- 服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。
- 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
七层负载均衡(应用层)
七层负载均衡,采用开源软件Tengine
HTTP
建议的应用场景
- 需要对数据内容进行识别的应用,如 Web 应用、小的手机游戏等
特性
- 应用层协议,主要解决如何包装数据;
- 基于 Cookie 会话保持;使用 X-Forward-For 获取源地址;
- 监听只支持 HTTP 方式健康检查
HTTPs
建议的应用场景
实现
- 通过Tengine实现
会话保持
四层TCP
同一P地址的请求持续发往一台服务器
七层HTTP
相同cookiel同的请求发往一台服务器
负载均衡的调度算法
1.轮询调度
轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
2.加权轮询调度
加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
3.最小连接调度
最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)
4.加权最小连接调度
加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5.基于局部的最少连接
基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。
6.带复制的基于局部性的最少连接
带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7.目标地址散列调度
目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
8.源地址散列调度U
源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。
9.最短的期望的延迟
最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。
10.最少队列调度
最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。
错误码
503
没有配置后端服务器,或配置的后端服务器的权重为0会导致SLB返回状态码503。
ACP考试相关外延知识点
- 后端服务器的健康状况为normal,abnormal和unavailable三种。其中unavailable表示这个负载均衡实例没有配置健康检查,无法获取后端服务器的健康状况。
- 负载均衡目前仅支持阿里云云服务器(ECS)实例。
开启负载均衡后,请求分布不均匀的可能原因
- 总体的请求数较少。
- 后端服务器组中ECS实例的权重不一致。
- 后端服务器的健康状态异常。
- 负载均衡SLB实例开启了会话保持功能。
- 后端服务器组中仅部分ECS实例开启了TCP的Keepalive保持长连接特性。
四层网络是基于 源IP实现, 7层网络是基于Cookie实现的
- 健康检查过程中,4层服务健康检查基于端口,七层服务检查是基于返回的健康码。
- 共享实例带宽, 如果给某个监听设置带宽峰值,则会再总带宽中剥离出对应的贷款作为该监控的独享(其他监听任务无法使用)
SLB 四层:支持轮询、加权轮询和一致性哈希调度;
SLB 七层:支持轮询、加权轮询调度算法。