目录

1.1 LVS简介

1.2 LVS体系结构

1.3 LVS相关术语

1.4 LVS工作模式

1.5 LVS工作原理

1.6 LVS调度算法

2.LVS相关实验部署

2.1 lvs软件相关信息

2.1.1 ipsadm常见参数

2.1.2 试例

2.2 LVS部署NAT模式

2.2.1 实验环境

2.2.2 实验步骤

2.2.2.1 实验基础环境

2.2.2.2 追加配置

2.3 LVS部署DR模式

2.3.1 实验环境

2.3.2 实验步骤

2.3.2.1 实验基础环境

2.3.2.2 追加配置

2.4 防火墙标记解决调度问题

2.4.1 问题重现

2.4.2 解决方法

1.1 LVS简介

         LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是http://www.linuxvirtualserver.org/,现在 LVS 已经是 Linux 内核标准的一部分。

        LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。

1.2 LVS体系结构

        LVS 架构从逻辑上可分为Load Balance(负载调度器)、Real Server(Server 集群层)和Shared Storage(共享存储层)。

        第一层:Load Balance(负载调度器),它是访问整个群集系统的唯一入口,对外使用所有服务器共有的虚拟IP地址,也成为群集IP地址。

        负载均衡器:是服务器群集系统的单个入口点,可运行 IPVS,该 IPVS 在 Linux 内核或KTCPVS 内部实现 IP 负载均衡技术,在 Linux 内核中实现应用程序级负载平衡。使用 IPVS 时,要求所有服务器提供相同的服务和内容,负载均衡器根据指定的调度算法和每个服务器的负载将新的客户端请求转发到服务器。无论选择哪个服务器,客户端都应获得相同的结果。使用 KTCPVS 时,服务器可以具有不同的内容,负载均衡器可以根据请求的内容将请求转发到其他服务器。由于 KTCPVS 是在 Linux 内核内部实现的,因此中继数据的开销很小,因此仍可以具有较高的吞吐量。

        第二层:Real Server(Server 集群层),群集所提供的应用服务,比如:HTTP、FTP服务器池来承担,每个节点具有独立的真实IP地址,只处理调度器分发过来的客户机请求。

        服务器群集的节点可根据系统所承受的负载进行分担。当所有服务器过载时,可添加多台服务器来处理不断增加的工作负载。对于大多数 Internet 服务(例如Web),请求通常没有高度关联,并且可以在不同服务器上并行运行。因此,随着服务器群集的节点数增加,整体性能几乎可以线性扩展。

        第三层:Shared Storage(共享存储层),为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个群集的统一性,可使用 NAS 设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器。

        共享存储:可以是数据库系统,网络文件系统或分布式文件系统。服务器节点需要动态更新的数据应存储在基于数据的系统中,当服务器节点并行在数据库系统中读写数据时,数据库系统可以保证并发数据访问的一致性。静态数据通常保存在网络文件系统(例如 NFS 和 CIFS)中,以便可以由所有服务器节点共享数据。但是,单个网络文件系统的可伸缩性受到限制,例如,单个NFS / CIFS 只能支持 4 到 8 个服务器的数据访问。对于大型集群系统,分布式/集群文件系统可以用于共享存储,例如 GPFS,Coda 和 GFS,然后共享存储也可以根据系统需求进行扩展。

1.3 LVS相关术语

  • LB (Load Balancer 负载均衡)
  • HA (High Available 高可用)
  • Failover (失败切换)
  • Cluster (集群)
  • LVS (Linux Virtual Server Linux 虚拟服务器)
  • DS (Director Server),指的是前端负载均衡器节点
  • RS (Real Server),后端真实的工作服务器
  • VIP (Virtual IP),虚拟的IP地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址
  • DIP (Director IP),主要用于和内部主机通讯的 IP 地址
  • RIP (Real Server IP),后端服务器的 IP 地址
  • CIP (Client IP),访问客户端的 IP 地址

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

1.4 LVS工作模式

LVS有4种工作模式模式(NAT,TUN,DR,fullnat), 但fullnat工作模式默认不支持

LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。 

LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群

LVS-TUN(IP Tunneling):该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群

1.5 LVS工作原理

LVS-NAT工作原理

        调度器接收客户端请求后,会修改请求报文的目标 IP 地址(即 VIP)为后端真实服务器的 IP 地址(RIP),同时记录这个连接。真实服务器处理完请求后,将响应报文返回给调度器,调度器再把响应报文的源 IP 地址修改回 VIP,最后发送给客户端。整个过程中,客户端只和调度器有网络交互,对真实服务器无感知。

LVS-DR工作原理

        调度器接收到客户端请求后,会通过修改数据帧的 MAC 地址(把目标 MAC 地址改为后端真实服务器的 MAC 地址),将请求转发给真实服务器。真实服务器处理完请求后,直接把响应报文发送给客户端。和 TUN 模式一样,真实服务器需要配置 VIP,并且能直接和客户端通信。不过与 TUN 模式不同的是,DR 模式是通过修改 MAC 地址来转发请求,而不是封装 IP 报文。

 LVS-TUN工作原理

        调度器收到客户端请求后,会在原有的 IP 报文外面再封装一层新的 IP 头,新 IP 头的目标地址是后端真实服务器的 IP 地址。真实服务器收到这个封装后的报文后,会解封装获取原始请求,然后直接将响应报文发送给客户端(源 IP 地址为 VIP)。这种模式要求真实服务器和调度器都得有公网 IP,且真实服务器能直接和客户端通信。

LVS-fullnat工作原理

        该模式是对 NAT 模式的改进。调度器在接收客户端请求后,会同时修改请求报文的源 IP 地址(改为调度器的 IP 地址)和目标 IP 地址(改为后端真实服务器的 IP 地址)。真实服务器处理完请求后,将响应报文发送给调度器,调度器再把响应报文转发给客户端。这种模式的优势在于,调度器和真实服务器可以不在同一个网段,而且真实服务器可以使用私有 IP 地址。

4种工作模式的对比

特性NAT 模式TUN 模式DR 模式 fullnat模式
转发机制修改 IP 包的源 / 目标 IP 地址在原 IP 包外封装新 IP 头修改 MAC 地址同时修改源和目标 IP 地址
请求流向客户端 → 调度器 → 真实服务器客户端 → 调度器 → 真实服务器客户端 → 调度器 → 真实服务器客户端 → 调度器 → 真实服务器
响应流向真实服务器 → 调度器 → 客户端真实服务器 → 客户端真实服务器 → 客户端真实服务器 → 调度器 → 客户端
真实服务器网关配置需要指向调度器无需指向调度器无需指向调度器需要指向调度器
真实服务器 IP 类型公网或私网 IP公网 IP公网或私网 IP私网 IP
网络拓扑要求调度器与真实服务器 需同网段调度器与真实服务器 可跨网段调度器与真实服务器 需同网段调度器与真实服务器 可跨网段
调度器压力高(处理所有请求和响应)中(仅处理请求)低(仅处理请求)中(处理所有请求和响应)
性能较低(转发效率低)高(直接路由响应)最高(直接路由响应)中(NAT 改进版)
部署复杂度低(单网卡即可)高(需支持 IP 隧道)中(需配置 ARP 抑制)中(需支持双向 NAT)
典型应用场景小规模集群,RS 为私有 IP大规模互联网服务大规模高性能集群跨网段部署的私有云环境

1.6 LVS调度算法

LVS调度算法分为两种:静态调度算法和动态调度算法

静态调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。

动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。

静态调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr,SED,NQ

