lvs的多种模式

2021-08-02 17:42:42 浏览数 (1)

一.简介

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,目前已经是Linux标准内核的一部分,但在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块。

类似于iptables的架构,在内核中有一段代码用于实时监听数据包来源的请求,当数据包到达端口时做一次重定向。这一系列的工作必须在内核中实现。在内核中实现数据包请求处理的代码叫做ipvs。ipvs仅仅提供了功能框架,还需要自己手动定义是数据对哪个服务的请求,而这种定义需要通过写规则来实现,写规则的工具就称为ipvsadm。

通过Lvs提供的负载均衡技术来实现一个高性能、高可用的服务器集群。Lvs对用户的请求进行分发,这个请求可以是网页、邮件、视频、DNS等等。

名词:

  • VIP(Virtual IP):Director用来向客户端提供服务的IP地址,因为需要做冗余,就需要2台Lvs虚拟一个共用的VIP,也是对外开放的外网ip。
  • RIP(Real IP):集群节点(后台真正提供服务的服务器)所使用的IP地址
  • DIP(Director’s IP):Director用来和RIP 进行联系的地址
  • CIP(Client computer’s ):公网IP,客户端用来访问服务的ip。

二.结构

使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用Shared Storage表示。在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

Load Balancer层: 位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,它的作用主要是类似于一个路由器,根据设定通过路由表将用户的请求分发给后端的应用服务器上,它本身并不对请求有任何解读和处理。同时,还要安装对应用服务器的监控模块Ldirectord,此模块用于监测应用服务器的健康状况。在不可用时把它从LVS路由表中剔除,恢复时重新加入。

Server Array层: 由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个。

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

三.负载均衡

简介

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。

访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,有如下三种方式。

NAT(Network Address Translation)

步骤: NAT是一种外网和内网地址映射的技术,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,从后端应用服务器选择一个,做目标地址转换(DNAT),将目标IP改为RS的IP。Lvs就相当于一个路由器一样,做基本的路由转发。

RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完后,将包发送给客户端,这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

数据包地址转换过程: S:CIP D:VIP -> Director -> S:CIP D:RIP -> Real Server -> S:RIP D:CIP -> Director -> S:VIP D:CIP

特点: 在NAT方式下Lvs要对用户请求和响应报文做地址转换,当用户请求越来越多时,调度器的处理能力将成为瓶颈。 需要Lvs和RS在一个局域网,Lvs做RS的网关。 隐藏真实回应的ip。 支持端口映射。 后台的Real Server可以使用任何操作系统。

TUN(IP Tunneling)

步骤: TUN也就是IP隧道技术实现虚拟服务器,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给RS,然后RS的返回数据会直接返回给用户。

ip隧道是一个将ip报文封装到另一个ip报文的技术,将客户请求包封装在一个ip tunnel里面,然后发给RS节点服务器。这时候这个包的源ip就是Lvs的,目的ip是RS服务器的。

RS收到请求后解开里面的ip tunnel层,进行响应处理。并且直接把包通过自己的外网地址发送给客户,不用经过LVS。

数据包地址转换过程: DIP -> VIP 基于隧道来传输,在数据包外层额外封装了S:DIP D :RIP 的地址。

特点: 因为经过封装,所以RS一定不能是私有地址,可以异地容灾。 Lvs只处理用户的报文请求而不用发送回应,这样会提高一定的效率,但要维持ip隧道会降低一些效率。 直接将数据包返回给客户端,所以RS默认网关不能是DIP,必须是公网上某个路由器的地址。 需要RS的系统支持隧道。 不支持端口映射。 无法隐藏真实回应的ip。

DR(Direct Routing)

步骤: DR模式下,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP(虚拟的)也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

数据包地址转换过程: S:CIP D:VIP -> Director -> S:CIP D:RIP -> Real Server -> S:VIP D:CIP

特点: 因为只改写进来的网络包的mac地址,不管理出去的,也没有ip隧道,所以性能最好。 不需要和Lvs在一个网段,但需要RS有一块网卡和Lvs连接在同一物理网段上。 无法隐藏ip地址。 不支持端口映射。 RS不能将网关指向DIP。 直接将数据包返回给客户端,所以Real Server默认网关不能是DIP,必须是公网上某个路由器的地址; RIP 为公网地址,管理员可以远程连接Real Server来查看工作状态; 一旦Director 宕机,可以通过修改DNS记录将A记录指向RIP 继续向外提供服务;

0 人点赞