LVS(Linux Virtual Server)负载均衡详解
一、LVS简介与集群概念
1. LVS(Linux Virtual Server)
即Linux虚拟服务器,是一个高性能、高可用的服务器集群解决方案,现已集成至Linux内核中。它通过IP虚拟化技术通过将网络流量分散到多个服务器上,从而提高网络服务的可用性和扩展性,实现数据请求的负载均衡调度,广泛应用于需要大量并发处理能力的场景。
2. 集群
1. 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用HA),使得任何一个机器坏了整个系统还是能正常运行。
2、负载均衡集群技术
负载均衡(Load Balance):负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。
负载通常包括应用程序处理负载和网络流量负载,每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。
二、LVS的三种工作模式
1. NAT模式(Network Address Translation,网络地址转换)
原理:
NAT模式使用Linux的网络地址转换功能,将进入的IP数据包的源地址转换为虚拟服务器的地址,然后根据预设的调度算法将请求分发到后端的真实服务器。真实服务器处理完请求后,直接将响应数据包发送回客户端,无需再次经过LVS。
特点:
所有流量都经过LVS,因此LVS成为潜在的瓶颈。
适用于内部网络结构,安全性较高。
配置要点:
LVS需要至少两块网卡,一块用于内部网络通信,另一块用于外部网络通信。
需要配置iptables规则来进行地址转换。
示例命令
ipvsadm -A -t <VIP>:80 -s rr
ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -m
2. DR模式(Direct Routing,直接路由)
原理:
在DR模式下,LVS和所有真实服务器共享同一个虚拟IP(VIP)。LVS仅处理入站请求,并将它们分发到后端的真实服务器。真实服务器处理请求后,直接将响应发送回客户端,绕过LVS。
特点:
减少了LVS的负载,因为它不处理出站流量。
要求LVS和所有真实服务器在同一个物理网络内。
配置要点:
需要配置网络,使得VIP在LVS和所有真实服务器上都能被识别。
需要调整Linux内核参数,以允许真实服务器响应VIP地址的ARP请求。
示例命令:
ipvsadm -A -t <VIP>:80 -s rr -g
ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -g
3. TUN模式(IP Tunneling,IP隧道)
原理:
TUN模式通过创建IP隧道来转发请求。LVS接收到请求后,将其封装在一个新的IP数据包中,然后发送到对应的真实服务器。 真实服务器解封装后处理请求,并将响应直接发送回客户端。
特点:
真实服务器可以分布在不同的地理位置。
所有请求和响应都经过LVS,因此LVS是流量的中心节点。
配置要点:
需要在LVS上配置IP隧道接口。
真实服务器需要支持IP隧道协议。
示例命令:
ipvsadm -A -t <VIP>:80 -s rr -i
ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -i
三、LVS的调度算法
LVS提供了包括轮询(RR)、加权轮询(WRR)、最小连接(LC)、加权最小连接(WLC)等多种调度算法,以适应不同的业务需求。
1. 轮询
(Round Robin, RR)
原理:顺序地将请求分配到每个服务器,类似于排队轮流服务。
适用场景:所有服务器性能相近,需要简单均匀的负载分配。
2. 最少连接
(Least Connections, LC)
原理:将请求分配给当前活跃连接数最少的服务器。
适用场景:服务器性能不一致时,优先分配给较空闲的服务器,以提高效率。
3. 加权最少连接
(Weighted Least Connections, WLC)
原理:考虑服务器的性能差异,给每个服务器分配权重,然后根据权重和当前连接数来分配请求。
适用场景:服务器性能有差异,需要根据性能合理分配负载。
4. 加权轮询
(Weighted Round Robin, WRR)
原理:在轮询的基础上,根据服务器的性能分配不同的权重,权重高的服务器接受更多的请求。
适用场景:需要根据服务器性能进行非均匀的负载分配。
5. 基于局部性最少连接
(Locality-Based Least Connections, LBLC)
原理:尽量将同一目标IP地址的请求分配到同一服务器,提高缓存命中率。
适用场景:适用于缓存集群,目标是提高缓存效率。
6. 带复制的基于局部性最少连接
(Locality-Based Least Connections with Replication, LBLCR)
原理:在LBLC的基础上,维护目标IP地址到一组服务器的映射,以支持复制和负载均衡。
适用场景:适用于需要数据复制的缓存集群。
这些算法中,轮询、最少连接和它们的加权版本是最常用的,因为它们简单、高效,并且适用于大多数场景。特别是当服务器规模较大或服务器性能相近时,这些算法可以提供良好的负载均衡效果。而基于局部性的调度算法则适用于特定的应用场景,如缓存集群。
7. 源地址散列
(Source Hashing, SH)
原理:根据请求的源IP地址进行散列,确保来自同一IP的请求总是被分配到同一个服务器。
适用场景:需要保持客户端IP到服务器的会话持久性时。
8. 目标地址散列
(Destination Hashing, DH)
原理:根据请求的目标IP地址进行散列,以决定请求的目的地。
适用场景:适用于请求按目标地址进行分组的情况。
9. 最短期望延迟
(Shortest Expected Delay, SED)
原理:计算每台服务器的权重和当前连接数的比值,将请求分配给比值最小的服务器。
适用场景:需要考虑服务器当前负载和权重,优化响应时间。
10. 最少队列调度
(Least Queue Length, LQ)
原理:选择当前队列长度最短的服务器,以减少请求等待时间。
适用场景:适用于服务器处理能力相近,但请求量波动较大时。
四、LVS实战部署
实战部署包括环境准备、LVS/DR模式和LVS-NAT模式的配置,以下是具体的实现过程和代码示例。
4.1 命令介绍
#安装LVS软件和管理工具ipvsadm。yum install -y ipvsadm
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量呗转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表--numeric, -n:#以数字形式输出地址和端口号
--exact: #扩展信息,精确值
--connection,-c: #当前IPVS连接输出
--stats: #统计信息
--rate : #输出速率信息参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)
4.2 LVS NAT模式部署
1. 加载IPVS模块并设置为开机自启。
modprobe ip_vs
echo "ip_vs" >> /etc/modules-load.d/ipvs.conf
2. 配置虚拟IP(VIP)并设置网络地址转换。
ip addr add <VIP> dev <interface>
echo 1 > /proc/sys/net/ipv4/ip_forward
3. 使用ipvsadm添加虚拟服务和真实服务器。
ipvsadm -A -t <VIP>:80 -s rr
ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -m -w 1
4.2 LVS DR模式部署
1. 配置共享VIP地址在LVS Director和所有Real Servers上。
2. 设置直接路由模式,允许Real Servers响应VIP地址的ARP请求。
3. 使用ipvsadm添加虚拟服务和真实服务器,与NAT模式类似,但使用`-g`标志表示直接路由。
ipvsadm -A -t <VIP>:80 -s rr
ipvsadm -a -t <VIP>:80 -r <RealServerIP>:80 -g -w 1
总结
LVS作为一种成熟高效的负载均衡解决方案,已经在许多高负载环境中得到应用。通过合理选择工作模式和调度算法,它能够有效提升服务的稳定性和响应速度。随着技术的发展,LVS也在不断地更新和完善,以满足日益增长的网络负载需求。
相关文章:
LVS(Linux Virtual Server)负载均衡详解
一、LVS简介与集群概念 1. LVS(Linux Virtual Server) 即Linux虚拟服务器,是一个高性能、高可用的服务器集群解决方案,现已集成至Linux内核中。它通过IP虚拟化技术通过将网络流量分散到多个服务器上,从而提高网络服务…...

