首页 > 其他分享 >LVS原理及实例

LVS原理及实例

时间:2024-08-09 14:52:35浏览次数:14  
标签:LVS lvs 请求 192.168 Server connection 实例 原理 eth0

目录

LVS原理

LVS概念

lvs集群的类型

lvs-nat

解释

传输过程

lvs-dr

解释

传输过程 

特点

lvs-tun

 LVS(Linux Virtual Server)常见的调度算法

防火墙标记(Firewall Marking)结合轮询调度

实战案例

lvs的nat模式配置

准备工作

配置过程

测试结果

lvs的dr模式综合实践

虚拟机配置(准备五个虚拟机)

​编辑​编辑​编辑​编辑​编辑配置过程

测试结果

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

错误示范

正确示范

​编辑测试结果


LVS原理

LVS(Linux Virtual Server,Linux 虚拟服务器)的基本原理是通过将多个真实服务器组合成一个虚拟服务器集群,实现对客户端请求的高效负载均衡和高可用性服务。 其主要工作流程如下:

1. 客户端向虚拟服务器(VIP)发送请求。

2. 负载均衡器(通常称为 Director)接收到请求。

3. Director 根据预先配置的负载均衡算法(如轮询、加权轮询、最少连接等)选择一个合适的真实服务器(Real Server)。

4. Director 将客户端请求转发到选定的 Real Server。

5. Real Server 处理请求,并将响应直接返回给客户端。

为了实现请求的转发,LVS 支持多种工作模式,如 NAT(Network Address Translation,网络地址转换)模式、TUN(IP Tunneling,IP 隧道)模式和 DR(Direct Routing,直接路由)模式。

在 NAT 模式中,Director 不仅负责调度,还对请求和响应数据包进行网络地址转换。

在 TUN 模式中,Director 将请求数据包封装后发送给 Real Server,Real Server 处理后直接将响应返回给客户端。

在 DR 模式中,Director 根据算法选择 Real Server 后,将请求的 MAC 地址修改为选定 Real Server 的 MAC 地址,然后通过局域网将请求直接发送给 Real Server,Real Server 处理后直接响应给客户端。

通过 LVS 的负载均衡机制,可以提高服务器集群的整体性能、可扩展性和可用性,确保客户端能够获得快速和可靠的服务。

LVS概念

名称意义
VS(Virtual Server)/虚拟服务器负责调度,将客户端的请求分配到合适的后端服务器
RS(Real Server)/真实服务器负责真正提供服务,处理来自 VS 调度分配的请求
CIP(Client IP)/客户端主机IP地址客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址
VIP(Virtual serve IP)/虚拟IP地址Director用于向客户端计算机提供服务的IP地址
DIP(Director IP)/Director的IP地址Director用于连接内外网网络的IP地址
RIP(Real server IP)/真实IP地址在集群下面节点上使用的IP地址

访问过程:CIP<-->VIP == DIP<-->RIP

lvs集群的类型

(此处我们详细讲解lvs-nat和lvs-br)

lvs-nat

解释

LVS(Linux Virtual Server)的网络地址转换(NAT)模式是一种在网络层(第四层)实现负载均衡的方法。在NAT模式中,Director Server(DS)充当所有服务器节点的网关,既是客户端请求的入口,也是Real Server响应客户端的出口。优点是可以进行端口转换,缺点是存在性能瓶颈。它主要工作在OSI模型的第三层(网络层)和第四层(传输层)。NAT允许内部网络使用私有IP地址,并通过公共IP地址进行外部通信。

传输过程

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)

2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口

3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)

4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)

5.VS服务器把修改过报文的响应数据包回传给客户端 6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发 因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。

lvs-dr

解释

LVS(Linux Virtual Server)的 DR(Direct Routing,直接路由)模式,这种模式适用于非ARP设备的Real Server,Real Server网络是局域网,同样支持大量Real Server(高达100个),Real Server有自己的路由器。优点是性能最佳,缺点是不支持跨网段和端口转换。工作在数据链路层。在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip

传输过程 

1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC

2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端 的MAC+VIP+RS1的MAC

3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC

特点

1.Director和各RS都配置有VIP

2.确保前端路由器将目标IP为VIP的请求报文发往Director

3.在前端网关做静态绑定VIP和Director的MAC地址

lvs-tun

LVS(Linux Virtual Server)的 TUN(IP Tunneling,IP 隧道)模式是另一种负载均衡模式。

在 TUN 模式中,Director 接收到客户端请求后,根据负载均衡算法选择一台合适的 Real Server。然后,Director 将请求数据包重新封装在一个新的 IP 数据包中,并将其发送给所选的 Real Server。

Real Server 接收到数据包后,解封装得到原始的请求数据包,并进行处理。处理完成后,Real Server 直接将响应数据包返回给客户端,而不经过 Director。

