LVS(Linux virual server)

发布于:2025-07-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

LVS(Linux virual server)

系统性能扩展方式

Scale UP:增强单台服务器性能,适合单体应用,但有硬件限制。

Scale Out:增加服务器数量,适合分布式和集群系统,可灵活扩展。

集群(Cluster)

定义:多台计算机组合成一个系统,解决特定问题。

类型

  • LB(负载均衡):多主机分担访问请求,提高并发处理能力。
  • HA(高可用):避免单点故障,用MTBF(平均无故障时间)和MTTR(平均恢复时间)衡量可用性,目标是达到高可用性(如99.9%)。
  • HPC(高性能计算):用于大规模计算任务,是国家战略资源。

分布式

定义:将业务拆分成多个子业务,部署在多台服务器上。

应用

  • 分布式存储:如Ceph、GlusterFs、FastDFS等。
  • 分布式计算:如Hadoop、Spark。
  • 分布式应用:服务拆分、静态资源分布、分布式数据存储等。

集群和分布式对比

集群:多台服务器运行相同业务,功能和数据一致,通过负载均衡和冗余提高并发和可靠性。

分布式:多台服务器运行不同子业务,功能和数据不同,通过并行处理缩短任务执行时间,提升效率。

总结

集群:适合高并发、高可用场景,通过增加服务器数量提升性能。

分布式:适合大规模数据处理和复杂业务,通过任务拆分和并行处理提升效率。

LVS概念

概念名 概念
VS Virtual Server 虚拟服务器 负责调度
RS Real Server 真实服务器 负责真正提供服务
Client Client 客户端 客户大大
VIP Virtual server IP VS外网的IP \
RIP Real server IP RS的IP \
DIP Director IP VS内网的IP \
CIP Client IP 客户端的IP \

访问流程:CIP <–> VIP == DIP <–> RIP

工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

ipvsadm命令

参数 描述
-A 添加一个新的虚拟服务器
-E 编辑现有的虚拟服务器
-D 删除一个虚拟服务器
-C 清除所有虚拟服务器配置
-L 显示虚拟服务器的详细信息
-a 向虚拟服务器添加一个真实服务器
-d 从虚拟服务器中删除一个真实服务器
-n 以数字形式显示 IP 地址和服务端口,不进行解析
-s 指定调度算法,默认WLC
-f 指定防火墙标签
-w 指定权重
-p 设置持久连接超时
-t tcp服务
-u udp服务

备份与还原

命令 描述
ipvsadm-save > /你的规则文件要保存去哪 备份
ipvsadm-restore < /你的规则文件 还原

参数和对应模式

参数
-g DR模式(直连路由模式)
-m NAT模式
-i TUN模式(ipip隧道模式)

集群的类型

类型 解释 参数
lvs-nat 修改请求报文的目标IP,多目标IP的DNAT -m
lvs-dr 操纵封装新的MAC地址 -g
lvs-tun 在原请求IP报文之外新加一个IP首部 -i
lvs-fullnat 修改请求报文的源和目标IP /

NAT

原理

IVS-NAT 原理:修改请求数据包的目标地址(RIP)和端口(PORT)到选定的真实服务器(RS)的地址和端口。

  • 网络要求:RIP和DIP(Director IP)应在同一个网络,使用私有地址;RS的网关应指向DIP。
  • 转发要求:请求和响应数据包都必须通过Director(负载均衡器)转发,这可能导致Director成为瓶颈。
  • 端口映射:支持修改请求数据包的目标端口。
  • 系统兼容性:Director必须是Linux系统,RS可以是任何操作系统。

[!CAUTION]

注意:这里我们就省略了路由器

在这里插入图片描述

实验
主机 IP—Port 网络模式
Client 172.25.254.111—eth0 CIP NAT
LVS 172.25.254.100—eth0
192.168.0.100—eth0
VIP 仅主机
RS1 192.168.0.10—eth0 RIP 仅主机
RS2 192.168.0.20—eth0 RIP 仅主机

[!NOTE]

网络配置方面省略,直接开始LVS的配置

