Linux virtual server (LVS)


LVS是Linux virtual server的缩写,为linux虚拟服务器,是一个虚拟的服务器集群系统。LVS简单工作原理为用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接收到请求,返回给用户。对于用户来说,看不到Web后端具体的应用。

LVS集群三层结构

  • 负载调度器(Load Balancer):LVS集群对外的前端机器,负责将client的请求发送到一组服务器上执行,而client认为返回来的数据来自同一个IP
  • 服务器池(Server Pool):正在执行client请求的服务器,一般是web服务器。还有FTP,MAIL,DNS等。
  • 共享存储(Shared stord):为Server Pool提供一个共享的存储区,让服务器池拥有相同的内筒,提供相同的服务。

LVS相关概念

  • DS:Director Server。指前段负载均衡器
  • RS:Real Server。后端服务器
  • VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
  • DIP:Director Server IP,主要用于和内部主机通讯的IP地址
  • RIP:Real Server IP,后端服务器的IP地址
  • CIP:Client IP,访问客户端的IP地址

LVS四种负载均衡模式

DR模式

负载均衡器和 RS 都使用同一个 IP 对外服务,但只有负载均衡器对 ARP 请求进行响应。负载均衡器收到数据包后根据调度算法,找出对应的 RS, 把目的 MAC 地址改为 RS 的 MAC (IP 一致), 并将请求分发给这台 RS.RS 收到数据包并处理完成之后,由于 IP 一致,可以直接将数据返给客户端,与直接从客户端收到这个数据包无异,处理后直接返回给客户端

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是 CIP, 目标地址为 VIP
  2. 负载均衡器将客户端请求报文的源 MAC 地址改为自己的 MAC 地址,目标 MAC 改为了 RS 的 MAC 地址,并将此包发送给 RS
  3. 处理完请求报文后,由于 RS 与 负载均衡器有具有同一 VIP, 会将响应报文直接发送给客户端

![image-20230306142102784](/Users/suhang/Library/Application Support/typora-user-images/image-20230306142102784.png)

  • 优点:与隧道模式一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。同时,不需要隧道结构,可以使用大多数服务器作为 RS
  • 缺点:要求 VIP 必须与物理网卡在一个物理段上,否则 ARP 不能寻到不同网段的 MAC 地址。也就是说所有 RS 节点和调度器 LB 只能在一个局域网里面
NAT模式

NAT (Network Address Translation) 即网络地址转换,包括 SNAT (源地址转换) 与 DNAT (目标地址转换). 它通过修改请求报文的目标 IP 地址 (同时可能会修改目标端口) 挑选出某台 Real Server 的 RIP 地址实现转发。在请求与响应过程中期间,无论是进来的流量,还是出去的流量,都必须经过 LVS 负载均衡器.

  1. 客户端将请求发往负载均衡器,请求报文源地址是 CIP, 目标地址为 VIP
  2. 负载均衡器通过地址转换,将客户端发来的数据包转发至后端 RIP
  3. RS 处理完成后响应对负载均衡器返回响应数据
  4. 负载均衡器通过地址转换,将 RS 的响应数据响应给客户端

![image-20230306141507935](/Users/suhang/Library/Application Support/typora-user-images/image-20230306141507935.png)

注意: RIP 与 DIP 需要在同一网络,且 RIP 网关必须指向 DIP

  • 优点:只需要暴露出一个 VIP 地址即可,对用户来说后端服务器是完全透明的
  • 缺点:当 RS 节点增长过多时,负载均衡器将成为性能瓶颈,速度会变慢
TUN模式

负载均衡器把客户端发来的数据包,封装一个新的 IP 头标记 (仅目的 IP) 发给 RS.RS 收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器

  1. 客户端将请求发往负载均衡器,请求报文源地址是 CIP, 目标地址为 VIP
  2. 负载均衡器将在客户端请求报文的首部再封装一层 IP 报文,将源地址改为 DIP, 目标地址改为 RIP, 并通过 IP 隧道技术将报文发给 RS
  3. RS 收到后,先把数据包头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器

![image-20230306141734441](/Users/suhang/Library/Application Support/typora-user-images/image-20230306141734441.png)

  • 优点:减少负载均衡器压力,负载均衡器不再是系统的瓶颈,能够处理更多的请求流量
  • 缺点: RS 节点需要合法 IP, 且需要所有服务器支持 IP Tunneling(IP Encapsulation) 协议,因此服务器可能只局限于部分 Linux 系统上
FULLNAT模式
四种模式比较

LVS负载均衡常见算法

  • 轮训调度
    • 按依次循环的方式将请求调度到不同的服务器上,该算法大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
  • 加权轮训调度
    • Weight Round Robin 简称WRR,轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
  • 最小连接调度
    • Least Connections 简称LC,算法是把新的连接请求分配到当前连接数小的服务器。小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
  • 加权小连接调度
    • Weight Least Connections 简称WLC,是小连接调度的超集,各个服务器相应的权值表示其处理性能。
    • 调度器可以自动问询真实服务器的负载情况,并动态调整权值,带权重的谁不干活就给谁分配,机器配置好的权重高。
  • 基于局部的小连接
    • Locality-Based Least Connections 简称LBLC,算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。
  • 带复制的基于局部性的少连接
    • Locality-Based Least Connections with Replication 简称LBLCR,算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。
  • 目标地址散列调度
    • Destination Hashing 简称DH,算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。
  • 源地址散列调度
    • Source Hashing 简称SH,算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

  目录