TUN 模式的优点是可以跨越不同的网络区域对服务器进行负载均衡,Real Server 可以位于不同的物理网络。但它也有一些缺点,比如需要所有服务器支持 IP 隧道功能,会增加一定的系统开销。

 LVS(Linux Virtual Server)常见的调度算法

静态调度算法RR,WRR,DH,SH
动态调度算法LC,WLC,LBLC,LBLCR
静态调度算法

1. 轮询(Round Robin,RR):将请求依次分配给各个真实服务器,依次循环。

2. 加权轮询(Weighted Round Robin,WRR):给每个真实服务器设置一个权重,根据权重的比例将请求分配给服务器。权重越高,分配到的请求越多。

3.目标地址散列(Destination Hashing,  DH):根据请求的目标 IP 地址进行哈希运算,将请求分配到固定的服务器。

4.源地址散列(Source Hashing,  SH):根据请求的源 IP 地址进行哈希运算,将请求分配到固定的服务器。

动态调度算法

1. 最少连接(Least Connections,LC):将新的请求分配给当前连接数最少的真实服务器。

2. 加权最少连接(Weighted Least Connections,WLC):为真实服务器设置权重,综合考虑服务器的权重和当前连接数来分配请求。

3. 基于局部性的最少连接(Locality-Based Least Connections,LBLC):主要考虑请求的目标 IP 地址,优先将请求分配给同一 IP 地址对应的真实服务器。

4. 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR):结合了 LBLC 和复制功能,对于目标 IP 地址相同的请求,如果对应的真实服务器没有活动连接,则可以在有活动连接的真实服务器中选择一个,并复制该连接。

防火墙标记(Firewall Marking)结合轮询调度

在 LVS 环境中,使用防火墙标记(Firewall Marking)结合轮询调度可以实现更灵活和定制化的负载均衡策略。

通过防火墙标记,可以为不同的连接或数据包打上特定的标记。然后,在 LVS 的配置中,可以根据这些标记来进行调度决策,而不仅仅依赖于默认的轮询方式。

实战案例

lvs的nat模式配置

准备工作

lvs主机需要两个网络适配器,其中一个为NAT模式,另外一个为仅主机模式,还需要两个server主机,一个为server1还有一个为server2,都为仅主机模式

配置过程

配置ip

lvs主机

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
 
[ipv4]
address1=192.168.0.100/24
method=manual


 server1主机

