Linux lvs负载均衡
LVS 介绍:
Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可靠性。
LVS的核心组件:
- IPVS(IP Virtual Server):IPVS是LVS的核心模块,它实现了负载均衡的功能。IPVS模块通过拦截传入的流量并进行调度,将请求分发给后端的实际服务器。它存储和管理负载均衡配置,并在内核空间进行数据包的转发。
-
负载均衡器 LB(Load Balancer):负载均衡器是LVS的中心组件,它是位于客户端和后端服务器之间的设备或软件。负载均衡器接收客户端请求,并根据配置的负载均衡策略将请求转发给后端服务器,以实现负载分发和高可用性。
- 后端服务器 RS(Real Server):后端服务器是LVS集群中实际处理客户端请求的服务器节点。它们分担负载并提供服务响应。
-
负载均衡调度算法:LVS支持多种负载均衡调度算法,用于确定请求应该转发到哪个后端服务器上。常见的调度算法包括轮询(Round Robin)、最少连接(Least Connection)、源地址哈希(Source IP Hash)等。通过选择适当的调度算法,可以根据应用需求在后端服务器之间平衡负载。
LVS的工作原理:
-
客户端发送请求:
客户端向LVS负载均衡器发送请求,请求的目标是负载均衡器的虚拟IP(Virtual IP)地址。 -
负载均衡器接收请求:
负载均衡器接收到来自客户端的请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。 -
负载均衡算法选择后端服务器:
LVS支持多种负载均衡调度算法,例如轮询(Round Robin)、最少连接(Least Connection)、源地址哈希(Source IP Hash)等。根据指定的算法,负载均衡器将请求转发给一个后端服务器。选择后端服务器时考虑服务器的负载情况、可用性和性能指标。 -
请求转发到后端服务器:
负载均衡器将客户端请求转发给选定的后端服务器。根据配置的调度算法,请求可能会被平均地分发到多个后端服务器上,从而实现负载均衡。 -
后端服务器处理请求:
后端服务器接收到来自负载均衡器的请求,并处理该请求。后端服务器执行请求所需的任务,并生成响应。 -
响应返回至客户端:
后端服务器生成的响应流量经过负载均衡器,负载均衡器会将响应的目标地址重写为自己的地址,并将响应返回给客户端。 -
会话保持(可选):
为了保持会话的连贯性,LVS可通过会话保持功能使来自同一客户端的请求始终被分发到同一后端服务器上。这可以通过IP地址、Cookie等方式实现。
LVS负载均衡方式:
- NAT(Network Address Translation)方式:负载均衡器位于前端与客户端之间,调度器将客户端请求的源IP地址和端口转换为自己的IP地址和端口,并将请求转发到后端服务器。后端服务器的响应经过调度器再转发回客户端。
- DR(Direct Routing)方式:负载均衡器位于前端与后端服务器之间,不会修改流量的目标地址。调度器将客户端请求的目标IP地址和端口保持不变,直接将请求转发到后端服务器。后端服务器的响应不经过调度器,直接返回给客户端。
- TUN(IP Tunneling)方式:类似于DR方式,负载均衡器位于前端与后端服务器之间,并使用IP隧道将请求从客户端传递到后端服务器。负载均衡器将请求封装在一个新的IP包中,并将其发送到目标后端服务器上。后端服务器接收到请求后,解析IP隧道并响应客户端。也就是通过创建虚拟设备将数据包从调度器转发到后端服务器。
LVS名词解释:
- VS:Virtual Server 虚拟服务器,通常是分发器,负载均衡集群对外提供的IP+Por
- RS:Real Server 实际提供服务的真实服务器,可被DS划分到一个或多个负载均衡组.
-
DS:Director Server 负载均衡器,将流量分发到后端的真实服务器上.
-
BDS:Backup Director Server,为了保证负载均衡器的高可用衍生出的备份.
- CIP:Client IP 客户的客户端IP。
- VIP:Virtual Server IP,VS的IP。client请求服务的DIP(destination IP address),定义在DS上,client或其网关需要有其路由
- DIP:Director IP 分发器的IP
- RIP:Real Server IP 真实服务器的IP
CIP <–> VIP == DIP <–> RIP 客户端访问VIP,DIP将请求转发到RIP
1、NAT(Network Address Translation):
NAT 是通过网络地址转换的方法来实现调度的。
-
客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。
-
负载均衡器接收请求:负载均衡器接收到来自客户端的请求,该请求VIP和CIP。
-
NAT转换:NAT模式下,负载均衡器会将请求包的VIP进行NAT转换,将其替换为负载均衡器的RIP。这样,在后续的网络通信中,响应流量将通过负载均衡器经过NAT转换返回给客户端。
-
负载均衡算法选择后端服务器:LVS负载均衡器根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。
-
请求转发到后端服务器:负载均衡器将经过NAT转换后的请求转发给选定的后端服务器。后端服务器接收到请求后,将其视为来自负载均衡器的请求。
-
后端服务器处理请求, 并生成响应
-
响应返回至客户端:响应经过负载均衡器,负载均衡器进行NAT转换将响应的RIP替换为VIP,然后将响应返回给客户端。
2、DR(Direct Routing):
DR通过修改目标MAC地址来实现调度。DR 模式中,input经过DR,output不经过DR。为了响应对整个群集的访问,DS与RS都需要配置有VIP地址, 且DS与RS要处在同一网段。

