LVS 原理简介

本贴最后更新于 1440 天前,其中的信息可能已经时移俗易

lvs

1.简介

LVS 是一个开源软件,由章文嵩博士于 1998 年 5 月创立,可以实现 Linux 平台下的简单负载均衡。LVS 是 Linux Virtual Server 的简写,是一个虚拟的服务器集群系统。在后续的维护过程中,LVS 添加了各种新的支持,包括 FreeBSD 的支持、IPV6 的支持、TCPHA 的支持等等。

LVS 为传输层协议,基于 linux 内核的 netfilter 模块,现在一般都集成与 linux 内核模块,无需单独安装,使用命令:lsmod | grep ip_vs,可以查看 lvs 是否已在内核模块中。

lvs 分为 ipvs 和 ipvsadmin,前者为已集成与内核模块的 ipvs 核心功能模块(内核如没有可以编译进内核),后者为 lvs 的命令行工具,其命令格式也类似与 iptables。

lvs 工作模式:ipvs 是工作在内核中 netfilter 的 INPUT 的钩子函数上,对进入的报文在没有进入用户空间前,对这些报文进行操作。优点是性能高,支持并发大,无 socket 限制和最大文件句柄数限制。缺点是调度方式简单,仅能通过 ip+port 进行调度。

2.调度模式

lvs 有三种调度模式,NAT,DR,TUN

备注:CIP(客户端 IP),VIP(lvs 调度器的外网监听 IP),DIP(lvs 调度器和后端 realserver 联系的 IP),RIP(后端 realserver 的 IP)

2.1 NAT 模式

nat 模式是通过地址转换来实现的调度方式,当客户端访问服务器时,访问的地址应是 lvs 监听的外网地址,也就是 VIP,此时请求报文的地址应为 CIP->VIP(请求地址-> 目标地址),到达 lvs 调度器以后,lvs 通过修改该报文的目标地址,来进行转发到后端 server,此时该报文为 CIP->RIP(通过 DIP 转发)。后端 realserver 在处理完请求之后再将处理完的报文发送到 lvs,此时报文为 RIP->CIP(因为此时 realserver 指定的出口网关为 DIP,所以即使该报文目标地址为 CIP,也会发送到 DIP 所在的 lvs 调度服务器上面)。lvs 调度器收到报文后将该报文改为 VIP->CIP,再发送给客户端,完成处理本次请求。

image.png

NAT 模式优缺点:

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

2.2 TUN 模式

virtual server via ip tunneling 模式:采用 NAT 模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过 IP 隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用 VS/TUN 模式后,集群系统的最大吞吐量可以提高 10 倍。

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

image.png

原理图过程简述:

  1. 客户请求数据包,目标地址 VIP 发送到 LB 上。
  2. LB 接收到客户请求包,进行 IP Tunnel 封装。即在原有的包头加上 IP Tunnel 的包头。然后发送出去。
  3. RS 节点服务器根据 IP Tunnel 包头信息(此时就又一种逻辑上的隐形隧道,只有 LB 和 RS 之间懂)收到请求包,然后解开 IP Tunnel 包头信息,得到客户的请求包并进行响应处理。
  4. 响应处理完毕之后,RS 服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源 IP 地址还是 VIP 地址。(RS 节点服务器需要在本地回环接口配置 VIP,后续会讲到)

2.3 DR 模式

DR 模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同 TUN 模式一样,DR 模式可以极大的提高集群系统的伸缩性。而且 DR 模式没有 IP 隧道的开销,对集群中的真实服务器也没有必要必须支持 IP 隧道协议的要求。但是要求调度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

DR 模式是互联网使用比较多的一种模式。

DR 模式原理图:

image.png

VS/DR 模式的工作流程图如上图所示,它的连接调度和管理与 NAT 和 TUN 中的一样,它的报文转发方法和前两种不同。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 相同的端口提供服务。

image.png

lvs 调度算法

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

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcrimage.png

  • LVS
    3 引用 • 1 回帖
1 操作
qq1072023998 在 2020-11-21 17:21:34 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...