深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现

一、LVS集群常见架构图

 

 

 

Load Balancer层:位 于整个集群系统的最前端,由一台或多台负载调度器(Director Server)组成。LVS核心模板IPVS就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有为完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)。

 

同时,在Director Server上还要安装对Real Server的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时可以把它从LVS路由表中剔除,在恢复时重新加入。

 

Server Array层:由 一组实际运行应用服务的机器组成,Real Server可以是Web服务器、Mail服务器、FTP服务器、DNS服务器、视频服务器中的一个或多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

 

hared Storage层:是 为所有Real Server提供共享存储空间和内容一致性的存储区域,一般由磁盘阵列设备组成。,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是 NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,Oracle提供的OCFS2文件系统等。

 

从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只有Linux和FreeBSD,Linux 2.6内核完全内置了LVS 的各个模块,不用任何设置就可以支持LVS功能。

 

对于Real Server,几乎所有的系统平台,Linux、Windows、Solaris、AIX、BSD系列都能很好地支持。

 

 

二、负载调度算法

 

 

负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。


LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务器。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。

 

在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。IPVS实现负载均衡的方式有三种,分别是NAT(FULL NAT)、TUN和DR,下面进行详细介绍。

 

 

三、DR模式

 

 

下面是DR模式数据传输图:

 


DR模式: 即Virtual Server via Direct Routing,也就是用直接路由技术实现虚拟服务器。这种方式的连接调度和管理与前两种一样,但它的报文转发方法又有所不同,VS/DR通过改写请求报 文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度方式中性能最好的。

 

下面是DR模式IP包调度过程图:

 


原理图简述:

DR模 式将报文直接路由给目标真实服务器。在DR模式中,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标IP地址和目标 端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。

 

因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实复位是一定能够收到由LB发出的数据包。真实服务器接收到请求数据包的时候,解开IP包头查看到的目标IP是VIP。

 

此时只有自己的IP符合目标IP才会接收进来,所以我们需要在本地的回环借口上面配置VIP。另:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突。所以我们需要把真实服务器的lo接口的ARP响应关闭掉。

 

然后真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP。

 

DR模式小结:

  1. 通过在调度器LB上修改数据包的目的MAC地址实现转发。注意源地址仍然是CIP,目的地址仍然是VIP地址。
  2. 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)
  3. 因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面
  4. RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。
  5. RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。
  6. 由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。

 

 

四、NAT/FULL NAT模式

 

 

 

NAT模式: 即Virtual Server via Network Address Translation,也就是网络地址翻译技术实现虚拟服务器。当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的 Real Server地址,同时将报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。

 

在服务器端得到数据后,Real Server将数据返回给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

 

下面是NAT模式IP包调度过程图:

 


原理图简述:

  1. 客户端请求数据,目标IP为VIP
  2. 请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的。)并在连接HASH表中记录下这个连接。
  3. 数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。
  4. 收到RS的返回后的数据,根据连接HASH表修改源地址为VIP、目标地址为CIP,及对应端口80.然后数据就从LB出发到达客户端。
  5. 客户端收到的就只能看到VIP\DIP信息。


NAT模式优缺点:

  1. NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候LB负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点
  2. 只需要在LB上配置一个公网IP地址就可以了。
  3. 每台内部的realserver服务器的网关地址必须是调度器LB的内网地址。
  4. NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。


FULL NAT 模式

 

FULL NATT的基本原理:FULL NAT  在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip;但VIP 返回给client时也替换了src ip。

 

 

  1. 首先client 发送请求package给VIP;
  2. VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver IP;把sorce ip 改成 lvs 集群的LB IP
  3. realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS LB IP。
  4. LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client


FULL NAT 模式的注意事项:

  • FULL NAT 模式也不需要 LBIP 和realserver ip 在同一个网段;
  • full nat 跟nat 相比的优点是:保证RS回包一定能够回到LVS;因为源地址就是LVS--> 不确定
  • full nat  因为要更新sorce ip 所以性能正常比nat 模式下降 10%

 

 

五、IP TUNNEL模式

 

 


TUN 即Virtual Server via IP Tunneling 也就是通过IP隧道技术实现虚拟服务器。在VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器。此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以在独立的一个网络中。因此,在TUN方式中,调度器将只处理用户的报文请求,从而使集群系统的吞吐量大大提高。

 

TUN的工作流程图如下所示:

 

 

它 和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。

 

原理图过程简述:

  1. 客户请求数据包,目标地址VIP发送到LB上。
  2. LB 接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后会根据LVS设置的LB算法选择一个合适的realserver;并把client发送的package 包装到一个新的IP包里面;新的IP包的dst是realserver的IP。
  3. RS 节点服务器根据IP Tunnel包头信息收到请求包,realserver 收到这个package后判断dst ip 是自己,然后解析出来的package的dst是VIP;会检测我们的网卡上是否绑定了VIP的ip地址;如果绑定了就会处理这个包,如果没有直接丢掉。 我们一般在realserver上面 lo:0 绑定了VIP的ip地址,就可以处理得到客户的请求包并进行响应处理。
  4. 响应处理完毕之后,RS服务器使用自己的公网线路将这个响应数据包发送给客户端。源IP地址是VIP地址。


IP TUNNEL 模式的注意事项:

  • TUNNEL 模式必须在所有的realserver 机器上面绑定VIP的IP地址
  • TUNNEL 模式的vip ------>realserver 的包通信通过TUNNEL 模式,不管是内网和外网都能通信,所以不需要lvs vip跟realserver 在同一个网段内
  • TUNNEL 模式 realserver会把packet 直接发给client 不会给lvs了
  • TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。

 

 

六、LVS负载调度算法

 

 

Lvs的调度算法决定了如何在集群节点之间分布工作负荷。当director调度器收到来自客户端访问VIP的上的集群服务的入站请求时,director调度器必须决定哪个集群节点应该处理请求。Director调度器用的调度方法基本分为两类:

 

 

  • 固定调度算法:rr,wrr,dh,sh
  • 动态调度算法:wlc,lc,lblc,lblcr

 

 

 

LVS调度算法的生产环境选型

1.一般的网络服务,如www,mail,mysql等常用的LVS调度算法为:

  1. 基本轮询调度rr
  2. 加权最小连接调度wlc
  3. 加权轮询调度wrc

 

2.基于局部性的最小连接lblc和带复制的给予局部性最小连接lblcr主要适用于web cache和DB cache

 

3.源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一。实际适用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。

 

 

经作者同意授权转载

作者:高俊峰

博客:爱维Linux

 

 

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