-
客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。
-
负载均衡器接收请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。
-
负载均衡器修改目标MAC地址:在DR模式下,负载均衡器会修改请求数据包的目标MAC地址为所选后端服务器的MAC地址,并将数据包转发给后端服务器。这样,数据包越过负载均衡器,直接到达后端服务器。
-
后端服务器接收到来自负载均衡器的请求,并进行相应的处理和计算。
-
后端服务器生成响应,并将响应发送回客户端。在DR模式下,响应数据包将直接发送到客户端,绕过负载均衡器。
3、TUN(IP Tunneling):
在DR方式下,DS只修改数据包中数据链路层的MAC信息,IP信息不修改。于是DS通过MAC来定位RS,由此限制了DS和RS要处于同一网段。那么如果DS可以不通过MAC就可以定位到RS的话,也就不用限制RS和DS处于同一网段了。
TUN模式下,负载均衡器通过建立IP隧道,将请求和响应数据通过隧道在负载均衡器和后端服务器之间进行传输。IP隧道可以理解为IP in IP, 即发送方在IP头的外部再包装一个IP头,接收方先解出第一层IP头,然后再按照正常流程处理剩下的的IP数据包。
- 客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。
-
负载均衡器接收请求:负载均衡器接收到来自客户端的请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。
- 负载均衡器建立隧道:在TUN模式下,负载均衡器会与所选后端服务器建立一个IP隧道,以便在负载均衡器和后端服务器之间传输请求和响应数据。
-
负载均衡器转发请求:负载均衡器将来自客户端的请求打包,并通过隧道发送给后端服务器。
-
RS发现请求报文的IP地址是自己的eth0的IP地址,就剥掉IP隧道包头。
-
RS处理请求,生成响应,并将响应通过隧道发送回客户端。
LVS架构可以提供高性能和高可用性的负载均衡解决方案。通过将客户端请求分发到后端服务器上的多个节点,可以平衡系统负载并提供故障容错能力。同时,LVS具有开源、灵活和可定制的特点,可以根据实际需求进行配置和扩展。
需要注意的是,LVS只提供负载均衡功能,并不处理应用层的逻辑。应用层的会话维护、数据同步等需要通过其他方式来实现,如使用Session Persistence和数据库复制等。
LVS NAT模式配置:
环境说明:
| 主机名称 | 网卡信息(ens160为nat、ens192为仅主机) | 安装应用 | 系统 |
|---|---|---|---|
| Client客户端 | 192.168.100.200(ens160) | 无 | RHEL8 |
| DS | DIP:192.168.253.142(ens160)–VIP:192.168.227.128(ens224) | ipvsadm | RHEL8 |
| RS1 | RIP:192.168.253.143(ens160)–192.168.253.142 | httpd | RHEL8 |
| RS2 | RIP:192.168.253.144(ens160)–192.168.253.142 | httpd | RHEL8 |
1、DR、RS1、RS2三台主机都关闭防火墙和selinux
DS:
[root@DS ~]# systemctl stop firewalld
[root@DS ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# vim /etc/sysconfig/selinux
SELINUX=disabledRS1
[root@RS1 ~]# systemctl stop firewalld
[root@RS1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# vi /etc/sysconfig/selinux
SELINUX=disabledRS2
[root@RS2 ~]# systemctl stop firewalld
[root@RS2 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# vi /etc/sysconfig/selinux
SELINUX=disabled
2、配置IP信息
DS:添加ens224网卡信息
[root@DR ~]# nmcli connection add con-name ens224 ifname ens224 type ethernet
Connection 'ens224' (922bcff0-35fd-43c2-a608-edb0d58ccec3) successfully added.
[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.142
PREFIX=24
DNS1=8.8.8.8
[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens224
IPADDR=182.168.227.128
PREFIX=24
DNS1=8.8.8.8
[root@DR ~]# systemctl restart NetworkManager
[root@DR ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@DR ~]# nmcli connection up ens224
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
RS1:
[root@RS1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.143
PREFIX=24
GATEWAY=192.168.253.142
DNS1=8.8.8.8
[root@RS1 ~]# systemctl restart NetworkManager
[root@RS1 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
RS2:
[root@RS2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.144
PREFIX=24
GATEWAY=192.168.253.142
DNS1=8.8.8.8
[root@RS2 ~]# systemctl restart NetworkManager
[root@RS2 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
3、后端RS1和RS2部署WEB服务器
[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# echo RS1 > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# echo RS2 > /var/www/html/index.html
[root@RS2 ~]# systemctl restart httpd
[root@RS2 ~]# systemctl enable httpd
4、配置DS
4.1、开启IP转发功能
[root@DR ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1
4.2、安装ipvsadm并添加规则
[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.227.128:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.227.128:80 -r 192.168.253.143:80 -m
[root@DR ~]# ipvsadm -a -t 192.168.227.128:80 -r 192.168.253.144:80 -m
[root@DR ~]# 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.227.128:80 rr-> 192.168.253.143:80 Masq 1 0 0 -> 192.168.253.144:80 Masq 1 0 0
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service
[root@DR ~]# systemctl enable ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
5、客户端测试:
[root@RS3 ~]# curl http://192.168.227.128
RS2
[root@RS3 ~]# curl http://192.168.227.128
RS1
[root@RS3 ~]# curl http://192.168.227.128
RS2
[root@RS3 ~]# curl http://192.168.227.128
RS1
配置信息转载自: LVS 教程
相关文章:
Linux lvs负载均衡
LVS 介绍: Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可…...
Tomcat 创建https
打开CMD,按下列输入 keytool -genkeypair -alias www.bo.org -keyalg RSA -keystore d:\ambition.keystore -storetype pkcs12 输入密钥库口令:123456 再次输入新口令:123456 您的名字与姓氏是什么? [Unknown]: www.ambition.com 您的组织单位名称是什么? [Unknown…...
超导电性的基本现象和相关理论
超导体 Hg 超导电性的基本现象和相关理论 超导体的基本特性 低温零电阻突变(< 10^{-23 \Omega/m}) 良导体在 10^{-10} \Omega/m临界温度迈斯纳效应 完全排磁通效应(完全抗磁性) 超导体物体内部不存在电场 第一类超导体与第二类…...
在 PHP 中单引号(‘ ‘)和双引号(“ “)用法的区别
在 PHP 中,使用单引号( )和双引号(" ")可以创建字符串。这两种引号的用法有一些区别。 单引号: 单引号用于创建简单的字符串,其中的变量和转义字符将不会被解析。单引号中的任何内容…...
SpringCloudAlibaba:服务网关之Gateway的cors跨域问题
目录 一:解决问题 二:什么是跨域 三:cors跨域是什么? 一:解决问题 遇到错误: 前端请求时报错 解决: 网关中添加配置文件,注意springboot版本,添加配置。 springboo…...
react中的高阶组件理解与使用
一、什么是高阶组件? 其实就是一个函数,参数是一个组件,经过这个函数的处理返回一个功能增加的组件。 二、代码中如何使用 1,高级组件headerHoc 2,在普通组件header中引入高阶组件并导出高阶组件,参数是普…...
“从零开始学习Spring Boot:构建高效的Java应用程序“
标题:从零开始学习Spring Boot:构建高效的Java应用程序 摘要:本篇博客将带你从零开始学习如何使用Spring Boot构建高效的Java应用程序。我们将讨论Spring Boot的基本概念和特性,并提供一个简单的示例代码来帮助你入门。 正文&am…...
容器部署jenkins定时构建于本地时间不一致
1. Dockerfile FROM jenkins/jenkins:2.411-jdk11 USER root #以下生成密钥方式为旧格式,因为新格式暂不能被"Publish over SSH--->Jenkins SSH Key"功能识别 RUN ssh-keygen -q -m PEM -t rsa -b 2048 -N -f /root/.ssh/id_rsa ADD ./apache-maven…...
生成指定网段的IP字典自动化脚本
目录 1.前言 2.生成指定网段的IP字典自动化脚本 1.前言 在可回显的服务端跨站请求伪造(SSRF)漏洞中,我们通常会利用该漏洞进行内网资产探测。最近正好碰到了。写了一个小脚本。 2.生成指定网段的IP字典自动化脚本 脚本可指定协议、IP段、和端口生成字典。 get-Intranet-A…...
Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单 em
 Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个&…...
《向量数据库指南》——大模型时代,为什么向量数据库成为标配?
目录 1. 数据持久化和低成本存储 2. 高性能查询 3. 数据分布 4. 易于使用 5. 稳定可用 6. 可运维可观测 7. 智能化 1. 数据持久化和低成本存储 许多单机和轻量级的向量数据库并没有关注数据的可靠性,Milvus Cloud 基于对象存储和消息队列的存储方案既通过存储计算分离…...
Pytorch个人学习记录总结 10
目录 优化器 优化器 官方文档地址:torch.optimhttps://pytorch.org/docs/stable/optim.html Debug过程中查看的grad所在的位置: model --> Protected Atributes --> _modules --> ‘model’ --> Protected Atributes --> _modules -…...
18款奔驰S320升级后排座椅加热功能,提升后排乘坐舒适性
奔驰座椅加热就简单多了,是在原车座椅海绵表面安装一层加热垫,加热垫里面是加热丝,通过电机热的原理,快速升温,把热量传递给车主。 奔驰的座椅加热系统是通过车门按键来控制,3档调节,温度从低到…...
Vue中的插值表达式
Vue中的插值表达式(Interpolation)用于将数据动态绑定到HTML模板中。它的主要作用是在模板中直接显示变量的值,并实现数据的双向绑定。以下是插值表达式的一些作用: 1.变量展示:插值表达式允许将Vue实例中的数据直接显…...
背包问题(模板)
目录 01背包: 完全背包: 多重背包(范围0-100): 混合背包: 分组背包: 二维费用的背包问题: 背包问题求方案数: 01背包: 从最大容量开始遍历到当前&…...
docker容器创建私有仓库(第三篇)
目录 六、创建私有仓库 七、Docker资源限制 7.1、CPU使用率 7.2、CPU共享比例 7.3、CPU周期限制 7.4、CPU核心限制 7.5、CPU 配额控制参数的混合案例 7.6、内存限制 7.7、Block IO 的限制 7.8、限制bps 和iops 8、Docker数据持久化 8.1、数据持久化介绍 8.2、Volum…...
Eureka 学习笔记4:客户端 DiscoveryClient
版本 awsVersion ‘1.11.277’ DiscoveryClient # cacheRefreshTask // 配置shouldFetchRegistry if (clientConfig.shouldFetchRegistry()) {// 配置client.refresh.intervalint registryFetchIntervalSeconds clientConfig.getRegistryFetchIntervalSeconds();// 配置expB…...
【方法】PDF可以转换成Word文档吗?如何操作?
很多人喜欢在工作中使用PDF,因为PDF格式可以准确地保留文档的原始格式,比如字体、图像、布局和颜色等。 但如果编辑文档的话,PDF还是没有Word文档方便。那可以将PDF转换成Word格式,再来编辑吗?如何操作呢?…...
AlphaControls crack
AlphaControls crack AlphaControls-一组通用和一些独特的组件,支持皮肤(AlphaSkins),并具有一些附加功能。所有皮肤元素都可以有自己的属性,用于高级绘制渐变、逼真的框架、半透明和模糊的阴影。图形功能实时生成所有计算和绘图。添加了用于…...
论文笔记——Influence Maximization in Undirected Networks
Influence Maximization in Undirected Networks ContributionMotivationPreliminariesNotations Main resultsReduction to Balanced Optimal InstancesProving Theorem 3.1 for Balanced Optimal Instances Contribution 好久没发paper笔记了,这篇比较偏理论&…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