C语言 | Leetcode C语言题解之第329题矩阵中的最长递增路径
题目: 题解: const int dirs[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int rows, columns;typedef struct point {int x, y; } point;int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {if (matrixSize 0 || matrixC…...
rabbitmq学习记录
同步和异步 (1)同步(按照流程一步一步做)使用openfengin传统的交互 响应时间长,需要将每一步的时间加起来。如果一个环境出错了,整个就报错了。并发压力大,前边的步骤有多大的并发量ÿ…...

MySQL数据库基础:约束
💎我的主页:MySQL 💎1. 约束的概述 约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确性,有效性和完整性 💎2. 约束的分类 💎2.1 非空约束 非空…...
Java设计模式和AOP编程
Java 六大设计原则;Java 23种设计模式(在此介绍三种设计模式) Java设计模式 单例模式 应用场景:spring中bean的作用域用的就是单例模式 //基本的单例模式————懒汉式 public class student {//3.创建static修饰的成员变量p…...
【扒代码】data.py
数据增强函数 import torch from torchvision.transforms import functional as TVFdef tiling_augmentation(img, bboxes, density_map, resize, jitter, tile_size, hflip_p):# 定义一个辅助函数,用于根据给定的概率水平翻转张量def apply_hflip(tensor, apply)…...
【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,关于 unity test 测试框架的介绍 2,测试框架关于源码的介绍 3,使用unity test测试C代码 4,常用断言举例 1,关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它…...

那些你应该掌握的linux命令
一、路径授权 要给 a 用户 b 路径的所有操作权限,可以使用以下命令: sudo chown -R a:a /b sudo chmod -R 770 /b1.sudo chown -R a:a /b chown 命令用于更改文件或目录的所有者和所属组。-R 选项表示递归地应用于目录及其内部的所有文件和子目录。a:a 表示将所有…...

系统出现高CPU可能风险因素整理
文章目录 死循环无限递归序列化加解密正则表达式计算密集型任务大流量Full GC资源竞争/死锁I/O阻塞外部接口调用 死循环 死循环是最常见的原因之一。当代码中存在无穷循环(例如在多线程环境下的HashMap线程不安全问题或分页查询条件不明确导致的无限循环࿰…...
前端技术 -- 动画效果之GSAP作用与使用示例
GSAP(GreenSock Animation Platform)简介 GSAP 是一个高性能、跨平台的 JavaScript 动画库,广泛用于网页动画的制作。它提供了丰富的 API,使得开发者可以轻松创建复杂的动画效果,并且在不同浏览器和设备上都能获得一致…...

C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020
添加图片注释,不超过 140 字(可选) 在科技日新月异的今天,我们的电子设备如同生活中的伴侣,无论是工作、学习还是娱乐,都离不开它们的陪伴。随着Type-C接口逐渐成为众多高端智能手机、平板电脑、笔记本电脑…...

CH07_数据绑定
第7章:数据绑定 本章目标 理解路由事件 掌握键盘输入事件 掌握鼠标输入事件 掌握多点触控输入事件 数据绑定概述 什么是数据绑定 将WPF中的至少一个带有依赖项属性的两个对象的两个属性进行绑定,使某一个依赖项属性可以更新和它绑定的属性的功…...

24.python基础(8.8)
python基础 1.搭建环境python3 1.查看是否有安装python [rootpython1 ~]# yum list installed |grep python 2.安装python3 [rootpython1 ~]#yum -y install python3 [rootpython1 ~]#python --version #查看版本信息 最新安装3.12,可以使用源码安装 开…...

【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem
文章目录 摘要一、介绍二、相关工作三、与硬件无关的帕累托效率四、通用倒置瓶颈五、移动MQA六、MNv4模型的设计6.1 为增强的体系结构改进NAS6.2 MNv4模型的优化 7. 结果7.1 ImageNet分类7.2 COCO目标检测 8. 强化蒸馏配方9. 结论 MobileNetV4 - 移动生态系统的通用模型 摘要 …...
大模型日报 2024-08-07
大模型日报 2024-08-07 大模型资讯 [Figure AI 把「终结者」造出来了] 简介:Figure 发布新一代人形机器人 Figure 02,具多种功能,能实时对话、自主执行任务,导航用 VLM,电池续航提升,机械手先进,…...
区块链ddos防护怎么做
区块链ddos防护怎么做?在区块链这一新兴技术的浪潮中,我们见证了无数创新应用的诞生与繁荣。然而,在这片充满机遇的蓝海中,也潜藏着不容忽视的暗流——分布式拒绝服务攻击(DDoS)。DDoS攻击,如同网络世界的…...

在Linux中认识pthread库
int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间,及0号地址,及往虚拟地址的0号地址处写8个字节的数据,全部写为0. (此操作不允许) 进程和线程的关系如…...

LVS 负载均衡
目录 LVS 体系结构 LVS 相关概念术语 lvs 集群常见类型 实验一: LVS NAT模式 LVS NAT特性 实验二: LVS DR模式 LVS DR特性 LVS是Linux virtual server的缩写,是一个高性能的、开源的负载均衡器,它运行于Linux操作系统之上…...

在Excel中启用宏 (~ ̄▽ ̄)~
一、启用宏 打开任意Excel,点击屏幕左上角的文件选项,然后选择Excel选项窗口。在Excel选项窗口中,选择信任中心按钮;在信任中心设置窗口中,选择宏设置,启用所有宏(不推荐,潜在风险&a…...

连接投影仪/显示器只能扩展不能复制的解决方案
原文章:https://iknow.lenovo.com.cn/detail/121481 故障现象: 笔记本外接投影仪/显示器后,笔记本屏幕有显示,但投影仪却只有背景或没有显示; 原因分析: 此现象多发生在双显卡机型上,笔记本屏…...

特别篇-产品经理(三)
一、市场与竞品分析—竞品分析 1. 课后总结 案例框架:通过"小新吃蛋糕"案例展示行业分析方法,包含四个关键步骤: 明确目标行业调研确定竞品分析竞争策略输出结论 1)行业背景分析方法 PEST分析法:从四个…...

Linux系统下安装配置 Nginx
Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖(如未安装) yum groupinstall "Development Tools" -y yum…...

趋势直线指标
趋势直线副图和主图指标,旨在通过技术分析工具帮助交易者识别市场趋势和潜在的买卖点。 副图指标:基于KDJ指标的交易策略 1. RSV值计算: - RSV(未成熟随机值)反映了当前收盘价在过去一段时间内的相对位置。通过计算当前…...
随笔笔记记录5.28
1.setOptMode -opt_leakage_to_dynamic_ratio 调整漏电与动态功耗的优化权重( 1.0 表示仅优化漏电)。 需指定-opt_power_effort(none | low | high),同时使用 2.set_ccopt_property max_source_to_sink_net_length …...

STM32CubeMX定时器配置
STM32CubeMX定时器配置 一,Mode界面1,Slave Mode (从模式)2,Trigger Source (触发源) 三,Channelx(通道模式)1,Input Capture2,Output Compare3,PWM Generation4…...
Metasploit工具使用详解(上)丨小白WEB安全入门笔记
Metasploit工具使用详解(上)丨小白WEB安全入门笔记 一、课程定位与工具概述 课程性质: 小白WEB安全入门课程聚焦基础操作,非深度专题(Metasploit专题可讲数十节课)目标:掌握基本概念和简单漏洞利用 Metasploit核心定…...

【Oracle】DCL语言
个人主页:Guiat 归属专栏:Oracle 文章目录 1. DCL概述1.1 什么是DCL?1.2 DCL的核心功能 2. 用户管理2.1 创建用户2.2 修改用户2.3 删除用户2.4 用户信息查询 3. 权限管理3.1 系统权限3.1.1 授予系统权限3.1.2 撤销系统权限 3.2 对象权限3.2.1…...

【备忘】php命令行异步执行超长时间任务
环境说明: 操作系统:windows10 IDE:phpstorm 开发语言:php7.4 框架:thinkphp5.1 测试环境:linuxwindows均测试通过。 初级方法: function longRunningTask() {$root_path Tools::get_ro…...

Three.js搭建小米SU7三维汽车实战(6)颜色切换
颜色切换 接下来我们来实现懂车帝的颜色切换效果 可以让ai帮我们生成页面结构以及样式,注意changeCarBodyColor这个函数需要我们自己来写 // 创建颜色选择器UI function createColorSelector() {const colors [{ name: "深海蓝", hex: "#1A9CB0&qu…...

720全景展示:VR全景的技术原理及应用
VR720全景展示:技术原理及应用探索 720全景技术,作为当前全球范围内迅速崛起流行的视觉新技术,为用户带来了全新的真实现场感和交互式的体验。凭借全方位、无死角的视觉展示特性,在VR(虚拟现实)领域中得到…...