产品家族

在2022-09,随着ALB和NLB的加入,原来的SLB现在称为CLB。
而"负载均衡SLB"为负载均衡家族的总称:

  • ALB:专门面向七层,单实例每秒查询数QPS高达==100万次==。是阿里云官方的云原生Ingress网关
  • NLB:四层负载均衡,面向物联网场景,单实例支持==1个亿并发连接==,支持海量终端连接,高并发消息,在物联网MQTT场景非常适合
  • CLB:四层负载均衡,和基础的七层负载均衡

CLB

  • CLB通过设置虚拟服务地址,将添加的同一地域的多台云服务服务池,并根据转发规则,将来自客户端的请求分发给后端服务器虚拟成一个高性能和高可用的后端器池中的云服务器。
  • CLB默认检查云服务器池中的云服务器的健康状态,自动隔离异常状态的云服务器,消除了单台云服务器的单点故障,提高了应用的整体服务能力。
  • CLB还具备抗DDoS攻击的能力,增强了应用服务的防护能力。

CLB由以下三个部分组成:

  1. 实例
    • 一个CLB实例就是一个运行中的负载均衡服务。至少添加一个监听和两台Aliyun/计算/ECS
  2. 监听
    • 监听用来检查客户端请求并将请求转发给后端服务器。监听也会对后端服务器进行健康检查
  3. 后端服务器
    • 接收前端请求,支持ECS、弹性容器实例ECI、弹性网卡ENI

底层架构

  • 四层CLB底层基于开源==LVS + keepalived==搭建集群实现的。
  • 七层CLB底层是用==Tengine==实现,Tengine是淘宝网发起的Web服务器项目,基于Nginx二次开发

出入流量规则

入流量:四层TCP/UDP流量,直接走LVS集群,转发给后端ECS;七层HTTP流量从LVS集群走到Tengine集群,再转发给后端。(第一次请求,走key server处理加密)

出流量:
CLB和后端ECS之间是通过内网进行通信的。
- 如果ECS仅仅处理来自CLB的请求,可以不购买公网带宽(ECS、公网IP、弹性公网IP、NAT网关等)。
- 如果需要直接通过后端ECS对外提供服务,或后端ECS有访问外网的需求,需要购买ECS、公网IP、弹性公网IP、NAT网关等服务。

总体原则:流量从哪里进来,就从哪里出去。

  • 通过CLB进入的流量在CLB上限速或计费,仅收取出方向流量费用,入方向流量不收取,CLB到ECS之间是阿里云内网通信,不收取流量费用。
  • 来自弹性公网IP或NAT网关的流量,分别在弹性公网IP或NAT网关上进行限速或计费。如果在购买ECS时选择了公网带宽,限速/计费点在ECS上。
  • CLB仅提供==被动访问公网的能力==,即后端ECS只能在收到通过CLB转发来的公网的请求时,才能访问公网回应该请求。如后端ECS希望主动发起公网访问,则需要配置或购买ECS公网带宽、弹性公网IP或NAT网关来实现。

意思是虽然CLB有公网访问能力,但是仅支持有请求进来,需要后端ECS响应的时候,ECS才能被动访问公网。比如ECS想跑个 `yum install`,是不能走CLB出公网的。

  • ECS公网带宽(购买ECS时配置)、弹性公网IP、NAT网关均可以实现ECS的双向公网访问(访问或被访问),但没有流量分发和负载均衡的能力。

HA

两层高可用:
- CLB部署的实例会默认==两个可用区==,一主一备。
- 后端ECS的多可用区HA是另一层面,后端的HA,自己配置。
- 前端CLB和后端ECS都实现了高可用,那么不论是CLB故障还是ECS故障,都可以实现故障切换
- CLB跨可用区访问ECS可能会增加时延,但是可以忽略不计

跨地域容灾

如果ECS是部署在两个Region里面,每个Region配了一个CLB作为流量入口,希望用户访问可以被分配到两个Region。那么需要==智能DNS(GTM)==。当某一个Region的ECS故障,就会暂停改地域接收流量,切换到配置的兜底Region。

计费

  1. 包年包月
  2. 按量计费
    • 按使用量计费:适合流量波动大的场景
    • 按规格计费:可以选择不同规格的实例,规格越大,支持的最大连接数、每秒查询数等越高。适合流量稳定的场景。

公网内网

  • 部署的时候可以选择公网或者内网型。
  • 如果公网内网都想要,就部署内网型CLB,再给他绑定一个公网IP

监听

  • 监听是前端配置,表示LB监听什么协议的什么端口(比如监听http 80端口)。
  • LB监听连接请求,根据负载均衡策略,转发到后端服务器端口(后端端口在服务器组里面设置)。
  • 一个CLB实例最多支持添加==50个监听==,每个监听对应后端ECS实例上的一个应用。负载均衡的监听端口对应后端ECS实例上的应用服务端口。

HTTPS监听

需要向负载均衡上传SSL证书。
- 目前阿里云负载均衡支持的公钥算法:RSA 1024、RSA 2048、RSA 4096、ECDSA P-256、ECDSA P-384和ECDSA P-521。
- 上传的证书格式必须是==PEM==。
- 证书上传到负载均衡后,负载均衡即可管理证书,不需要在后端ECS上绑定证书。
- 因为证书的上传、加载和验证都需要一些时间,所以使用HTTPS协议的实例生效也需要一些时间。一般一分钟后就会生效,最长不会超过三分钟

