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笔记了,这篇比较偏理论&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...