SLB概念
负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(Elastic Compute Service,简称 ECS)的流量分发控制服务。
负载均衡服务通过设置虚拟服务地址,将位于同一地域的多台ECS实例虚拟成一个高性能、高可用的应用服务池;再根据应用指定的方式,将来自客户端的网络请求分发到云服务器池中。负载均衡服务是ECS面向多机方案的一个配套服务,需要同ECS结合使用。
负载均衡服务会检查云服务器池中ECS实例的健康状态,自动隔离异常状态的ECS实例,从而解决了单台ECS实例的单点问题,提高了应用的整体服务能力。在标准的负载均衡功能之外,负载均衡服务还具备TCP与HTTP抗DDoS攻击的特性,增强了应用服务的防护能力。
组成部分
负载均衡服务由负载均衡实例、监听和后端服务器三个部分组成。
负载均衡实例 (Server Load Balancer Instance)
如果您想使用负载均衡服务,必须先创建一个负载均衡实例。一个负载均衡实例可以添加多个监听和后端服务器。
监听 (Listener)
在使用负载均衡服务前,您必须为负载均衡实例添加一个监听,指定监听规则和转发策略,并配置健康检查。
针对不同的需求,您可以单独配置四层(TCP/UDP)或七层(HTTP/HTTPS)监听。
后端服务器(Backend Server)
一组接收前端请求的ECS实例。您可以单独添加ECS实例到服务器池,也可以通过虚拟服务器组或主备服务器组来批量添加和管理。
默认后端服务器是在实例维度上维护的,即负载均衡实例下的所有监听都只能够将请求转发到相同ECS实例的相同端口上。虚拟服务器组功能实现了监听维度的转发。您可以针对不同的监听创建不同的虚拟服务器组,即负载均衡实例中的不同监听可以将请求转发到不同端口的后端服务器上。
此外,七层负载均衡服务支持域名、URL转发策略,可以将来自不同域名或者URL的请求转发给不同的后端服务器处理。
基础架构及入网流量图,数据包走向
转发策略
支持 TCP/UDP(4 层) 和 HTTP/HTTPS(7 层) 这 4 种协议
基础架构
负载均衡采用集群部署,可实现会话同步,以消除服务器单点,提升冗余,保证服务稳定。阿里云当前提供4层(TCP协议和UDP协议)和7层(HTTP和HTTPS协议)的负载均衡服务。
4 层采用开源软件 LVS(Linux Virtual Server)+ keep alived 的方式实现负载均衡,并根据云计算需求对其进行了定制化。
7 层采用 Tengine 实现负载均衡。Tengine 是由淘宝网发起的 Web 服务器项目,它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。
如下图所示,各个地域的四层负载均衡实际上是由多台 LVS 机器部署成一个 LVS 集群来运行的,采用集群部署模式极大的保证了异常情况下负载均衡服务的可用性、稳定性与可扩展性。
入网流量路径
对于入网流量,负载均衡会根据用户在控制台或API上配置的转发策略,对来自前端的访问请求进行转发和处理。数据流转如下图所示。
云服务器(Elastic Compute Service,简称 ECS)是一种简单高效、处理能力可弹性伸缩的计算服务
客户端访问负载均衡实例IP地址时,相关请求由负载均衡实例对应的LVS集群处理。
LVS集群内的每一台节点服务器均分来自前端的请求。
如果相应的负载均衡实例服务端口使用的是四层协议(TCP或UDP),那么LVS集群内每个节点都会根据负载均衡实例负载均衡策略,将其承载的服务请求按策略直接分发到后端ECS服务器,并同时维护会话保持等特性。
如果相应的负载均衡实例服务端口使用的是七层HTTP协议,那么LVS集群内每个节点会先将其承载的服务请求均分到Tengine集群;而后,Tengine集群内的每个节点再根据负载均衡策略,将服务请求按策略最终分发到后端ECS服务器,并同时维护会话保持等特性。
如果相应的负载均衡实例服务端口使用的是七层HTTPS协议,与上述HTTP处理过程类似,差别是在按策略将服务请求最终分发到后端ECS服务器前,会先调用Key Server进行证书验证及数据包解密等前置操作。
负载均衡实例服务端口:多个端口,不同端口使用不同协议?按数据包协议类型分发?
出网流量路径
负载均衡和后端ECS之间是通过内网进行通信的,所以,正常情况下,负载均衡后端ECS无需配置外网带宽。如果用户业务有同时通过后端ECS对外提供服务,或后端ECS有访问外网的需求, 那么,在后端ECS购买了公网带宽后,后端ECS的出网流量路径有所不同。
技术原理
整个负载均衡系统由三部分构成:四层负载均衡、七层负载均衡和控制系统。
四层负载均衡
采用开源软件LVS(Linux Virtual Server)构建,并根据云计算需求对其进行了定制和优化。
七层负载均衡
采用开源软件Tengine构建。
控制系统
用于配置和监控负载均衡系统。
四层负载均衡 VS 七层负载均衡:https://yq.aliyun.com/articles/24248
选择转发策略
权重代表相应服务器所承载的业务的相对占比,而非绝对值。当前 SLB 支持 3 种转发策略,其使用场景及要点如下:
转发策略 算法说明 使用要点
示例:假设有 100 个新增连接,则在不同的调度算法下,不同服务器的分配连接数示意如下:
误区: SLB 的 VIP 能 ping 通就说明配置是正常的
用户通过 ping SLB 的 VIP 地址来判断 SLB 服务的有效性。
其实,这种测试非常不可靠。因为 ping 响应是由 SLB 服务端直接完成的,与后端 ECS 无关。所以,正常情况下:
只要配置了任意监听,即便相应监听处于异常状态,SLB VIP ping 也是正常的。
相反,如果 SLB 没有配置任何监听,其 VIP 是 ping 不通的。
建议:对于 4 层服务, ;对于 7 层服务,通过实际的业务访问进行可用性测试。
技术限制:https://yq.aliyun.com/articles/80055?spm=5176.100240.searchblog.26.3bIToO
SLB 在技术层面还在逐步增强和完善,截止本文发稿,还存在如下技术限制:
在 4 层(TCP 协议)服务中,不支持添加进后端云服务器池的 ECS 既作为 Real Server,又作为客户端向所在的 SLB 实例发送请求。因为,返回的数据包只在云服务器内部转发,不经过负载均衡,所以通过配置在 SLB 后端的 ECS 去访问其 VIP 是不通的。
仅支持 TCP/UDP(4 层) 和 HTTP/HTTPS(7 层) 这 4 种协议。
后端服务器仅支持 ECS,不支持第三方云服务器。
仅支持轮询(RR)、加权轮询(WRR)和最小加权连接数(WLC)这 3 中调度算法。
不支持 7 层 SSL Session 超时时间的调整。当前全局统一为 300s。
不支持 7 层 HTTP Keep-alive 超时时间的调整。当前配置为 15s。
说明:如果客户端访问 SLB HTTP 监听时使用长连接, 那么这条连接最长的空闲时间为 15 秒, 即如果超过 15 秒没有发送任何 HTTP 请求, 这条连接将会被 SLB 主动断开。如果您的业务可能会出现超过 15 秒的空闲, 需要从业务层面检测连接的断开并重新发起连接。
不支持转发超时时间的调整:
当前配置: TCP 900s,UDP 300s,HTTP 60s,HTTPS 60s
上述配置是指 SLB 服务端从后端接收数据并进行转发的超时时间,并非健康检查超时时间间隔。如果超时,通常会向客户端返回 504 错误码。
金融云 SLB 基于安全性考虑,仅允许开放特定的端口:80,443,2800-3300,6000-10000,13000-14000
负载均衡通过健康检查来判断后端ECS的业务可用性。开启健康检查功能后,当后端某台ECS健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的ECS上;而当该ECS恢复正常运行时,负载均衡会将其自动恢复到对外或对内的服务中。
负载均衡健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。
如果您对业务对负载有高敏感性,高频率的健康检查探测可能会对正常业务访问造成影响。您可以结合业务情况,通过降低健康检查频率、增大健康检查间隔、七层检查修改为四层检查等方式,来降低对业务的影响。但为了保障业务的持续可用,不建议关闭健康检查。