负载均衡(SLB)可以为多个主机或其他服务实例提供基于网络数据包或代理方法的流量分配。 Server Load Balancer是一项流量分配控制服务,可根据转发策略将访问流量分配到多个后端云服务器(ECS实例)。 负载均衡可扩展应用程序服务功能并增强应用程序可用性。
负载均衡通常用于在高度并发的服务环境中构建由多个服务节点组成的“服务集群”。 “服务集群”可以扩展服务的处理能力和容错能力,并且可以自动消除单个服务节点故障对整体服务的影响,并提高服务的可用性。
SLB针对七层协议支持HTTP、HTTPS协议(类Nginx或HAproxy);四层协议支持TCP协议及UDP协议(类LVS)。
概述
通过设置虚拟服务地址,负载均衡可以将同一区域内的多个ECS实例虚拟化为一个高性能,高可用性的后端服务池,并根据转发规则将客户端的请求分配给后端服务器池的 ECS实例。
缺省情况下,负载均衡能够检查云服务器池中ECS实例的健康状态,并自动隔离异常状态的ECS实例,消除单个ECS实例的单点故障,提高应用程序的整体服务能力。 此外,负载平衡还具有抵抗DDoS攻击的能力,从而增强了对应用程序服务的保护。
组成部分
负载均衡由以下三个部分组成:
- 负载均衡实例 (Server Load Balancer instances)
负载均衡实例是一种正在运行的负载平衡服务,用于接收流量并将其分发到后端服务器。 要使用负载均衡服务,您必须创建一个负载均衡实例,并添加至少一个侦听器和两个ECS实例。 - 监听 (Listeners)
监听用于检查客户端请求,并将请求转发到后端服务器。 监听还将检查后端服务器的运行状况。 - 后端服务器(Backend Servers)
一组接收前端请求的ECS实例。 您可以将ECS实例分别添加到后端服务器池,也可以通过虚拟服务器组或活动和备用服务器组,批量添加和管理它们。
技术架构
SLB提供流量分发的能力,保证业务可扩展和高可用。支持内网和外网两种场景,支持请求代理和报文转发两种转发模式。下文将分别介绍SLB的的请求代理(下简称SLB7)和报文转发模式(下简称SLB4)的基本架构。
内网SLB4
内网SLB4是基于DPDK技术自研的。单台服务器可以提供超过3000万并发连接,1000万 pps,10G线速转发能力。采用集群部署,单个集群至少4台服务器。利用ECMP+ BGP实现高可用。
内网SLB4采用了类似于DR的转发模式。内网负载均衡转发示意图如下:
如上图,同一个集群的SLB4通过向其上联的接入交换机宣告相同的VIP,而接入交换机配置了ECMP算法,因此可将流量负载均衡到多台服务器上,从而够成了集群。当某些SLB4发生转发异常的时候,BGP报文转发也会停止转发,在三秒之内该SLB4服务器就会被剔出集群,从而保证高可用,同时集群健康检查模块也将发出告警,使得工程师介入处理。此外同一个SLB4集群的服务器都是跨可用区分布的,从而保证集群跨可用区高可用。
此外,SLB4中还有个模块负载后端节点的健康检查(目前仅支持TCP/UDP端口探测),并上报给slb4manager和SLB4转发服务器。SLB4转发服务器收到Client的业务报文后,将从状态正常的后端节点中选择一个,修改目的mac后打隧道送到后端节点,注意其中的源IP和目的IP都是不变的。此时,后端节点必须在LO口绑定SLB4的虚拟IP地址,并监听服务,才能正确处理报文,并将回包直接单播送回给Client。这是一个典型的DR过程。因此内网SLB4可以直接看到Client的源IP。
外网SLB4
外网SLB4与内网SLB4类似,同样是基于DPDK技术自研的。单台服务器可以提供超过3000万并发连接,1000万 pps,10G线速转发能力。采用集群部署,单个集群至少4台服务器。利用ECMP+ BGP实现高可用。同样的,它采用了类似于DR的转发模式。外网负载均衡转发示意图如下:
与内网SLB4不同的是,外网流量是从公网进来的。Client访问SLB4的流量进入POP点,进入VER(Virtual Edge Router)。VER是自研的公网流量计算中心,它能够从业务库中获知所有的EIP的下一跳信息,通过BGP引流后,将EIP的流量打隧道送到相应的下一跳。一个SLB4的EIP会落到SLB4集群中的所有服务器上,因此VER将这部分流量,按照一致性哈希算法负载均衡送到集群各个服务器中。后续的流程与内网SLB4类似。Backend节点中需要将SLB的EIP绑定在LO,并监听服务,而回程报文将直接送到VER,并通过internet返回Client。
在外网SLB4中,集群健康检查模块将定时探测服务器的存活状态,如果发现服务器有问题,则将通知VER,将异常服务器剔除,从而保证高可用。同样的,外网SLB4集群也是跨可用区高可用的。
内网SLB7
SLB7基于Haproxy开发,单个实例可以支持超过40w pps,2Gbps,以及至少40万并发连接。架构如下图:
内网SLB7采用集群部署,单个集群至少4台服务器。租户底层共用服务器,但是采用Docker进行资源隔离和CPU的隔离。与SLB4采用的DR模式不同,SLB7采用的是Proxy模式,也就是Fullnat模式,收到Client的请求之后,内网SLB7将client到SLB7 IP的连接,转化为SLB7的proxy ip到Backend实际ip的连接。因此Backend无法直接看到Client ip,只能通过X-Forwarded-For(HTTP模式)获取。
内网SLB7同样利用ECMP+ BGP实现高可用。内网SLB7服务器通过Quagga与上联交换机建立BGP连接。同集群下的多台SLB7服务器,将向上联交换机发起相同的VIP宣告。这样上联交换机会根据ECMP算法,将流量负载均衡到集群中的各台服务器。当服务器发生异常时,三秒内BGP会中断,从而将服务器踢出集群,保证业务仍然可以正常工作。
外网SLB7
SLB7基于Haproxy开发,单个实例可以支持超过40w pps,2Gbps,以及至少40万并发连接。SLB利用CPU的亲和性,实现核的隔离和资源控制。
与SLB4采用的DR模式不同,SLB7采用的是Proxy模式,也就是Fullnat模式。收到Client的请求之后,SLB7将client到ULB7 EIP的连接,转化为SLB7的proxy ip到Backend实际ip的连接。因此Backend无法直接看到Client ip。另外,健康检查模块是集成在SLB7进程中的,因此不需要额外的节点健康检查模块。
同样的,在外网SLB7中,集群健康检查模块将定时探测服务器的存活状态,如果发现服务器有问题,则将通知UVER,将异常服务器剔除,从而保证高可用。同样的,外网SLB7集群也是跨可用区高可用的。
模式比对
相对于SLB7,SLB4转发能力更强,适合与追求转发性能的场景。而SLB7则可以对七层数据进行处理,可以进行SSL的卸载,执行域名转发、路径转发等功能,并且后端节点不需要额外配置VIP。
产品优势
- 高可用采用全冗余设计,无单点,支持同城容灾。搭配DNS可实现跨地域容灾,可用性高达99.95%。根据应用负载进行弹性扩容,在流量波动情况下不中断对外服务。
- 可扩展您可以根据业务的需要,随时增加或减少后端服务器的数量,扩展应用的服务能力。
- 低成本与传统硬件负载均衡系统高投入相比,成本可下降60%。
- 安全结合云盾,可提供5Gbps的防DDoS攻击能力。
- 高并发集群支持亿级并发连接,单实例提供千万级并发能力。