LVS集群技术

发布于:2025-07-21 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、LVS简介

1、 简介:

        LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。

        LVS是一个开源的负载均衡软件,运行在Linux操作系统上,通过IP负载均衡技术和基于内容请求分发技术来实现高性能、高可用的服务器集群。

2、组成结果

        2.1LVS集群架构:

        LVS通常由三部分组成:

  •         负载均衡器(Load Balancer):这是集群系统的核心,它接收来自客户端的请求,并根据一定的调度算法将请求转发到后端的真实服务器上。  
  •         服务器池(Server Pool):由多个真实服务器组成,这些服务器负责处理具体的业务请求。  
  •         共享存储(Shared Storage,可选):用于存储集群系统中的共享数据,确保所有真实服务器可以访问到相同的资源。 

        2.2LVS软件组成: 

  • ipvs(ip virtual server):通过修改请求报文的目的地址(DNAT)或源地址(SNAT)来实现负载均衡。IPVS是LVS的核心组件,它工作在网络层,能够快速处理大量的网络请求,是真正生效实现调度的代码。
  • ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。

3、LVS相关术语 

  • DS:Director Server:指的是前端负载均衡器节点。
  • VSVirtual Server:虚拟服务器。
  • RS:Real Server:后端真实的工作服务器。
  • CIP:Client IP:访问客户端的IP地址,即请求的来源ip。
  • VIP: Virtual serve IP :VS外网的IP。
  • DIP: Director IP :VS内网的IP。
  • RIP: Real server IP:后端服务器的IP地址。
访问流程:CIP <--> VIP == DIP <--> RIP

二、LVS工作原理

         LVS主要工作在网络的第四层(传输层),通过修改IP报文的头部信息来实现负载均衡。它支持多种负载均衡算法和调度策略,能够根据不同的需求进行灵活配置。

1、工作流程  

  •  客户端请求到达负载均衡器:客户端通过网络向负载均衡器发送请求,请求的目的IP地址是负载均衡器的虚拟IP地址(VIP)。  
  • 负载均衡器接收请求:负载均衡器接收到客户端的请求后,根据配置的调度策略(如轮询、最少连接、加权轮询等)选择一个后端服务器(Real Server)来处理该请求。  
  •  修改IP报文头部信息:负载均衡器将客户端请求的IP报文头部信息进行修改,将目的IP地址从虚拟IP地址(VIP)改为选定的后端服务器的IP地址(RIP),同时将源IP地址从客户端的IP地址(CIP)改为负载均衡器的IP地址(DIP)。  
  •  转发请求到后端服务器:负载均衡器将修改后的IP报文转发到选定的后端服务器。  
  • 后端服务器处理请求:后端服务器接收到请求后,根据请求的内容进行处理,并生成响应数据。  
  • 后端服务器返回响应:后端服务器将响应数据发送回负载均衡器。根据配置的负载均衡模式(NAT、DR、TUN),响应数据的返回路径可能不同。  
  • 负载均衡器返回响应给客户端:负载均衡器将后端服务器的响应数据转发回客户端,客户端收到响应后完成请求处理。

 2、负载均衡模式

2.1 NAT(Network Address Translation)模式

  • 请求处理:负载均衡器将客户端请求的IP报文头部的目的IP地址从VIP改为RIP,同时将源IP地址从CIP改为DIP。  
  • 响应处理:后端服务器将响应数据发送回负载均衡器,负载均衡器将响应数据的源IP地址从RIP改为VIP,然后将响应数据转发回客户端。  
  • 特点:所有后端服务器需要配置默认网关为负载均衡器的IP地址(DIP),适用于后端服务器不在同一网段的场景。  

2.2DR(Direct Routing)模式

  • 请求处理:负载均衡器将客户端请求的IP报文头部的目的IP地址从VIP改为RIP,但不修改源IP地址(CIP)。  
  • 响应处理:后端服务器直接将响应数据发送回客户端,无需经过负载均衡器。  
  • 特点:后端服务器需要配置一个虚拟IP地址(VIP),并且需要配置单播或广播的ARP响应策略,适用于后端服务器在同一网段的场景。  

2.3TUN(Tunneling)模式

  • 请求处理:负载均衡器将客户端请求的IP报文封装在另一个IP报文中,外层IP报文的目的IP地址是后端服务器的IP地址(RIP),源IP地址是负载均衡器的IP地址(DIP)。  
  • 响应处理:后端服务器解封装后将响应数据发送回负载均衡器,负载均衡器再将响应数据转发回客户端。  
  • 特点:后端服务器需要支持IP隧道协议,适用于后端服务器分布在不同网络环境的场景。

2.4FULLNAT(Full Network Address Translation)模式

  •  请求处理 :负载均衡器将请求的源IP从CIP改为DIP(负载均衡器内网IP),目标IP从VIP改为RIP(真实服务器IP)。  
  • 响应处理:负载均衡器将响应的源IP从RIP改为VIP,目标IP从DIP改为CIP,然后转发给客户端。  
  • 特点 :支持真实服务器和负载均衡器不在同一网段,同时对源IP和目标IP进行转换。但是真实服务器无法直接获取客户端的CIP,需额外配置(如TOA)。  

三、LVS实验 

1、LVS-DR模式集群实验 

1.1实验环境 

主机名 ip vip 角色
client 172.25.254.111 NAT null 测试主机
router

NAT-eth0:172.25.254.100;

仅主机-eth1:192.168.221.100

