vlambda博客
学习文章列表

大规模数据中心负载均衡怎么做

    负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽,增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

    数据中心,包括公有云基础设施,其流量分为南北流量和东西流量,南北流量又称之为边缘流量,是流量从外部导入数据中心内部的路径,东西流量是在数据中心内集群间的调用流量。这其中南北流量很明显就需要负载均衡,作为流量入口,其流量比较集中,因此流量毫无疑问是很大的。耳熟能详的有DNS负载均衡,硬件LB设备,还有软负载如LVS,HAproxy,一般传统的都是通过主备的方式,采用VIP来做高可用,但是在公有云基础设施场景下,这些方案就有点捉襟见肘了,其内部的东西流量可以通过集群规模的横向扩展来消化掉,但是对于南北流量的入口,如何也构建一种近乎无限扩展的负载均衡来消化?

    首先看一下数量流量的流动链路:

数据中心网络架构有很多种,其中三层是最常见的,交换机分为核心、汇聚、接入层,注意,这些虽然称之为交换机,但是一般都是三层或三层以上交换机,带有路由功能,支持多种路由协议:

大规模数据中心负载均衡怎么做

其中在每层交换机都有高可用措施,比如IRF组网架构:

大规模数据中心负载均衡怎么做

通过IRF架构(Intelligent Resilient Framework)智能弹性架构技术,将多台交换机虚拟成一台逻辑设备,并将其当做单一设备进行管理和使用。这种"联合设备"被称为Fabric,组成Fabric的每台设备为一个Unit。IRF技术特性包含多种特性,分别是:

  • 分布式弹性路由(Distributed Resilient Routing, DRR):Fabric的多个Unit在外界看来是一台单独的三层交换机。整个Fabric作为一台设备进行路由功能和报文转发功能,具有统一的VLAN接口、路由表和三层转发表。在某一个Unit发生故障时,路由协议和数据转发不受影响,从而减少业务中断。

  • 分布式链路聚合(Distributed Link Aggregation, DLA):用户可以将Fabric中不同Unit的多个端口进行聚合,实现对Fabric内统一的聚合管理。这不仅可以使聚合的设置更加方便,而且跨越设备的链路聚合也有效地避免了单点故障的发生。

    在这种架构下,通过环路检测协议来保证整个交换转发的链路是无欢的,而且在接入层,服务器一般有多快网卡,分别接到不同的交换机上,如果一台交换机故障,也不会影响整体的可用性,这样实现整个链路转发的高可用。

    那么问题来了,负载均衡如何做,如何实现近乎无限的扩展性?核心层交换机的吞吐量一般非常高,应付入口流量一般没什么问题,这就提到ECMP协议:

    ECMP是一种等价路由协议,在IP数据包寻址转发过程中,如果从A到B有多条转发路径,那么通常路由器会选择代价较小的那一条,除非这条链路出现拥塞才会选择其他的路径,而ECMP协议就可以同时使用所有链路,基于流的负载均衡去转发,如:

    以微软的azure的SLB为例,其架构图如下:

在azure中的SLB,具有以下能力:

  • 能对南北流量和东西流量进行4层负载均衡转发

  • 能对因特网流量进行负载均衡转发

  • 健康检查

  • 方法横向扩展,支撑近乎无限的扩展能力

其原理是怎么样的呢?

  •  首先,什么是VIP?我们访问某个公网的域名,该域名会被公网DNS智能的根据地域能多种因素解析到某个IP上,其中该IP是负载均衡节点的VIP,互联网用户设备通过该VIP建立连接。这些VIP被定义在一组名为SLB Multiplexer (MUX)集群的节点上,这个MUX是集群化部署,由物理机、虚拟机甚至是容器组成。

  • 另外,什么是DIP?VIP对应的负载均衡设备,后面有多个服务器用来处理流量,这些服务器集群一般是7层网关,如通过nginx、HAProxy、tengine等组成的大规模集群,这些节点的IP称之为DIP。

   下面说一下VIP,VIP被配置在机器中的每个实例上。这些实例使用BGP协议同边缘路由器(三层交换机)交换路由信息,作用如下:

  • 路由器会捕获VIP在每个MUX上,即使这些MUX跨域了多个三层网络。

  • 基于ECMP协议等价的将流量路由到MUX的每个节点上。实现负载均衡

  • 自动健康检查,检测到有哪些MUX挂掉,自动剔除。


因此,当外部公网的流量过来之后,会由MUX机器中的节点来去承载流量,该节点会根据路由及负载均衡算法从背后的DIP中选一台进行负载均衡转发,这个过程分两步:

  • 负载均衡,将数据包封装,选择一台DIP转发,这个DIP可能是一台物理机,也可能是虚拟机,也可能是容器,取决于部署方式。

  • NAT转换,转发前,将数据包的目的IP改写为DIP,做端口映射和连接状态管理,转发给DIP节点。


    其中负载均衡这里,常用的就是LVS,LVS就几种转发方式,这里一般使用NAT或者fullNAT,流量的进出都经过LVS节点。

    国内的阿里云使用的就是类似的方式,其负载均衡这一层使用的是基于LVS的集群,使用ECMP协议进行转发,这一层为保证吞吐量,服务器都是万兆以上网卡(10GB以上),通过几千台机器的集群,支撑了海量的吞吐量。LVS的负载均衡方式使用的是其自己扩展的FullNAT协议,属于NAT模式的增强版,LVS集群后是7层网关接入集群,使用的是tengine,属于ngix的一个分支版本,做了一些定制化开发。