Linux 虚拟服务器(LVS)技术详解
一、LVS 概述
Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真实服务器(Real Server)组成一个虚拟的服务器池,通过调度算法将客户端的请求分发到不同的真实服务器上进行处理,从而实现负载均衡和高可用性。
LVS 具有以下特点:
- 高性能:工作在内核空间,具有极高的性能和效率,能够处理大量的并发请求。
- 高可用性:通过集群技术,可以实现服务的高可用性,当某个真实服务器出现故障时,LVS 能够自动将请求转发到其他正常的服务器上,保证服务的连续性。
- 可扩展性:可以方便地添加或删除真实服务器,以适应业务量的变化。
- 多种调度算法:提供了多种调度算法,能够根据不同的业务需求选择最合适的调度策略。
- 支持多种协议:不仅支持常见的 TCP、UDP 协议,还支持 HTTP、HTTPS 等应用层协议。
二、LVS 工作原理
LVS 主要由负载调度器(Load Balancer)和真实服务器(Real Server)两部分组成。负载调度器是 LVS 集群的核心,它负责接收客户端的请求,并根据预设的调度算法将请求转发到真实服务器上。真实服务器负责处理客户端的请求,并将处理结果返回给负载调度器,最后由负载调度器将结果返回给客户端。
(一)IPVS 内核模块
LVS 的核心功能是由 IPVS(IP Virtual Server)内核模块实现的。IPVS 在内核空间实现了一个虚拟的网络设备,它可以将多个真实服务器的 IP 地址映射到一个虚拟 IP 地址(Virtual IP Address,简称 VIP)上。当客户端发送请求到 VIP 时,IPVS 会根据预设的调度算法选择一台真实服务器,并将请求转发到该服务器上。VIP是专门用于负载均衡的虚拟IP地址,它并不与任何物理网络接口直接关联
(二)调度算法
LVS 提供了多种调度算法,常用的调度算法包括:
- 轮询(Round Robin,RR):将请求依次轮流分配到每个真实服务器上,适用于所有真实服务器性能相同的场景。
- 加权轮询(Weighted Round Robin,WRR):为每个真实服务器设置一个权重,权重越高的服务器被分配到的请求越多,适用于真实服务器性能不同的场景。
- 最少连接(Least Connections,LC):将请求分配给当前连接数最少的真实服务器,适用于每个请求处理时间不同的场景。
- 加权最少连接(Weighted Least Connections,WLC):结合了权重和最少连接的算法,根据真实服务器的权重和当前连接数来分配请求。
- 基于局部性的最少连接(Locality-Based Least Connections,LBLC):适用于请求具有局部性的场景,如缓存服务器集群,优先将请求分配到已经处理过相同内容的真实服务器上。
三、LVS 工作模式
LVS 支持三种工作模式:NAT 模式、DR 模式和 TUN 模式,每种模式都有其特点和适用场景。
(一)NAT 模式(Network Address Translation)
在 NAT 模式下,负载调度器作为所有客户端和真实服务器的网关,所有的请求和响应都需要经过负载调度器进行转发。负载调度器会修改请求数据包的目标 IP 地址和响应数据包的源 IP 地址,实现数据包的转发。
NAT 模式的优点是配置简单,适用于小型集群环境。缺点是负载调度器的性能瓶颈较大,所有的流量都需要经过负载调度器,当并发请求量较大时,可能会成为整个系统的性能瓶颈。
(二)DR 模式(Direct Routing)
在 DR 模式下,负载调度器和真实服务器都绑定同一个 VIP,但负载调度器和真实服务器位于同一个物理网络中。负载调度器只负责将请求的 MAC 地址修改为目标真实服务器的 MAC 地址,然后将请求发送到真实服务器上。真实服务器直接将响应数据包返回给客户端,不需要经过负载调度器。
DR 模式的优点是性能高,因为响应数据包不需要经过负载调度器,减轻了负载调度器的压力。缺点是配置相对复杂,需要真实服务器支持直接路由,并且所有的真实服务器必须位于同一个物理网络中。
- DR 模式依赖二层通信:LVS DR 模式依赖于二层网络进行数据包转发,要求调度器和真实服务器在同一广播域内,因此 VIP 和内网 IP 需要在同一网段,以确保二层通信的顺畅和 ARP 协议的正常工作。
- NAT 模式基于地址转换:NAT 模式通过 IP 地址转换来实现内外网络的通信,不依赖于二层通信和同一网段的要求。它可以在不同网段之间建立连接,只要 NAT 设备正确配置了地址转换规则,就可以实现数据包的正确转发。
(三)TUN 模式(IP Tunneling)
在 TUN 模式下,负载调度器将请求数据包封装在一个新的 IP 数据包中,然后发送到真实服务器上。真实服务器接收到数据包后,解封装并处理请求,最后将响应数据包直接返回给客户端。
TUN 模式的优点是可以跨广域网部署,适用于大规模集群环境。缺点是配置复杂,需要真实服务器支持 IP 隧道技术,并且对网络带宽的要求较高。
四、LVS 配置与管理
(一)安装 ipvsadm 工具
ipvsadm 是用于管理 LVS 规则的工具,通过它可以添加、删除和查看 LVS 规则。在大多数 Linux 发行版中,可以使用包管理器安装 ipvsadm。例如,在 CentOS 系统中,可以使用以下命令安装:
sudo yum install ipvsadm
(二)配置 LVS 规则
以 NAT 模式为例,配置 LVS 规则的步骤如下:
- 配置负载调度器
- 启用 IP 转发功能:编辑
/etc/sysctl.conf
文件,将net.ipv4.ip_forward
设置为 1,然后执行sysctl -p
使配置生效。 - 添加 LVS 规则:使用 ipvsadm 命令添加 LVS 规则,例如:
- 启用 IP 转发功能:编辑
# 添加虚拟服务器,监听 80 端口
sudo ipvsadm -A -t 192.168.0.100:80 -s wrr
sudo ipvsadm -a -t 192.168.0.100:80 -r 192.168.1.101:80 -m -w 1
sudo ipvsadm -a -t 192.168.0.100:80 -r 192.168.1.102:80 -m -w 2
- 配置真实服务器
- 配置默认网关为负载调度器的 IP 地址。
(三)管理 LVS 规则
可以使用 ipvsadm 命令管理 LVS 规则,例如:
# 查看 LVS 规则
sudo ipvsadm -L -n
# 删除虚拟服务器
sudo ipvsadm -D -t 192.168.1.100:80
# 删除真实服务器
sudo ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.101:80
五、LVS 的应用场景
LVS 广泛应用于各种需要高可用性和可扩展性的网络服务中,常见的应用场景包括:
- Web 服务:将多个 Web 服务器组成一个集群,通过 LVS 实现负载均衡,提高 Web 服务的性能和可用性。
- 数据库服务:对于读写分离的数据库架构,可以使用 LVS 将读请求分发到多个只读数据库服务器上,提高数据库的读取性能。
- 流媒体服务:将多个流媒体服务器组成一个集群,通过 LVS 实现负载均衡,支持大量用户同时观看流媒体内容。
- 游戏服务器:在游戏服务器集群中,使用 LVS 实现负载均衡,确保玩家能够快速、稳定地连接到游戏服务器。
六、总结
Linux 虚拟服务器(LVS)是一种强大的服务器集群技术,它为构建高可用、可扩展的网络服务提供了一种高效的解决方案。通过合理配置 LVS 的工作模式和调度算法,可以满足不同业务场景的需求。虽然 LVS 的配置和管理相对复杂,但一旦配置完成,它能够为企业提供稳定、可靠的网络服务。随着云计算和大数据技术的发展,LVS 在构建大规模分布式系统中发挥着越来越重要的作用。
相关文章:
Linux 虚拟服务器(LVS)技术详解
一、LVS 概述 Linux 虚拟服务器(Linux Virtual Server,简称 LVS)是由章文嵩博士开发的一种开源的服务器集群技术,它工作在 Linux 内核空间,为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...

