阿里云负载均衡SLB
SLB
简单来讲就是SLB系统也是一个由多台计算机构成的集群。用户在这个系统中申请和配置了一个SLB的实例对外提供服务,针对该SLB实例的访问请求会通过我们的系统按照用户设定的规则向后端的多台ECS进行转发。那么当我们系统内的某一台计算机出现问题的时候,其他的计算机可以承担本应由其处理的任务而保证整个集群和服务的可用性。如果你为自己的SLB实例正确的开启了健康检查功能,那么当你SLB实例后端的某一台ECS出现问题的时候,其他的ECS也会承担其工作来保证你对外服务的可用性。
负载均衡(SLB)使用最佳实践 https://yq.aliyun.com/articles/80055?spm=5176.100240.searchblog.26.3bIToO
负载均衡(阿里云帮助与文档):https://help.aliyun.com/product/27537.html?spm=5176.doc27544.3.1.BZgTjy
基础架构:https://help.aliyun.com/document_detail/27544.html?spm=5176.7739444.6.540.BHXBo1
技术原理:https://help.aliyun.com/knowledge_detail/39444.html?spm=5176.100239.blogcont80055.19.2Yh1bP健康检查原理:https://help.aliyun.com/knowledge_detail/39455.html?spm=5176.100239.blogcont80055.20.2Yh1bP
网络流量说明:https://help.aliyun.com/knowledge_detail/39440.html?spm=5176.100239.blogcont80055.21.2Yh1bP
高可用概要说明:https://help.aliyun.com/knowledge_detail/39449.html?spm=5176.100239.blogcont80055.22.2Yh1bP
关键点:
基础架构及入网流量图,数据包走向
转发策略
支持 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 种转发策略,其使用场景及要点如下:
转发策略 | 算法说明 | 使用要点 |
---|---|---|
加权轮询(WRR) | 按比重轮流分配新增连接。 | ●根据后端 ECS 规格的不同,配置相应的权重。 ●如果是长连接业务,可能会导致老服务器的连接数持续增加, 而新加入服务器的连接数相对非常低,造成负载不均的假象。 |
加权最小连接数(WLC) | ●在 SLB 服务端,实时统计与后端 ECS 已建立的 ESTABLISHED 状态连接数,来评估相应服务器的负载情况。 ●按权重比例,将新增连接分配给活动连接数少的服务器,最终尽可能使服务器的已建立连接数与其权重成正例。 |
当前暂未实现新增服务器的过载保护或缓冲机制。所以,如果业务并发非常高,可能会导致新增服务器连接数陡增,对业务造成影响。建议新增服务器时,逐步调高权重。 |
轮询(RR) | 按顺序逐一分发新增连接。 | 必须手工确保后端 ECS 的业务承载能力一致。 |
示例:假设有 100 个新增连接,则在不同的调度算法下,不同服务器的分配连接数示意如下:
服务器 | 权重 | 占比 | 加权轮询 | 加权最小连接数 | 轮询 |
---|---|---|---|---|---|
A | 50 | 50/ (100+50+50) =25% |
将 100*25%=25 个连接分发给服务器 A | 实时统计连接数,逐一将新增连接分配给活动连接数最少的服务器。最终使其新增连接数占比大致为 25% | 不考虑权重,按顺序分发新增连接到服务器 A/B/C |
B | 100 | 100/ (100+50+50) =50% |
将 100*50%=50 个连接分发给服务器 B | ↑ 同上,最终使其新增连接数占比大致为 50% | ↑ 同上 |
C | 50 | 50/ (100+50+50)= 25% |
将 100*25%=25 个连接分发给服务器 C | ↑ 同上,最终使其新增连接数占比大致为 25% | ↑ 同上 |
D | 0 | 0/ (100+50+50) =0% |
服务器下线,不分配任何连接 | ← 同左 | ← 同左 |
误区: 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
健康检查:https://help.aliyun.com/knowledge_detail/39455.html?spm=5176.100239.blogcont80055.20.2Yh1bP
负载均衡通过健康检查来判断后端ECS的业务可用性。开启健康检查功能后,当后端某台ECS健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的ECS上;而当该ECS恢复正常运行时,负载均衡会将其自动恢复到对外或对内的服务中。
负载均衡健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。
如果您对业务对负载有高敏感性,高频率的健康检查探测可能会对正常业务访问造成影响。您可以结合业务情况,通过降低健康检查频率、增大健康检查间隔、七层检查修改为四层检查等方式,来降低对业务的影响。但为了保障业务的持续可用,不建议关闭健康检查。
转载请注明:SuperIT » 阿里云负载均衡SLB