服务器组

可以选择虚拟服务器组、默认服务器组、主备服务器组:

  • 虚拟服务器组:可以给每台机器选择不同的后端监听端口
  • 默认服务器组:是给所有的后端机器配置同样的后端监听端口。使用LB之前必须指定一台默认服务器接收负载均衡转发的客户端请求
  • 主备服务器组:只包含两台ECS实例,一台主,一台备。必须开启健康检查,主检查,备不检查。主挂了,自动切换到备。只能使用四层监听

同时配置了虚拟服务器组和默认服务器组,监听会将请求转发到虚拟服务器组,而不是默认服务器组


健康检查

LB定期向后端服务器发送心跳包或者检查脚本,查看返回码来确定后端服务器是否存活。
配置:HTTP请求后端什么路径(接口),返回2xx/3xx,认为是健康的。
需要注意配置的后端路径(接口)必须是存在,正常返回2xx或3xx的。

某台ECS健康检查失败就会停止向该ECS发送请求。

如果您的业务对负载敏感性高,高频率的健康检查探测可能会对正常业务访问造成影响。您可以结合业务情况,通过降低健康检查频率、增大健康检查间隔、七层检查修改为四层检查等方式,来降低对业务的影响。但为了保障业务的持续可用,==不建议关闭健康检查==。

原理

负载均衡健康检查使用的地址段是 100.64.0.0/10,后端服务器务必不能屏蔽该地址段。
您无需在ECS安全组中额外针对该地址段配置放行策略,但如有配置iptables等安全策略,请务必放行(100.64.0.0/10 是阿里云保留地址,其他用户无法分配到该网段内,不会存在安全风险)。

HTTP检查

针对七层(HTTP或HTTPS协议)健康检查,健康检查通过==HTTP HEAD探测==来获取状态信息(用HEAD不用GET是因为要减少包的大小)。向后端ECS IP+端口发送HEAD请求来获取状态信息。

当使用HTTP健康检查时,可以设置健康检查域名,是可选项。
- 因为有些应用服务器会对请求中的host字段做校验,即要求请求头中必须存在host字段。
- 如果在健康检查中配置了域名,LB会将域名配置到host字段中去。
- 反之,如果没有配置域名,LB不在请求中附带host字段,那么健康检查会被后端服务器拒绝导致失败。
- 综上,如果后端服务器对host字段有检查要求,需要配置域名。

TCP检查

针对四层健康检查,如TCP,向后端ECS IP+端口发送==TCP SYN包==。后端服务器如果健康接收请求,则返回SYN+ACK包。

TCP健康检查的异常行为

正常的TCP三次握手,LVS节点服务器在收到后端ECS返回的SYN+ACK数据包后,会进一步发送ACK数据包,随后立即发送==RST数据包中断TCP连接==。

该实现机制可能会导致后端ECS认为相关TCP连接出现异常(非正常退出),并在业务软件如Java连接池等日志抛出相应的错误信息,如 Connection reset by peer

解决方案:
- TCP监听采用HTTP方式进行健康检查。
- 在后端ECS配置了获取客户端真实IP后,忽略来自前述负载均衡服务地址段相关访问导致的连接错误。

UDP检查

向后端ECS的内网IP+【健康检查端口】发送UDP报文:
- 如果后端ECS相应端口未正常监听,则系统会返回类似 port XX unreachable 的ICMP报错信息
- 反之不做任何处理。

UDP健康检查不一致问题

当前UDP协议服务健康检查可能存在服务真实状态与健康检查不一致的情况:如果后端是linux服务器,在大并发场景下,由于Linux的防ICMP攻击保护机制,会限制服务器发送ICMP的速度。此时,即使服务已经出现异常,由于无法向前端LB返回 port XX unreachable 报错信息,会导致负载均衡没有收到ICMP应答,认为探测成功。从而导致不一致。

解决方案: 负载均衡通过发送您指定的字符串到后端服务器,必须得到指定应答后才认为检查成功。但该实现机制需要客户端程序配合应答。

七层健康检查是检查状态码;四层健康检查是检查端口是否超时


ALB

ALB支持HTTP、HTTPS和QUIC协议,具备超大规模的流量处理能力。在实时音视频、互动直播和游戏等移动互联网应用中,访问速度更快,传输链路更安全可靠。
ALB支持gRPC框架,可实现海量微服务间的高效API通信。

性能指标

  • ALB的IP模式分为==动态IP==和==固定IP==。动态IP和固定IP的ALB实例的实例性能存在差异。
  • 固定IP模式下,您可以使用CNAME或A记录解析对外提供访问,双可用区ALB实例可提供==10万QPS==的性能。
  • 动态IP模式下,如需达到==100万QPS==,请您使用CNAME域名解析的方式。
  • ALB支持多可用区部署,若当前地域支持2个及2个以上可用区,为保障业务高可用,请至少选择2个可用区,且ALB不会额外收取额外可用区的费用。

功能版本

基础版、标准版、WAF增强版

配置组成

  • 实例
  • 监听
  • 转发规则
  • 服务器组
  • 健康检查