AIoT时代来临,物联网技术如何颠覆未来生活?
在这个万物互联的时代,“物联网”(IoT)正以前所未有的速度改变我们的生活,而“AIoT”则是在物联网基础上融入人工智能技术,赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展,物联网正…...
C++17 新特性解析
C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...
嵌入式软件C语言面试常见问题及答案解析(四)
嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...
在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择
读取 Excel 文件的库 NPOI 用途:可以读取和写入 .xls 和 .xlsx 文件。特点:无需安装 Microsoft Office,支持简单的 Excel 操作,如格式化、公式、图表等。 EPPlus 用途:主要用于 .xlsx 格式(Excel 2007 及以…...

绩效归因概述
绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...
Spring Boot 中加载多个 YAML 配置文件
在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求,通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤,用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...
厚植创新实力、聚焦生物科技:柏强制药的责任与机遇
在当今快速发展的医药行业中,创新已成为企业竞争的核心动力。贵州柏强制药作为医药领域的佼佼者,正以科技创新为引领,聚焦生物科技领域,不断突破,不仅为人民的健康事业贡献力量,更在激烈的市场竞争中抓住了…...
Linux中getifaddrs函数
文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...

【HarmonyOS Next 自定义可拖拽image】
效果图: 代码: import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…...
解决No module named ‘llama_index.llms.huggingface‘
执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报错No module named llama_index.llms.huggingface’执行下面的脚本,报…...

SearchBar组件的功能与用法
文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容,本章回中将介绍SearchBar组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...
13.推荐系统的性能优化
接下来我们将学习推荐系统的性能优化。推荐系统的性能优化对于提升推荐结果的生成速度和系统的可扩展性至关重要,尤其是在处理大规模数据和高并发请求时。在这一课中,我们将介绍以下内容: 性能优化的重要性常见的性能优化方法实践示例 1. 性…...

Grafana-使用Button修改MySQL数据库
背景 众所周知,Grafana是一个用来展示数据的平台,但是有时候还是会有需求说能不能有一个按钮,点击的时候再对数据库进行修改,从而达到更新数据的效果 经过多方查证,终于实现了一个简单的,点击button执行sq…...
飞科FH6218电吹风异响维修
前言 本文仅记录一次普通的维修经历,解决方案也都是从网上查找资料得来,仅供参考,如有不对请指出,谢谢! 现象 使用时出现异响,风速越大越响 参考视频 https://www.bilibili.com/video/BV1dD4y1x7hH/?…...

分治下的快速排序(典型算法思想)—— OJ例题算法解析思路
目录 一、75. 颜色分类 - 力扣(LeetCode) 运行代码: 一、算法核心思想 二、指针语义与分区逻辑 三、操作流程详解 四、数学正确性证明 五、实例推演(数组[2,0,2,1,1,0]) 六、工程实践优势 七、对比传统实现 八、潜在问题与解决方案 九、性能测试数据 十、扩展…...

Unity3D实现显示模型线框(shader)
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...

深度剖析责任链模式
一、责任链模式的本质:灵活可扩展的流水线处理 责任链模式(Chain of Responsibility Pattern)是行为型设计模式的代表,其核心思想是将请求的发送者与接收者解耦,允许多个对象都有机会处理请求。这种模式完美解决了以下…...

基于 openEuler 构建 LVS-DR 群集
一、 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。 二、 基于 openEuler 构建 LVS-DR 群集。 一 NAT 模式 部署简单:NAT 模式下,所有的服务器节点只需要连接到同一个局域网内,通过负载均衡器进行网络地址转…...

CSS3+动画
浏览器内核以及其前缀 css标准中各个属性都要经历从草案到推荐的过程,css3中的属性进展都不一样,浏览器厂商在标准尚未明确的情况下提前支持会有风险,浏览器厂商对新属性的支持情况也不同,所有会加厂商前缀加以区分。如果某个属性…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...