腾讯云公网负载均衡技术实现详解 (2)

7层LB也成为“内容交换”,主要通过报文中真正有意义的应用层内容(证书,cookies,http头部信息),会在负载均衡设备上进行证书校验,三次握手等操作,再加上负载均衡设备设置的服务器选择方式,决定最终的内服务器。负载能力实现主要基于应数据包应用层信息(domain+port+url等)进行负载转发。

CLB业务架构

首先看下图,简单可以看到公网LB的实现主要是由TGW(tencent gateway)实现。TGW集群承载腾讯流量入口,有着强大的负载均衡能力,当然也有其他重要能力(例如:ip漂移,容灾等)。

0?wx_fmt=jpeg

CLB业务场景

传统场景

大多数用户使用传统的LB主要具有三种使用场景:流量分发;横向扩展;业务分离。腾讯云目前提供两种类型的LB:经典型和应用型。

腾讯云目前提供的经典型LB(公网有日租)基本可以满足大部分用户的使用场景,但是有一定的局限性。 主要局限性表现如下:

每个LB分配一个VIP

分配一个域名(带有腾讯云后缀的域名)

LB下可以创建多个监听器(vport-->pport映射)

子机绑定在LB维度

这样就存在多个问题:域名含有腾讯云后缀,用户不可自定义;每个LB-vip对应一个域名,对vip造成大量浪费;7层访问只能细化到域名维度,不能在url维度进行细化。这样就应运而生了应用型LB。

0?wx_fmt=jpeg

高级场景

针对比较高端的用户使用场景比较复杂,腾讯云推出应用型LB可以在单个LB上实现业务分离,真正基于应用层内容进行负载均衡。如下图所示。这种类型的LB就完全弥补了传统LB的缺陷。主要优点整理如下:

每个LB分配一个VIP

不会分配固有域名,LB下可以创建多个监听器

每个监听器下可以创建多个域名

每个域名下可以创建多个规则

子机绑定在规则维度,并且可以绑定一台子机上的多个端口

这样做的好处比较多:真正发挥http七层转发的优势,CLB开始了解业务;有利于IP收敛,整个网站对外可以只使用一个公网IP;节省二级域名,减少DNS解析次数,有效提高用户访问速度;自定义转发规则,会话保持和健康检查的颗粒度可以细致到转发组级别。

0?wx_fmt=jpeg

CLB实现

隧道技术区分

公网LB流程中TGW(STGW)中ld集群上需要区分vpc网络和物理网络。vpc网络采用gre隧道封装技术实现TGW和虚拟机之间进行通讯,物理网络采用IP隧道封装技术实现TGW和虚拟机之间进行通讯。7层和4层负载均衡实现分别是在不同的ld集群上进行,当然实现技术也是不一致的。如果不清楚gre和ip隧道区别,请看下图。

0?wx_fmt=jpeg

0?wx_fmt=jpeg

根据小编本人理解,gre技术主要应用场景在于该数据包的目的地址不是gre里面封装的ip信息,但是数据包到达目的端之后需要gre的封装信息进行进一步操作(qcloud目前当数据包到达母机之后,母机根据gre信息决定下一步路由);IP隧道主要应用场景在于该数据包的目的地址就是即将要封装的ip信息,可以理解为将新的ip把原来的数据包进行再一次封装,这样数据包才能根据封装的目的ip进行路由。

4层LB

VPC网络

先对4层VPC网络负载均衡整体的架构做简单介绍。用户在qcloud控制台或者调用api操作之后,操作流最终会下发到TGW提供的oss组件模块,该oss模块主要负责提供接口(比分配vip,创建监听器,创建域名和规则等)供qcloud调用,ld上存在组件将接口请求中的相关规则下发到集群内每个ld设备内核中,ld上负载均衡转发功能主要由相关内核模块实现。

数据包入方向

当用户访问vip的时候,首先数据流会到ld中,ld根据下发规则找到vm对应的hostip,然后对数据包进行dnat和sant,将目的ip和源ip分别改为hostip和tsvip。

ld上存在gre设备对数据包进行gre封装,将(vpcid,vmip)带入数据包,这样数据包就会将带有gre头的数据包发送给子机所在的母机。

vpc母机上存在gre设备对数据包进行解封装,根据vpcid和vmip即可将请求发送给相应虚拟网桥下的对应子机。

数据包出方向

首先在经过虚拟网桥之后gre设备需要对数据包进行gre封装,此时的目的ip为tsvip,源ip为hostip

数据包向tsvip发送回到ld上,在ld上进行去掉gre部分,进行dnat和snat,将源ip和目的ip转换为vip和客户端ip。

则数据包可以正常返回给客户端。这样既可完成一次负载均衡数据交互。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwgfj.html