深入浅出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


时间: 2024-09-14 13:50:56

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

关于mysql集群与负载均衡问题

问题描述 关于mysql集群与负载均衡问题 在windows环境下能实现LVS+Keepalived么?这两个东西都是运行在Centos上面的?windows有否类似的解决方案?看过MySQL Cluster但这个东西很笨,当SQL节点挂了,不会自动切换,需要手动去做.请问有那位对这个比较了解. 解决方案 mysql本来就擅长在linux架设一些框架,windows支持不够,所以直接在centos上搞就可以了.

【Linux】集群和负载均衡

集群和负载均衡的概念  集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机.  负载均衡(Load Balance) 网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去.这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性

漫谈分布式集群的负载均衡—口水篇

1 什么是分布式集群 为了理解分布式集群这个概念,我们先说说这两个概念:"集群"和"分布式".艺术来源于生活,计算机科学亦是如此.我们先通过例子,来了解一下现实生活中的"集群"和"分布式". 从开餐馆说起:你开了一家餐馆,自己掌勺后厨(即做菜).随着生意越来越好,发现自己忙不过来.于是你聘请了两个厨师,你们三位厨师就是一个"集群".主要的职责是:洗菜.配菜.炒菜.你们关系如下: 随着生意越来越好,两种方式增

“集群和负载均衡”在实战当中的运用技巧

在"高并发,海量数据,分布式,NoSql,云计算......"概念满天飞的年代,相信不少朋友都听说过甚至常与人提起"集群,负载均衡"等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了这些"听起来很牛的"技术名词.下面简单解释一下吧. 集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机.通俗一点来说,就

服务器集群和负载均衡如何实现?

问题描述 请教一个问题,javasocket服务器如何实现服务器集群和负载均衡?目前以项目遇到这个问题,请大神指点一下! 解决方案 解决方案二:socket与硬件有关,是指定到某台机器的某个端口的.所以一般我们在Socket前用负载均衡,根据业务特性,有nginx,LVS,F5硬件等).至于集群,那和具体业务相关.像普通的HTTP,各HTTP服务器有SESSION共享和同步就行了.

集群、负载均衡、分布式

原文地址:http://www.uml.org.cn/zjjs/201108111.asp 1.集群 1.1定义:是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机. 是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机.如一个提供Web服务的集群,对外界来看是一个大Web服务器.不过集群的节点也可以单独提供服务. 1.2负载均衡系统:集群中所有的节点都处于活动

服务器集群与负载均衡有什么区别

1. 集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机. 2. 负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机.如一个提供Web服务的集群,对外界来看是一个大Web服务器.不过集群的节点也可以单独提供服务. 3. 特点:在现有网络结构atch之上,负载均衡提供了一种廉价有

关于 tomcat 集群中 session 共享的三种方法

前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享.  建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,  不只是缓存 session ,还可以做其他用途,一举几得啊.  1.使用 filter 方法存储  这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于 tomcat ,而且实现的原理比较简单容易控制.  可以使用 memcached-session-f

Terracotta v3.5.1发布 著名开源Java集群平台

Terracotta是一款由美国Terracotta公司开发的著名开源Java集群平台.它在JVM与Java应用之间实现了一个专门处理集群功能的抽象层,以其特有的增量检测.智能定向传送.分布式协作.服务器镜像.分片等技术,允许用户在不改变现有系统代码的情况下实现单机Java应用向集群话应用的无缝迁移.使得用户可以专注于商业逻辑的开发,由Terracotta负责实现高性能.高可用性.高稳定性的企业级Java集群. Terracotta公司目前在美国.欧洲.澳大利亚.印度等地有近百名员工,为Terr