LVS的DR模式

一、负载均衡LVS基本介绍

LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org。

LVS是Linux内核标准的一部分。LVS是一个实现负载均衡集群的开源软件项目,通过 LVS 的负载均衡技术和 Linux操作系统可以实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。

LVS架构从逻辑上可分为调度层、Server集群层和共享存储。LVS实际上相当于基于IP地址的虚拟化应用。

二、LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

ipvs(ip virtual server):工作在内核空间,是真正生效实现调度的代码。

ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

三、LVS相关术语

DS:Director Server, 指的是前端负载均衡器节点。

RS:Real Server, 后端真实的工作服务器。

VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

DIP:Director Server IP, 前端负载均衡器IP地址,主要用于和内部主机通信。

RIP:Real Server IP, 后端服务器的IP地址。

CIP:Client IP, 访问客户端的IP地址

四、LVS的工作模式介绍

LVS负载均衡常见的有三种工作模式,分别是地址转换(简称NAT模式)、IP隧道(简称TUN模式)和直接路由(简称DR模式),其实企业中最常用的是 DR 实现方式,下面总结 DR模式的原理和特点

五、LVS的DR模式

DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR模式是互联网使用比较多的一种模式。

Director Server作为群集的访问入口,但不作为网关使用,后端服务器池中的Real Server与Director Server在同一个物理网络中,发送给客户机的数据包不需要经过Director Server。为了响应对整个群集的访问,DS与RS都需要配置有VIP地址。

数据包流向分析

用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。

内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server。

RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。

RS直接将响应报文传送到客户端。

LVS-DR模型的特点

1.RS和DS必须在同一个物理网络中。

2.RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问。

3.所有的请求报文经由Director。 Server,但响应报文必须不能经过Director Server。

4.RS的网关绝不允许指向DIP(不允许数据包经过director)。

5.RS上的lo接口配置VIP的IP地址。

LVS-DR模式需要注意的是:

保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。

解决方案是:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。不可以将VIP设置在出口网卡上,否则会响应客户端的arp请求,造成client/gatewayarptable紊乱,以至于整个loadbalance都不能正常工作。

arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求。

arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

在DR模式中RS配置arp_ignore为1:意思是为不是eth0(实际的ip地址的网卡)所在ARP的请求,我不与应答。arp_announce为2:意思是不对外公布我有除了eth0所在ip之外的任何ip,避免主动宣告我有VIP。

六、实验测试

实验环境:GNS3

实验拓扑:使用了单臂的DR模式

搭建步骤:

GNS3的网络拓扑模拟功能还是十分强大的,可以将直接将Vmware的虚拟机加载到网络拓扑当中,加载前需要在lvs的虚拟机上安装lvs的管理工具yum install –y ipvsadm,并需要注意内核版本为2.4以上,并且要在server虚拟机上安装httpd服务,并在/var/www/html/下添加内容不同的index.html以方便在实验的时候容易看出效果,虚拟机装载完毕,下边开始配置。

1.为每一个虚拟机分配实际的ip地址

2.为lvs虚拟机配置虚拟ip地址,并添加ipvsadm服务

3.在每一个RS上添加虚拟IP地址以及ARP抑制

4.客户端ping 192.168.1.5的arp解析过程

在lvs上抓包可以看到arp的响应

在RS上抓包收不到arp的响应,这说明arp抑制已经生效,也就是RS不会对VIP的arp请求进行响应,这样对客户端来说就不会把VIP映射到RS的mac地址上了

查看客户端的ARP缓存表可以看到,虚拟ip和lvs的真实ip地址都被映射到了lvs的mac地址上

5.在RS上开启HTTP服务后查看效果

    在客户端上用curl命令产生HTTP的请求,可以看到请求被分发到不同的RS上了

七、抓包分析整个过程

现在来抓包看一下这个过程,我们在每一条链路上都打开wireshark进行抓包,在客户端上输入一次curl 192.168.1.5指令,这次请求被分配到web1上(192.168.1.2)

在客户端上抓包结果如下

前三个数据包时建立TCP连接的过程,

第一个数据包是客户端发送的syn数据包,数据包的内容如下

可以看到,客户端在请求web页面的时候首先会和lvs建立TPC连接,目的MAC地址是lvs的地址,源MAC地址是客户端的MAC地址,目的IP地址是虚拟IP地址,源IP是客户端的IP地址,因此交换机根据目的MAC地址,会将这个数据包发送给lvs,lvs收到这个数据包以后会发送如下的数据包

可以看到这同样是一个建立TCP连接的syn请求,源IP地址是客户端的IP,目的IP是虚拟IP地址,而这个数据包的源MAC地址却是lvs的mac地址而不是客户端的mac地址,目的mac地址是web1的mac地址。仔细对比这两个数据包发现,其实这两个数据包的内容是一样的,只不过是对mac地址进行了替换

也就是lvs收到syn请求后,会把这个syn包的mac地址的源mac替换为自己的mac,目的mac替换为某一个RS的mac,交换机根据这个数据包的目的mac地址会将这个数据包发送给web1,然后web1收到这个数据包后会发出如下的数据包