rr轮询:Round Robin,将收到的访问请求按顺序轮流分配给群集中的各节点真实服务器中,不管服务器实际的连接数和系统负载。
wrr加权轮询:Weighted Round Robin,根据真实服务器的处理能力轮流分配收到的访问请求,调度器可自动查询各节点的负载情况,并动态跳转其权重,保证处理能力强的服务器承担更多的访问量。
dh目标地址散列调度算法:DH,该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
sh源地址散列调度算法:SH,与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
wlc加权最少连接:Weighted Least Connections,服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大的活动连接负载。
lc最少连接:Least Connections,根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数少的节点,如所有服务器节点性能都均衡,可采用这种方式更好的均衡负载。
lblc基于局部性的最少连接:LBLC,基于局部性的最少连接调度算法用于目标 IP 负载平衡,通常在高速缓存群集中使用。如服务器处于活动状态且处于负载状态,此算法通常会将发往 IP 地址的数据包定向到其服务器。如果服务器超载(其活动连接数大于其权重),并且服务器处于半负载状态,则将加权最少连接服务器分配给该 IP 地址。
lblcr复杂的基于局部性的最少连接:LBLCR,具有复杂调度算法的基于位置的最少连接也用于目标IP负载平衡,通常在高速缓存群集中使用。与 LBLC 调度有以下不同:负载平衡器维护从目标到可以为目标提供服务的一组服务器节点的映射。对目标的请求将分配给目标服务器集中的最少连接节点。如果服务器集中的所有节点都超载,则它将拾取群集中的最少连接节点,并将其添加到目标服务器群中。如果在指定时间内未修改服务器集群,则从服务器集群中删除负载最大的节点,以避免高度负载。
SED最短延迟调度:SED,最短的预期延迟调度算法将网络连接分配给具有最短的预期延迟的服务器。如果将请求发送到第 i 个服务器,则预期的延迟时间为(Ci +1)/ Ui,其中 Ci 是第 i 个服务器上的连接数,而 Ui 是第 i 个服务器的固定服务速率(权重) 。
NQ永不排队调度:NQ,从不队列调度算法采用两速模型。当有空闲服务器可用时,请求会发送到空闲服务器,而不是等待快速响应的服务器。如果没有可用的空闲服务器,则请求将被发送到服务器,以使其预期延迟最小化(最短预期延迟调度算法)。

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