在LVS上配置
[root@LVS ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@LVS ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@LVS ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

当我们配置完上面这三条命令后,我们可以用以下命令进行查看是否配置正确

ipvsadm -Ln

在这里插入图片描述

在客户端上初尝试
[root@client ~]# curl 192.168.0.10
RS1 - 192.168.0.10
[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done;

我们可以看到客户端卡住了访问不了,可以看到上面的LVS显示20的RS服务器收到了数据包,ActiveConn为1了

所以是RS那边出了问题,而不是LVS的问题

在这里插入图片描述

我们可以看到我们之前用脚本配置的网关是错误的,所以我们需要重新修改网关的配置

在这里插入图片描述

修改网关配置
#在RS1中
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.0.10/24,192.168.0.100				#改这里
dns=8.8.8.8

[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up eth0

#在RS2中
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.0.20/24,192.168.0.100				#改这里
dns=8.8.8.8

[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up eth0

在这里插入图片描述

重新加载网络配置

在这里插入图片描述

lvs上需要开启内核的IP转发功能
vim  /etc/sysctl.conf 
net.ipv4.ip_forward=1
测试访问

我们可以看到流量已经可以正常由lvs通过rr算法进行轮询分发

在这里插入图片描述

DR

原理
  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地址
实验
主机 IP—Port 网络模式
Client 172.25.254.111—eth0 CIP NAT
Router 172.25.254.100—eth0
192.168.0.100—eth1
NAT
仅主机
LVS 192.168.0.200—eth0
192.168.0.220—eth0
DIP
VIP
仅主机
RS1 192.168.0.220—lo
192.168.0.10—eth0
VIP
RIP
仅主机
RS2 192.168.0.220—lo
192.168.0.20—eth0
VIP
RIP
仅主机
Client

在这里插入图片描述

[root@client ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
Router

在这里插入图片描述

#开机启动
[root@Router ~]# systemctl enable --now firewalld.service
Created symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service → /usr/lib/systemd/system/firewalld.service.
Created symlink /etc/systemd/system/multi-user.target.wants/firewalld.service → /usr/lib/systemd/system/firewalld.service.

#启用火墙的伪装(NAT,网络地址转换)功能
[root@Router ~]# firewall-cmd --add-masquerade
success
[root@Router ~]# firewall-cmd --reload
success
DRlvs
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=192.168.0.200/24,192.168.0.100
address2=192.168.0.220/24

route -n
#DRlvs的网关可以写可以不写 都可以

在这里插入图片描述

在这里插入图片描述

[root@DRlvs ~]# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@DRlvs ~]# dnf install ipvsadm-1.31-6.el9.x86_64 -y
#开机启动
[root@DRlvs ~]# systemctl enable --now ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.10:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.20:80 -g
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.220:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   1      0          0

RS1
[root@RS1 ~]# cd /etc/NetworkManager/system-connections/
[root@RS1 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS1 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32				#添加RS1的VIP

[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up lo

在这里插入图片描述

#查看当前系统中所有与 ARP相关的内核参数配置
[root@RS1 ~]# sysctl -a | grep arp

#设置rs主机lo接口不对外响应
#注意需要先设置全局内核参数配置再设置对应接口的内核参数配置
[root@RS1 ~]# echo net.ipv4.conf.all.arp_ignore=1 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.all.arp_announce=2 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.lo.arp_ignore=1 >> /etc/sysctl.conf
[root@RS1 ~]# echo net.ipv4.conf.lo.arp_announce=2 >> /etc/sysctl.conf

#刷新刚刚配置的内核参数,同时检查是否更改成功
[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

RS2
[root@RS2 ~]# cd /etc/NetworkManager/system-connections/
[root@RS2 system-connections]# cp -p eth0.nmconnection lo.nmconnection
[root@RS2 system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32				#添加VIP

[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up lo

在这里插入图片描述

[root@RS2 ~]# echo net.ipv4.conf.all.arp_ignore=1 >> /etc/sysctl.conf
[root@RS2 ~]# echo net.ipv4.conf.all.arp_announce=2 >> /etc/sysctl.conf
[root@RS2 ~]# echo net.ipv4.conf.lo.arp_ignore=1 >> /etc/sysctl.conf
[root@RS2 ~]# echo net.ipv4.conf.lo.arp_announce=2 >> /etc/sysctl.conf
[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
检验

主机上的网卡MAC地址

主机与网卡设备
router:
eth0: 00:0c:29:ca:24:99
eth1: 00:0c:29:ca:24:a3
lvs:
eth0: 00:0c:29:b1:18:8c
RS1:
eth0: 00:0c:29:6c:51:af
RS2:
eth0: 00:0c:29:1c:94:31

我们可以通过抓包来查看整个流程

WireShark抓包

在这里插入图片描述

1.客户端发送出请求来到路由器给到lvs的Director

①
客户端发送访问来到路由器111
对应端口eth1的MAC地址24:a3

然后路由器给到lvs的Director
对应端口eth0的MAC地址18:8c

在这里插入图片描述

2.Director收到请求后分发给RS1

②
Director收到请求后分发给RS1,这里显示的还是VIP220
但是我们仔细看MAC地址可以看出是RS1
现在包里携带的是
CIP			VIP(RS)
CMAC		RIPMAC

在这里插入图片描述

3.RS1回包跳过lvs发给路由器

③
RS1回包跳过Director直接来到路由器
所以现在包里携带的是
VIP		CIP
RMAC	CMAC

在这里插入图片描述

4.还原了MAC地址

最后这里
可以理解为
回包到这一步时,显示源MAC是router的MAC,目标MAC是lvs的Director的MAC
但是还有后面一步是变成了
源MAC是lvs的Director的MAC,目标的MAC是router的MAC
注意:这一步防止RS服务器的MAC的泄露,所以有RMAC转换为DMAC
再下一步就是
路由器发往客户端

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

思考
1.为什么lvs上要有DIP?只在Director上配置一个VIP不可以吗?
MAC地址转换:在DR模式下,LVS通过修改请求数据包的MAC地址来实现转发,而不是修改IP地址。Director将请求数据包的源MAC地址改为自己的DIP对应的MAC地址,目标MAC地址改为选定的Real Server(RS)的MAC地址。这样,数据包会被发送到正确的RS。

网络隔离:DIP用于在Director内部网络中标识负载均衡器,确保内部网络通信不会与外部网络混淆。DIP通常配置在Director的内部网络接口上,用于与RS通信。

ARP响应:Director需要能够响应ARP请求,以便在网络中正确地解析VIP到MAC地址。如果只配置VIP,Director可能无法正确地参与ARP过程,从而影响数据包的转发。

安全性:通过配置DIP,可以限制Director的网络暴露,增强系统的安全性。
2.在RS上配置的arp_ignore=1和arp_arp_announce=2有什么作用?
arp_ignore=1:
防止RS响应那些目标硬件地址不是自己的ARP请求。这样可以避免RS的IP地址被其他设备错误地解析到错误的MAC地址,从而防止ARP欺骗攻击。
通俗的说,我的理解是
防止了RS暴露自己的MAC地址,只会响应lvs发来的请求,防止客户端直接访问RS。

arp_announce=2:
防止RS发送可能引起网络混乱的ARP响应。当RS接收到一个ARP请求,请求的源IP和目标IP都在RS的IP列表中时,RS不会发送ARP响应。这可以避免RS在DR模式下发送不必要的ARP响应,从而减少网络中的ARP流量和潜在的ARP冲突。
通俗的说,我的理解是
只响应本机所有网络接口的沟通(e.g. lo与eth0就可以沟通),不会响应外面的网络接口和沟通

TUN

转发方式

不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)

在这里插入图片描述

  1. 客户端发送请求数据包,包内有源IP+vip+dport
  2. 到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
  3. RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client
特点
  1. DIP, VIP, RIP都应该是公网地址
  2. RS的网关一般不能指向DIP
  3. 请求报文要经由Director,但响应不能经由Director
  4. 不支持端口映射 5.RS的OS须支持隧道功能

fullnat

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP VIP --> RIP

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
  2. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  3. 请求和响应报文都经由Director
  4. 支持端口映射

[!WARNING]

注意:此类型kernel默认不支持

LVS工作模式总结

NAT模式 TUN模式 DR模式
RS操作系统 不限 支持隧道 禁用ARP
调度器和服务器网络 可跨网络 可跨网络 不可跨网络
调度服务器数量服务器数量
RS服务器网关 指向到调度器DIP 指向到路由 指向到路由
  • Ivs-nat与lvs-fullnat:请求和响应报文都经由Director
  • Ivs-nat:RIP的网关要指向DIP
  • Ivs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
  • Ivs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
  • Ivs-dr:通过封装新的MAC首部实现,通过MAC网络转发
  • Ivs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

LVS调度算法

静态算法

静态算法 描述
RR roundrobin轮询RS分别被调度,当RS配置有差别时不推荐
WRR WeightedRR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
SH Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往 第一次挑中的RS,从而实现会话绑定
DH Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

动态算法

动态算法 描述 调度方法
LC least connections(最少链接发) 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)
WLC Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
SED Shortest Expection Delay 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
NQ Never Queue 第一轮均匀分配,后续SED
LBLC Locality-Based LC 动态的DH算法
LBLCR LBLC with Replication 带复制功能的LBLC

[!NOTE]

SED:当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接,注意服务器权重设置的合理性

LBLC:使用场景:根据负载状态实现正向代理

LBLCR:解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS

在4.15版本内核以后新增调度算法

1.FO(WeightedFaiOver)调度算法

常用作灰度发布

在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_FOVERLOAD标志)的且权重最高的真实服务器,进行调度
当服务器承接大量链接,我们可以对此服务器进行过载标记(IP_VS_DEST_FOVERLOAD),那么Vs调度器就不会把链接调度到有过载标记的主机中。

2.OVF(Overflow-connection)调度算法

基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动
连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关
联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:

  • 未过载(未设置IP_VS_DEST_FOVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

防火墙标签解决轮询错误

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

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

火墙标记

在RS1和RS2中安装mod_ssl
yum install mod_ssl -y

标记前

[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:80 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.10:80 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.20:80 -g
[root@DRlvs ~]# ipvsadm -A -t 192.168.0.220:443 -s rr
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.10:443 -g
[root@DRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.20:443 -g
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.220:80 rr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   1      0          0
TCP  192.168.0.220:443 rr
  -> 192.168.0.10:443             Route   1      0          0
  -> 192.168.0.20:443             Route   1      0          0

当访问vip时两次调度都到了RS1上,说明80端口和443端口并没有组合到一起被lvs调度器调配

因为我们设置的是rr轮询,那么第一次访问如果是RS1的话,第二次访问将会分配给RS2

[root@Router ~]# curl -k http://192.168.0.10;curl -k https://192.168.0.10
RS1 - 192.168.0.10
RS1 - 192.168.0.10

在这里插入图片描述

这么来看访问调度都不能满足rr,80端口和443端口是独立的,我们需要告诉lvs调度器80端口和443端口要一起调度,所以我们需要火墙标记。

标记后

[!CAUTION]

在此之前务必清除ipvsadm

[root@DRlvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.220 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666

[root@DRlvs ~]# iptables -t mangle -L -n -v
Chain PREROUTING (policy ACCEPT 6 packets, 432 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       6    --  *      *       0.0.0.0/0            192.168.0.220        multiport dports 80,443 MARK set 0x29a
......



[root@DRlvs ~]# ipvsadm -A -f 666 -s rr
[root@DRlvs ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@DRlvs ~]# ipvsadm -a -f 666 -r 192.168.0.20 -g

[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0               Route   1      0          0

为什么是mangle表,是因为数据包既不是进也不是出,也不是进入调度器本机,而是对于数据包进行附加的说明
-A添加,PREROUTING在路由之前,进来之前马上打标记,-d目的地地址VIP -p协议 tcp协议 -m 指定我们标记的是接口(多端口) --dports 目标端口 -j 指定动作做标记 --set-mark 设定标记值

[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10
[root@Router ~]# curl -k http://192.168.0.220;curl -k https://192.168.0.220
RS2 - 192.168.0.20
RS1 - 192.168.0.10


[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr
  -> 192.168.0.10:0               Route   1      8          0
  -> 192.168.0.20:0               Route   1      8          0

可以正常轮询,80端口和443端口也可以组合调配了

在这里插入图片描述

在这里插入图片描述

lvs持久链接

在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单 粗暴,可能会导致调度失衡

**解决方案 **

在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上。

[root@DRlvs ~]# ipvsadm -E -f 666 -s rr -p 300
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr persistent 300
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0               Route   1      0          0

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上。

[root@DRlvs ~]# ipvsadm -E -f 666 -s rr -p 300
[root@DRlvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  666 rr persistent 300
  -> 192.168.0.10:0               Route   1      0          0
  -> 192.168.0.20:0               Route   1      0          0

网站公告

今日签到

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