可以看到这个是对lvs发过来的syn请求的确认,源ip地址是虚拟ip地址,目的ip地址是客户端的ip地址,而这个时候的目的mac地址是客户端的mac地址,源mac地址是web1的mac地址,画图描述一下这个过程

可以看到,最关键的步骤是lvs收到syn请求包以后将这个syn包的mac地址进行了替换,这样就可以将这个syn请求转发给了web1服务器,这样web1收到这个syn包之后会直接返回对syn的ack包给客户端而不需要经过lvs,从这个过程我们可以看出,从客户端的角度来看,客户端建立了和lvs的tcp连接,而实际上建立的是客户端和web1的tcp连接。当客户端收到这个syn的ack包以后,抓包发现客户端会同时发出两个数据包

看的出来,一个是第三次握手的数据包,另一个则是http的get请求,两个数据包的内容分别如下,首先是第三次握手的数据包

这个数据包的源ip是客户端的ip地址,目的ip是虚拟ip,源mac是客户端的mac地址,而目的mac是lvs的mac地址(并不是web1的mac地址),再来看一下GET请求的数据包

可以看到这个数据包的ip和mac和第三次握手的数据包是一样的,因此交换机会将这两个数据包转发给lvs,lvs收到这两个数据包后会发出如下的两个数据包

打开这两个数据包和刚才客户端发出的两个数据包对比,首先是第三次握手包的对比

可以看到,和最初的lvs对syn请求包的处理过程一样,数据包的内容不变,只是将源mac地址替换为lvs自己的mac地址,而目的mac地址替换为了web1的mac地址,再来对比一下GET请求,发现也是类似的

也就是说,lvs再收到第三次握手包和GET请求以后,都会对其mac地址进行替换,从而让交换机将数据包转发给web1,web1收到这两个数据包后会发出如下数据包

也就是对GET请求的响应,可以看到内容是“This is web1”,源ip是虚拟ip,目的ip是客户端的ip,源mac是web1的mac,目的mac是客户端的mac,这样交换机根据这个数据包的mac地址就能够将响应返回给客户端,客户端收到响应以后,会发送ack包以及断开连接的fin包

同样的,这两个数据包的mac地址还是lvs的mac地址,lvs收到这两个数据包以后还是会对这两个数据包的mac地址进行替换,从而把数据包转发给web1,web1收到两个数据包以后,也会发送fin,ack包断开连接

这个数据包的源mac是web1的mac,而目的是客户端的mac地址,这样这个数据包会直接转发给客户端,而不经过lvs,lvs收到这个数据包以后,还会再次发送一个ack包(断开连接的第四次握手)

这个数据包的mac地址还是lvs的mac地址,而lvs收到这个数据包以后,还是会对其进行mac地址替换,将数据包转发给web1,这样就断开了tcp连接,整个过程就结束了。

八、原因分析

整个DR模式实现的关键是lvs对mac地址的替换+lvs的调度算法+在RS上对ARP的抑制+虚拟ip的使用,首先通过虚拟ip可以让lvs和rs具有网卡别名,可以让网卡有多个IP,这样可以使得lvs和RS能够接收并处理目的ip是虚拟ip的数据包;ARP的抑制可以让RS不对虚拟ip的arp请求做出响应,这样可以让客户端的arp缓存表中缓存虚拟ip和lvs的mac地址的映射关系,让请求都先转发给lvs;lvs收到数据包以后根据调度算法,选择一个RS来处理这个请求,并通过mac地址的替换让交换机把这个请求转发给对应的RS;并且由于RS是可以通过arp请求获取到客户端的mac地址的,因此可以直接和客户端进行通信,所以可以将响应直接返回给客户端而不需要经过lvs,这样就实现了请求全部经过lvs而响应直接由RS返回的效果。

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用LVS-DR(Linux Virtual Server - Direct Routing)时,有一些注意事项需要考虑。首先,需要注意LVS-DR的配置和注意事项可能因环境和需求的不同而略有变化,因此建议在实施LVS-DR之前仔细阅读相关文档和指南,并根据实际情况进行适当的调整和配置。 LVS-DR是LVS中最常用和性能最高的一种工作模式,它可以在Linux服务器上实现高可用性和性能增强。 在使用LVS-DR时,有几个需要注意的事项。首先,需要设置正确的网络配置,包括将VIP(Virtual IP)绑定到物理服务器的网络接口上,并配置正确的IP地址和子网掩码。此外,还需要确保物理服务器之间具有正确的网络连通性和路由设置。 另外,需要注意在LVS-DR模式下,真实服务器(Real Server)的响应数据包是直接返回给客户端的,而不经过负载均衡器。因此,需要在真实服务器上配置正确的网络路由和ARP(Address Resolution Protocol)表项,以确保响应数据包能够正确返回给客户端。此外,需要注意在真实服务器上禁用ICMP重定向,以避免网络问题导致的异常行为。 最后,如果在使用LVS-DR时遇到问题或困惑,建议寻求专业人士的帮助和支持。他们可以根据具体情况提供更准确和有效的解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [LVS-DR模式](https://blog.csdn.net/Breeze_nebula/article/details/132319087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值