null 路由器
DR-LVS
192.168.221.200GW 192.168.221.100 仅主机
lo:192.168.221.220 dr调度器
RS1 192.168.221.101GW 192.168.221.100 仅主机 lo:192.168.221.220 web服务器1
RS2 192.168.221.102GW 192.168.221.100 仅主机 lo:192.168.221.220 web服务器2

1.2配置命令 

 LVS中安装ipvsadm

[root@lvs-dr ~]# yum install ipvsadm -y
配置VIP192.168.221.220/32:
[root@lvs-dr~]# ip addr add dev lo 192.168.221.220/32 
[root@rs1~]# ip addr add dev lo 192.168.221.220/32 
[root@rs2~]# ip addr add dev lo 192.168.221.220/32
RS1RS2中解决响应问题 :

lvs中配置策略 :
 测试结果:

 2、防火墙标签解决轮询错误 

2.1实验环境

        在DR实验环境基础上。 

2.2 轮询规则中可能会遇到的错误

        如果在RS中同时开放80443端口,那么默认控制是分开轮询的,这样我们就会出
现一个轮询错乱的问题,就是当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上。
配置策略:

测试问题:当访问vip时两次调度都到了102

 2.3防火墙标记解决轮询调度问题

 解决方法:

(1)在Director主机打标记:在dr-lvs调度器中设定端口标签,人为80443是一个整体。

(2) Director主机基于标记定义集群服务:设定调度规则

测试结果: 

 3、NAT模式集群实验

3.1实验环境 

主机名 ip vip 角色
client 172.25.254.111 NAT null 测试主机
LVS
192.168.221.100 仅主机
172.25.254.220 调度器
RS1 192.168.221.101GW 192.168.221.100 仅主机 null 真实服务器1
RS2 192.168.221.102GW 192.168.221.100 仅主机 null 真实服务器2

3.2 配置命令

 LVS中启用内核路由功能
[root@lvs ~]# echo"net.ipv4.ip_forward=1">/etc/sysctl.d/ip_forward.conf 
[root@lvs ~]# sysctl--system
 LVS中安装ipvsadm
[root@lvs ~]# yum install ipvsadm -y
在LVS中添加调度策略 
[root@lvs ~]# ipvsadm -A -t 172.25.254.220:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.220:80 -r 192.168.221.101:80
[root@lvs ~]# ipvsadm -a -t 172.25.254.220:80 -r 192.168.221.101:80 -m 
[root@lvs ~]# ipvsadm -a -t 172.25.254.220:80 -r 192.168.221.102:80 -m
测试结果: 

4、LVS持久链接 

4.1问题

        在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失。

4.2解决方法 

        在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上。
在LVS调度器中设定 
[root@lvs~]#ipvsadm -E -f 6666 -s rr -p [3000]

查看LVS当前持久连接信息
[root@lvs~]#ipvsadm -LnC

四、 LVS的调度算法

1、常用的静态调度算法

轮询(Round Robin,RR)

  • 原理:按照顺序依次将请求分配给后端服务器。  
  • 特点:简单公平,适用于后端服务器性能相近的场景。  

加权轮询(Weighted Round Robin,WRR)  

  • 原理:根据服务器的权重进行轮询调度,权重高的服务器会优先分配到更多的请求。  
  • 特点:适用于后端服务器性能差异较大的场景。 

目标地址散列(Destination Hashing,DH)  

  • 原理:根据请求的目标IP地址进行散列,将请求分配到固定的服务器。  
  • 特点:适用于需要会话保持的场景,确保同一客户端的请求总是分配到同一服务器。

源地址散列(Source Hashing,SH)  

  • 原理:根据请求的源IP地址进行散列,将请求分配到固定的服务器。  
  • 特点:适用于需要会话保持的场景,确保同一客户端的请求总是分配到同一服务器。

2、常用的动态调度算法

最少连接(Least Connection,LC)  

  • 原理:优先将请求分配给当前连接数最少的服务器。  
  • 特点:适用于后端服务器性能差异较大的场景,能够动态平衡负载。

加权最少连接(Weighted Least Connection,WLC)  

  • 原理:结合服务器的权重和当前连接数进行调度,权重高且连接数少的服务器会优先分配到请求。
  • 特点:综合考虑了服务器的性能和当前负载,适用于复杂的生产环境。 

SED(Shortest Expected Delay)

  • 原理:根据服务器的当前连接数和响应时间来选择服务器。选择当前预期延迟时间最短的服务器。
  • 特点:综合考虑了服务器的负载和响应时间,适用于对响应时间敏感的应用场景。 

 NQ(Never Queue)  

  • 原理:如果服务器的当前连接数小于其权重值,则直接分配请求;否则,选择下一个服务器。  
  • 特点:尽量避免排队,适用于对延迟敏感的场景。 

LBLC(Locality-Based Least Connections)  

  • 原理:基于局部性最少连接。优先选择与客户端IP地址相同的服务器,如果没有,则选择当前连接数最少的服务器。  
  • 特点:适用于需要会话保持的场景,同时兼顾负载均衡。 

LBLCR(Locality-Based Least Connections with Replication)  

  • 原理:基于局部性最少连接并支持复制。优先选择与客户端IP地址相同的服务器,如果没有,则选择当前连接数最少的服务器,并将连接信息复制到其他服务器。  
  • 特点:适用于需要会话保持且对高可用性有要求的场景。  

 

 

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到