FO
(Weighted Fai Over)调度算法,常用作灰度发布。在此算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_FOVERLOAD标志)的且权重最高的真实服务器,进行调度,当服务器承接大量链接,对此服务器进行过载标记(IP_VS_DEST_F OVERLOAD),那么vs调度器就不会把链接调度到有过载标记的主机中
OVF
(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:1.未过载(未设置IP_VS_DEST_F OVERLOAD标志)  2.真实服务器当前的活动连接数量小于其权重值  3.其权重值不为零

2.LVS相关实验部署

实验环境均为红帽9.1的虚拟主机

2.1 lvs软件相关信息

  • 程序包:ipvsadm
  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

2.1.1 ipsadm常见参数

选项作用
-A添加一个虚拟服务,使用IP地址、端口号、协议来唯一定义一个虚拟服务
-E编辑一个虚拟服务
-D 删除一个虚拟服务
-C 清空虚拟服务表
-R 从标准输入中还原虚拟服务规则
-S保存虚拟服务规则值标准输出,输出的规则可以使用-R导入还原
-a在虚拟服务中添加一台真实服务器
-e在虚拟服务中编辑一台真实服务器
-d在虚拟服务中减少一台真实服务器
-L显示虚拟服务列表
-t 使用TCP服务,该参数后需要跟主机与端口信息
-u使用UDP服务,该参数会需要跟主机与端口信息
-s指定LVS所采用的的调度算法
-r设置真实服务器IP地址与端口信息
-g设置LVS工作模式为DR直连路由模式
-i 设置LVS工作模式为TUN隧道模式
-m设置LVS工作模式为NAT地址转换模式
-w设置指定服务器的权重
-c连接状态,需要配合-L使用
-n数字格式输出

2.1.2 试例

管理虚拟服务

添加地址为172.25.254.100:80的虚拟服务,指定调度算法为轮询。

ipvsadm -A -t 172.25.254.100:80 -s rr

修改虚拟服务的算法为加权轮询

ipvsadm -E -t 172.25.254.100:80 -s wrr

删除一个虚拟服务

ipvsadm -D -t 172.25.254.100:80

管理真实服务

添加一个真实服务器,使用DR模式,设置权重为2

ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.10:80 -g -w 2

修改真实服务器的权重为5

ipvsadm -e -t 172.25.254.100:80 -r 192.168.1.10:80 -g -w 5

删除一个真实服务器

ipvsadm -d -t 172.25.254.100:80 -r 192.168.1.10:80

2.2 LVS部署NAT模式

2.2.1 实验环境

主机名IPvip角色
clientNAT:172.25.254.10测试机
lvs仅主机-eth1:192.168.1.100NAT-eth0:172.25.254.100调度器
rs1仅主机:192.168.1.10,GW:192.168.1.100null真实服务器
rs2仅主机:192.168.1.20,GW:192.168.1.100null真实服务器

2.2.2 实验步骤

2.2.2.1 实验基础环境

client

lvs

lvs调度器有两块网卡,多一块“仅主机”网卡去连接两台真实服务器

RS

rs1和rs2的网卡都是“仅主机”模式

2.2.2.2 追加配置

(1)在lvs中启用内核路由功能,让内外网能进行一定程度的通信

[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 启用配置
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

 (2)在lvs中安装ipvsadm

[root@lvs ~]# dnf install ipvsadm -y

(3)在rs1和rs2中关闭防火墙,并安装httpd模拟提供服务

rs1
[root@rs1 ~]# systemctl disable --now firewalld.service                 # 关闭防火墙
[root@rs1 ~]# dnf install httpd -y                                      # 安装httpd
[root@rs1 ~]# echo "welcome to 192.168.1.10" > /var/www/html/index.html # 生成默认测试页文件
[root@rs1 ~]# systemctl enable --now httpd                              # 开启http服务rs2
[root@rs2 ~]# systemctl disable --now firewalld.service
[root@rs2 ~]# dnf install httpd -y
[root@rs2 ~]# echo "welcome to 192.168.1.20" > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd

在lvs中访问两台RS检测http服务是否生效

(4)在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.1.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.1.20:80 -m# 查看调度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.1.10:80              Masq    1      0          0-> 192.168.1.20:80              Masq    1      0          0# 在火墙中放行web服务,不然客户端会访问失败
[root@lvs ~]# firewall-cmd --permanent --add-service=http
success
[root@lvs ~]# firewall-cmd --reload
success

(5)可选操作

# 保存规则
# /etc/sysconfig/下原本是没有ipvsadm这个文件的,执行第一条命令会自动创建
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.1.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.1.20:80 -m -w 1# 删除所有规则
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn# 重新导入规则
[root@lvs ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.1.10:80              Masq    1      0          0-> 192.168.1.20:80              Masq    1      0          0

(6)客户端访问测试

        连续访问10次

2.3 LVS部署DR模式

2.3.1 实验环境

主机名IPvip角色
clientNAT:172.25.254.10测试机
router仅主机-eth1:192.168.1.100NAT-eth0:172.25.254.100路由器
lvs仅主机:192.168.1.200,GW:192.168.1.100lo:192.168.1.220调度器
rs1仅主机:192.168.1.10,GW:192.168.1.100lo:192.168.1.220真实服务器
rs2仅主机:192.168.1.20,GW:192.168.1.100lo:192.168.1.220真实服务器

2.3.2 实验步骤

2.3.2.1 实验基础环境

client

router

router路由器有两块网卡,多一块“仅主机”网卡去连接lvs调度器

lvs

lvs的网卡变为“仅主机”模式

RS

rs1和rs2的网卡还是“仅主机”模式

2.3.2.2 追加配置

(1)router启用内核路由功能

# 开启路由内核功能
[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1

(2)对router的防火墙进行配置,不然客户端访问会失败

[root@router ~]# firewall-cmd --permanent --add-masquerade
success
# 让配置在当前的会话中生效
[root@router ~]# firewall-cmd --reload
success

(3)在lvs、rs1、rs2上关闭防火墙,并配置环回ip用作vip

ip addr add dev lo 192.168.1.220/32
# 该命令用于配置环回IP,但为临时配置,重启系统后失效
# 且只能用ip a查看,ifconfig看不到该信息
lvs
[root@lvs ~]# systemctl disable --now firewalld.service
[root@lvs ~]# ip addr add dev lo 192.168.1.220/32rs1
[root@rs1 ~]# systemctl disable --now firewalld.service
[root@rs1 ~]# ip addr add dev lo 192.168.1.220/32rs2
[root@rs2 ~]# systemctl disable --now firewalld.service
[root@rs2 ~]# ip addr add dev lo 192.168.1.220/32

(4)在lvs中安装ipvsadm,并添加调度策略

安装ipvsadm
[root@lvs ~]# dnf install ipvsadm -y# 添加调度策略
[root@lvs ~]# ipvsadm -A -t 192.168.1.220:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:80 -r 192.168.1.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:80 -r 192.168.1.20:80 -g# 查看调度策略
[root@lvs ~]# 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.1.220:80 rr-> 192.168.1.10:80              Route   1      0          0-> 192.168.1.20:80              Route   1      0          0

(5)在rs1和rs2中安装httpd模拟提供服务

rs1
[root@rs1 ~]# dnf install httpd -y
[root@rs1 ~]# echo "welcome to 192.168.1.10" > /var/www/html/index.html
[root@rs1 ~]# systemctl enable --now httpdrs2
[root@rs2 ~]# dnf install httpd -y
[root@rs2 ~]# echo "welcome to 192.168.1.20" > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd

在lvs中访问两台RS检测http服务是否生效

(6)在RS1和RS2中解决vip响应问题

DR 模式的核心设计是:

        调度器和所有真实服务器(RS)都需要配置相同的 VIP调度器用 VIP 接收客户端请求,RS 用 VIP 作为响应的源 IP 直接返回给客户端。但这种 “同一 VIP 在多台机器上存在” 的情况,会引发两个关键问题:

ARP 广播冲突:当客户端或网络中的其他设备发送 ARP 请求(询问 “VIP 对应的 MAC 地址是什么”)时,若所有 RS 都响应,会导致客户端收到多个 MAC 地址,可能直接将请求发送给某台 RS 而非调度器,绕过负载均衡。

响应路径错误:若 RS 对 VIP 的 ARP 响应配置不当,可能导致客户端后续请求直接发给 RS,而非通过调度器分发,破坏负载均衡策略。

        因此需要对RS做关于vip的arp限制

rs1
# 解决vip响应问题
[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 = 2rs2
[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

(7)客户端访问测试

2.4 防火墙标记解决调度问题

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

2.4.1 问题重现

环境使用上一个实验“LVS部署DR模式”做完的环境

(1)在rs1和rs2中安装mod_ssl并重启httpd服务(rs安装mod_ssl模块 是为了让rs支持https)

[root@rs1 ~]# dnf install mod_ssl -y
[root@rs1 ~]# systemctl restart httpd[root@rs2 ~]# dnf install mod_ssl -y
[root@rs2 ~]# systemctl restart httpd

(2)查看httpd端口

(3)添加关于https的调度策略

[root@lvs ~]# ipvsadm -A -t 192.168.1.220:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:443 -r 192.168.1.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.1.220:443 -r 192.168.1.20:443 -g# 查看调度策略
[root@lvs ~]# 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.1.220:80 rr-> 192.168.1.10:80              Route   1      0          0-> 192.168.1.20:80              Route   1      0          0
TCP  192.168.1.220:443 rr-> 192.168.1.10:443             Route   1      0          0-> 192.168.1.20:443             Route   1      0          0

(4)测试错误结果

2.4.2 解决方法

(1)先把原来的策略删除

[root@lvs ~]# ipvsadm -C# 查看策略,此时为空
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

(2)在lvs调度器中配置防火墙标记,人为设定80和443是一个整体

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.1.220 -p tcp -m multiport --dports 80,443 -j MARK  --set-mark 66# 查看结果
[root@lvs ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       tcp  --  0.0.0.0/0            192.168.1.220        multiport dports 80,443 MARK set 0x42Chain INPUT (policy ACCEPT)
target     prot opt source               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destinationChain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

(3)重新配置调度策略

[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.1.10 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.1.20 -g[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr-> 192.168.1.10:0               Route   1      0          0-> 192.168.1.20:0               Route   1      0          0

 (4)客户端访问测试

可以看到,问题解决

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915583.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915583.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915583.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芋道导入逻辑

一、代码 PostMapping("/import")Operation(summary "导入用户")Parameters({Parameter(name "file", description "Excel 文件", required true),Parameter(name "updateSupport", description "是否支持更新&a…

gradle7.6.1+springboot3.2.4创建微服务工程

目录 一、创建主工程cloud-demo并删除src目录 二、创建子工程user-service/order-service 三、更改父工程build.gradle文件 四、子工程使用mybatis框架 五、子工程使用mybatis-plus框架 六、相关数据库创建 七、最终目录结构 一、创建主工程cloud-demo并删除src目录 二、…

电脑windows系统深度维护指南

&#x1f5a5;️ 电脑系统全方位维护指南 预防故障 提升性能 延长寿命 &#x1f50d; 引言&#xff1a;为什么需要系统维护&#xff1f; 电脑如同汽车&#xff0c;定期保养可避免&#xff1a; ✅ 突发蓝屏死机 ✅ 系统卡顿崩溃 ✅ 硬件过早损坏 ✅ 数据丢失风险 本指南提供…

字节内部流传的数据分析手册

之前2领导整理内部分享的&#xff0c;所以很多内部业务的分析&#xff0c;比如工作中怎么落地、怎么推进。(数据都是脱敏的哈) **里面的内容都偏应用&#xff0c;比如产品迭代怎么做数据评估、用户增长靠什么指标拆解、AB实验怎么设计、运营活动怎么闭环。**数据分析都是很实际…

Nginx Proxy Manager + LB + Openappsec + Web UI 构建下一代WAF

Nginx Proxy Manager + LB + Openappsec + Web UI部署 一、环境介绍 二、系统参数优化 三、安装docker 四、创建docker网络 五、创建测试容器 六、部署NPM和openappsec 1、下载docker-compose文件 2、拉取相关镜像 3、web UI 获取token 4、修改compose文件并安装 七、登陆NPM配…

【React】npm install报错npm : 无法加载文件 D:\APP\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

使用vsCode打开react项目安装依赖时报错&#xff0c;把terminal打开的powershell改成command prompt即可

深入解析C#装箱转换:值类型如何“变身”为引用类型?

当你将 int i 赋值给 object oi 时&#xff0c; 看似简单的操作背后&#xff0c;藏着一场精密的类型转换革命&#xff01;&#x1f511; 一、核心概念&#xff1a;什么是装箱&#xff1f; 装箱&#xff08;Boxing&#xff09; 是C#中的一种隐式转换机制&#xff0c;它将值类型&…

java list 与set 集合的迭代器在进行元素操作时出现数据混乱问题及原因

为什么 List 和 Set 迭代器删除结果不同&#xff1f;1. List 和 Set 的本质差异List&#xff08;如 ArrayList&#xff09;&#xff1a;有序集合&#xff0c;元素按插入顺序存储&#xff0c;允许重复元素。迭代器遍历时&#xff0c;元素按索引顺序返回。删除操作&#xff08;通…

大语言模型:人像摄影的“达芬奇转世”?——从算法解析到光影重塑的智能摄影革命

导言在摄影术诞生之初&#xff0c;达芬奇或许无法想象&#xff0c;他对于光影、比例和解剖的严谨研究&#xff0c;会在数百年后以另一种形式重生。今天&#xff0c;当摄影师面对复杂的光线环境或苦苦寻找最佳构图时&#xff0c;一位由代码构筑的“光影军师”正悄然降临——大语…

Java——MyBatis从入门到精通:一站式学习指南

MyBatis从入门到精通&#xff1a;一站式学习指南 作为一款优秀的半自动ORM框架&#xff0c;MyBatis以其灵活的SQL控制和简洁的配置方式&#xff0c;成为Java后端开发中持久层框架的首选。本文将从基础概念到高级特性&#xff0c;全面讲解MyBatis的使用方法&#xff0c;包含实用…

面试150 添加与搜索单词--数据结构设计

思路 通过哈希法去实现&#xff0c;这里主要描述search的思路&#xff1a;如果’.‘不在word中&#xff0c;我们只需要去查询word在不在set中。如果’.‘存在&#xff0c;我们对哈希中的字符串进行遍历w&#xff0c;如果当前字符串的长度不等于word跳过,对word进行遍历&#xf…

学习打卡网站(搭子版本)

概述 之前用了网上的一些学习打卡类app&#xff0c;基本都是收费的&#xff0c;而且有些自己想要的功能却没有&#xff0c;甚至还有广告&#xff0c;正好暑假是个需要容易懒惰的时间&#xff0c;所以干脆自己做了一个能和学习搭子一起记录计划的小网站。 昨天早上开始写&#x…

分享如何在Window系统的云服务器上部署网站及域名解析+SSL

最近看到阿里云的服务器有个199的活动&#xff0c;买了个2核4G带宽5M的服务器&#xff0c;用于小网站的运营也足够&#xff0c;于是就买一个&#xff0c;并且我还挑了个新加坡的站点&#xff0c;本想着运营独立站&#xff0c;用新加坡的站点外网访问会更友好一点。于是问题就来…

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡我们蜻蜓hr系统采用的后端框架就是fastadmin&#xff0c;因此我们平稳迁移以此为例&#xff0c;为什么要迁移一份是因为有甲方需要。迁移FastAdmin系统到新服务器需要确保数据完整性和系统功能正常。以下是…

Request和Response相关介绍

Request 和 Response 是什么&#xff1f; Request&#xff08;请求对象&#xff09;&#xff1a;用来接收浏览器发过来的数据。 Response&#xff08;响应对象&#xff09;&#xff1a;用来把服务器处理后的结果返回给浏览器。 1. request 的作用&#xff08;获取请求数据&am…

Springboot 实现热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署&#xff0c;提高开发者的开发效率&#xff0c;无需手动重启Spring Boot应用。引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虚拟机扩展磁盘容量后扩展分区大小

1. 首先检查磁盘剩余空间sudo fdisk -l /dev/sda2. 如果有未分配空间&#xff0c;直接扩展分区sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次写入d # 删除分区 3 # 例如选择分区3&#xff08;/dev/sda3&#xff09; n # 新建分区 p # 主分区 3 # 分区号3 # 起始扇…

元宇宙与游戏:虚实交融的数字文明新纪元

引言&#xff1a;当游戏遇见元宇宙在纽约现代艺术博物馆&#xff08;MoMA&#xff09;的"虚拟世界"特展中&#xff0c;一幅数字艺术作品《元宇宙诞生》引发观展热潮。这幅由AI与人类艺术家共同创作的作品&#xff0c;描绘了游戏《堡垒之夜》的虚拟演唱会与现实世界交…

音视频学习(四十二):H264帧间压缩技术

必要性与优势 原始数字视频数据量庞大&#xff0c;未经压缩的视频难以有效传输和存储。例如&#xff0c;一个 1080p、30fps 的无压缩视频&#xff0c;每秒数据量可达数百兆比特。视频压缩的目标是在保证视觉质量的前提下&#xff0c;最大限度地减少数据冗余。视频数据中存在多种…

微服务雪崩防护最佳实践之sentinel

思考1、当服务访问量达到一定程度&#xff0c;流量扛不住的时候&#xff0c;该如何处理&#xff1f;2、服务之间相互依赖&#xff0c;当服务A出现响应时间过长&#xff0c;影响到服务B的响应&#xff0c;进而产生连锁反应&#xff0c;直至影响整个依赖链上的所有服务&#xff0…