[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual


server2主机配置

[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual


在lvs主机中配置
lvs中打开内核路由功能,ip_forward = 1通常表示启用了 IP 转发功能,使网络适配器分别为nat和仅主机之间连通

vim /etc/sysctl.conf            #在最后一行添加
net.ipv4.ip_forwaed = 1                #启用了 IP 转发功能
 
sysctl -p             #使配置生效


下载ipvsadm

yum install ipvsadm -y


配置规则

ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
 
ipvsadm -Ln
watch -n 1 ipvsadm -Ln --rate    #也可以使用监控命令来看


在server主机配置

yum install httpd -y        #两个都要下载httpd
 
echo webserver1-192.168.0.10 > /var/www/html/index.html        #server1中配置
ystemctl restart httpd
 
echo webserver1-192.168.0.10 > /var/www/html/index.html         #server2中配置
systemctl restart httpd

测试结果

lvs的dr模式综合实践


 

nodeipvip角色模式
client172.25.254.200客户端NAT
router

192.168.0.100

172.25.254.100

路由器NAT,仅主机
lvs192.168.0.50lo:192.168.0.200/32调度器仅主机
webserver1192.168.0.10lo:192.168.0.200/32真实服务器仅主机
webserver2192.168.0.20lo:192.168.0.200/32真实服务器仅主机

虚拟机配置(准备五个虚拟机)


配置过程

配置ip

配置client主机

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual
 
 
[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth0


配置router主机

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual
 
 
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
 
[ipv4]
address1=192.168.0.100/24
method=manual
 
 
[root@router ~]# nmcli connection reload
[root@router ~]# nmcli connection up eth0
[root@router ~]# nmcli connection up eth1

配置lvs主机(vip使用环回来创建)

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
 
 
 
[root@lvs ~]# nmcli connection reload
[root@lvs ~]# nmcli connection up eth0
 
[root@lvs ~]# ip addr add dev lo 192.168.0.200/32

配置server1主机(vip使用环回来创建)

[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
 
 
[root@server1 ~]# nmcli connection reload
[root@server1 ~]# nmcli connection up eth0
 
 
[root@server1 ~]# ip addr add dev lo 192.168.0.200/32

配置server2主机(vip使用环回来创建)

[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual
 
 
[root@server2 ~]# nmcli connection reload
[root@server2 ~]# nmcli connection up eth0
 
[root@server2 ~]# ip addr add dev lo 192.168.0.200/32


修改Linux内核参数。

server1和server2上面都要做

(rs主机中使vip不对外响应,将RS上的VIP配置为lo接口的别名,限制Linux仅对对应接口的ARP请求做响应;)

限制响应级别 :arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别 :arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 


配置ipvsadm
在lvs主机中进行配置 IP 虚拟服务器

yum install ipvsadm -y
 
ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2


启用 IP 转发功能
在router主机进行配置

(设置持久连接,保持客户端与后端服务器的连接关系)

vim /etc/sysctl.conf            #在最后一行添加
net.ipv4.ip_forward = 1
 
ipvsadm -p


 配置web服务

yum install httpd -y
 
echo 11111111 > /var/www/html/index.html        #server1中配置
ystemctl restart httpd
 
echo 22222222 > /var/www/html/index.html         #server2中配置
systemctl restart httpd

测试结果

for i in {1..10}; do curl 192.168.0.200; done

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

错误示范

ipvsadm -A -t 192.168.0.200:80 -s rr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:80 -g

错误结果

[root@lvs ~]# curl  -k https://192.168.0.200;curl 192.168.0.200
1111111
1111111


正确示范

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记,

--set-mark value

其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度

#在lvs主机打标记:

#并且lvs主机基于标记定义集群服务:

iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 66
 
ipvsadm -A -f 66 -s rr    #设定调度规则
ipvsadm  -a -f 66 -r 192.168.0.10 -g
ipvsadm  -a -f 66 -r 192.168.0.20 -g


测试结果

标签:LVS,lvs,请求,192.168,Server,connection,实例,原理,eth0
From: https://blog.csdn.net/luohailin_/article/details/141028660

相关文章

  • 【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理
    目录STM32IO口取反|寄存器方式|异或运算符|原理1.引言2.GPIO基础知识2.1GPIO概述2.2STM32的GPIO架构2.3GPIO寄存器简介3.GPIO引脚取反原理3.1寄存器操作实现取反3.2异或运算符的应用4.示例代码4.1基础示例:LED闪烁4.2应用实例:继电器控制5.GPIO引脚......
  • 【总结】注册码泄露原理以及例题
    引言题目给了小明的机器码:1653643685031597用户user_id:xiaoming可以看到题目采用了SIMD指令集该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。机......
  • SpringCloud服务注册与发现的实现原理
    SpringCloud是一个分布式系统开发的框架,其中的服务注册与发现是其核心功能之一。在分布式系统中,服务的注册与发现是非常重要的,它可以帮助系统自动地发现和管理各个服务之间的依赖关系,提高系统的可扩展性和可靠性。SpringCloud基于Netflix的开源组件Eureka来实现服务的注册......
  • 从零入门AI生图原理&实践 跑通最简的Baseline
    目录下载baseline文件(大约需要2分钟)进入文件夹,打开baseline文件安装环境,然后重启kernel调整prompt,设置你想要的图片风格,依次修改8张图片的描述依次顺序运行剩余的代码块,点击代码框左上角执行按钮,最终获得图片(大约需要20分钟)下载baseline文件(大约需要2分钟)gitlfsinsta......
  • keepalived工作原理和使用方式
    keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。keepalived主要有三个模块分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式......
  • 原理图与 PCB设计核心指南!
    这篇文章献给从事电子信息行业的硬件工程师、射频工程和PCB工程师,若有不足之处,请多多包涵!原理图设计原理原理图设计是电子设计的核心环节,它为后续的 PCB 设计、生产、调试等流程奠定了坚实基础。深入理解原理图设计的原理及注意事项,对于确保整个 电子设计项目的顺利进......
  • 深入LVS内核世界:揭秘其高效背后的技术细节与实现机制
    LVS简介Linuxvirtualserver,即Linux虚拟服务器,是一种基于Linux平台的高性能、高可用的服务器负载均衡技术。它主要工作在网络层、传输层(OSI参考模型的第三层、第四层),主要通过IP地址和端口号来转发网络流量。LVS可以在一台或多台服务器(称之为负载均衡器或调度器)上运行,将来自客......
  • 反向代理的工作原理解析
     在当今数字化时代,网络通讯扮演着重要的角色,而代理技术为网络通讯提供了更多的灵活性和安全性。作为两种重要的代理技术,代理服务器和反向代理的运行原理和用途各有不同。本文将重点介绍反向代理的运行原理,深入探讨其在网络通讯中的作用和优势。1.代理服务器和反向代理之间......
  • 1392、STM32单片机温湿度检测阈值报警4个继电器加4个负载风扇等无线蓝牙远程(程序+原
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择显示器选择方案一、设计功能二、实物图三、原理图四、程序源码五、PCB图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选......
  • LLM大模型:LLaVa多模态图片检索原理
    训练安全垂直领域的LLM,会用到很多著名安全论坛(52pojie\kanxue\xianzhi\freebuf等)、博客的数据,这些数据100%都有很多图片(文不如图嘛,图片比文字更直观,更容易表达业务意义),之前微调LLM只能使用文字,图片只能丢弃,非常可惜,需要利用多模态的技术充分提取图片信息! 1、以前做传......