架构——LVS负载均衡主要模式及其原理、服务水平、优缺点
LVS(Linux Virtual Server)是一款高性能的开源负载均衡软件,支持多种负载均衡模式。以下是其主要模式及其原理、服务水平、优缺点:
1. NAT 模式(Network Address Translation)
原理:
- 请求流程:客户端请求到达负载均衡器(Director),Director 修改目标 IP 和端口为后端真实服务器(Real Server)的地址,转发请求。真实服务器处理完成后,响应数据返回给 Director,Director 再将源 IP 修改为自身的 VIP(Virtual IP)后返回客户端。
- 网络要求:Director 和 Real Server 需在同一个局域网(LAN),Real Server 的默认网关必须指向 Director。
服务水平:
- 适用于中小规模场景,性能受限于 Director 的网络带宽和处理能力(需处理双向流量)。
优点:
- 支持端口映射(如将 80 端口请求转发到后端 8080 端口)。
- 配置简单,兼容性好。
缺点:
- Director 易成为性能瓶颈(需处理所有响应流量)。
- 后端服务器需配置网关指向 Director,扩展性受限。
2. DR 模式(Direct Routing)
原理:
- 请求流程:Director 接收客户端请求后,直接修改目标 MAC 地址为后端 Real Server 的 MAC,将请求转发。Real Server 处理完成后,直接通过自己的网络接口将响应返回给客户端(不经过 Director)。
- 网络要求:Director 和 Real Server 需在同一 LAN,且 Real Server 需配置 VIP(通过 loopback 接口),并禁用 ARP 响应。
服务水平:
- 高性能模式,适用于高并发场景(如大型网站),因响应流量不经过 Director。
优点:
- 性能最优,Director 仅处理入站请求。
- 支持横向扩展,后端服务器数量无严格限制。
缺点:
- 需配置 Real Server 的 ARP 抑制,网络环境要求严格。
- 不支持跨网段(需同一 LAN)。
3. TUN 模式(IP Tunneling)
原理:
- 请求流程:Director 将客户端请求封装为 IP 隧道(如 IPIP 隧道),转发到 Real Server。Real Server 解封装后处理请求,并直接通过隧道外层的源 IP(客户端 IP)返回响应。
- 网络要求:Director 和 Real Server 可跨网段,但需支持 IP 隧道协议。
服务水平:
- 适用于跨机房或异地部署场景,性能略低于 DR 模式(因隧道封装开销)。
优点:
- 支持跨网络部署,扩展性强。
- 响应流量不经过 Director。
缺点:
- 需 Real Server 支持隧道协议(如 Linux 内核需启用 IPIP 模块)。
- 隧道封装增加额外开销,影响性能。
4. FULLNAT 模式(扩展模式,非原生支持)
原理:
- 请求流程:Director 同时修改请求的源 IP(客户端 IP→Director IP)和目标 IP(VIP→Real Server IP)。响应返回时,Director 再将目标 IP 修改为客户端 IP。
- 网络要求:Real Server 无需配置 VIP,支持跨网段部署。
服务水平:
- 适用于复杂网络环境(如云服务器),性能接近 NAT 模式。
优点:
- 后端服务器无需特殊配置,部署灵活。
- 支持跨 VLAN 或跨机房。
缺点:
- Director 仍需处理响应流量,存在性能瓶颈。
- 需要额外内核补丁(如阿里云定制版 LVS)。
模式对比与选型建议
模式 | 性能 | 扩展性 | 网络要求 | 适用场景 |
---|---|---|---|---|
NAT | 低 | 低 | 同 LAN,网关依赖 | 中小规模,简单环境 |
DR | 高 | 高 | 同 LAN,ARP 抑制 | 高并发,数据中心内部 |
TUN | 中 | 高 | 支持隧道,可跨网段 | 跨机房/异地负载均衡 |
FULLNAT | 中 | 中 | 灵活,无特殊要求 | 云环境或复杂网络 |
关键差异对比
模式 | 请求路径 | 响应路径 | 修改内容 |
---|---|---|---|
NAT | 客户端 → Director → Real Server | Real Server → Director → 客户端 | 目标 IP + 源 IP(响应时) |
DR | 客户端 → Director → Real Server | Real Server → 客户端(直连) | 目标 MAC |
TUN | 客户端 → Director → Real Server(隧道) | Real Server → 客户端(隧道外层 IP) | IP 隧道封装/解封装 |
FULLNAT | 客户端 → Director → Real Server | Real Server → Director → 客户端 | 源 IP + 目标 IP(双向) |
为什么需要这些流程?
- NAT:解决 Real Server 无公网 IP 的问题,但性能受限。
- DR:避免响应流量经过 Director,性能最优(如电商高并发场景)。
- TUN:支持跨网络部署(如异地机房),但需隧道协议支持。
- FULLNAT:简化 Real Server 配置(无需绑定 VIP),适合云环境。
总结
- 追求性能:优先选择 DR 模式。
- 跨网络部署:选择 TUN 模式 或 FULLNAT 模式。
- 简单配置:NAT 模式 或 FULLNAT 模式(需支持)。
LVS 的模式选择需结合网络环境、性能需求及运维复杂度综合评估。
相关文章:
架构——LVS负载均衡主要模式及其原理、服务水平、优缺点
LVS(Linux Virtual Server)是一款高性能的开源负载均衡软件,支持多种负载均衡模式。以下是其主要模式及其原理、服务水平、优缺点: 1. NAT 模式(Network Address Translation) 原理: 请求流程…...
【漫话机器学习系列】093.代价函数和损失函数(Cost and Loss Functions)
代价函数和损失函数(Cost and Loss Functions)详解 1. 引言 在机器学习和深度学习领域,代价函数(Cost Function)和损失函数(Loss Function)是核心概念,它们决定了模型的优化方向。…...
Android 13 上通过修改 AOSP 拦截 SystemUI 音量调节事件
定位关键代码SystemUI 的音量调节逻辑主要集中在以下类中: VolumeDialogController.java:负责与 AudioService 交互。 VolumeDialogImpl.java:处理 UI 交互事件(如按钮点击)。 PhoneWindowManager.java:处理物理按键事件(如音量键)。 拦截音量调节事件 以 VolumeDialog…...
SQL与数据库程序设计
1.1986年,10月美国国家标准局颁布了SQL语言的美国标准,称为SQL86 2.SQL(Structured Query Language)又称为结构化查询语言 3.建立索引的主要目的是加快查找的速度 4.在基本表上建立一个或者多个索引 5. 一个基本表是最多只能建立一个聚簇索引 6.CAL…...

大模型Deepseek的使用_基于阿里云百炼和Chatbox
目录 前言1. 云服务商2. ChatBox参考 前言 上篇博文中探索了(本地)部署大语言模型,适合微调、数据高隐私性等场景。随着Deepseek-R1的发布,大语言模型的可及性得到极大提升,应用场景不断增加,对高可用的方…...
AlmaLinux9.5安装samba实现与Windows文件共享 笔记250214
Fedora41安装samba实现与Windows文件共享 笔记241202 步骤: 安装samba, 并启用 smb , nmb 服务 切换阿里源(可选) ### 备份 /etc/yum.repos.d 文件夹 tempUri/etc/yum.repos.d ; sudo cp -a $tempUri $tempUri.$(date %0y%0m%0d%0H%0M%0Sns%0N).bak sed -e s|^mirrorli…...
二〇二四年终总结
写在前面 简单总结一下告诉自己,曾经活着 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树 原本应该 24 年年中的时候写 23 年年终的总结,但是一直拖着&…...

学习sql的资源:sql练习平台;在线编辑器,免费sql教程,免费sql书籍
sql练习平台 LeetCode力扣(部分免费) 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 HackerRank 解决 SQL |黑客排名 SQLPad SQL、Python 和 R 面试问题 StrataScratch StrataScratch - Analytical Questions 数据雷mur Free SQL Tutorial for Data Analysts …...

宝塔和docker的区别
宝塔面板 vs Docker:区别、场景与互补使用指南 eepseek回答宝塔和docker的区别 好的,我现在需要回答用户关于宝塔面板和Docker之间的区别的问题。首先,我需要明确这两个工具各自的定义、功能以及它们适用的场景,这样才能准确比较…...
机器学习--实现多元线性回归
机器学习—实现多元线性回归 本节顺延机器学习--线性回归中的内容,进一步讨论多元函数的回归问题 y ′ h ( x ) w ⊤ ∙ x b y^{\prime}h(x)w^\top\bullet xb y′h(x)w⊤∙xb 其中, w T ⋅ x 就是 W 1 X 1 w 2 X 2 w 3 X 3 ⋯ w N X N \text{其中,}w^\math…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript
二、HTML 中的 JavaScript 将 JavaScript 插入 HTML 的主要方法是使用<script>元素。 <script>元素有下列 8 个属性。 async:可选。表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或等待其他脚本加载。只对外部…...
【人工智能】释放数据潜能:使用Featuretools进行自动化特征工程
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 特征工程是机器学习流程中至关重要的一步,它直接影响模型的性能。然而,手动特征工程既耗时又需要领域专业知识。Featuretools是一个强大的…...
算法——对比A*算法与IDA*算法
A*算法与IDA*算法详细解析 1. A*算法 核心思想: A*算法是一种启发式搜索算法,结合了Dijkstra算法的最短路径保证和贪心最佳优先搜索的高效导向性。其核心是评估函数 ( f(n) g(n) h(n) ),其中: ( g(n) ): 从起点到当前节点 ( …...
GitLab CI/CD 的配置详解:从零开始使用 .gitlab-ci.yml 文件
在现代软件开发中,CI/CD(持续集成与持续部署)已成为提高开发效率和代码质量的核心实践。GitLab CI/CD 提供了强大的功能,帮助开发者自动化构建、测试和部署应用程序。而 .gitlab-ci.yml 文件是 GitLab CI/CD 配置的关键所在&#…...

python语言进阶之函数
目录 前言 函数的创建和调用 函数创建 调用函数 参数传递 形式参数和实际参数 位置参数 数量必须与定义时一致 位置必须与定义时一致 关键字参数 为参数设置默认值 可变参数 **parameter 返回值 变量的作用域 局部变量 全局变量 匿名函数 前言 提到函数&…...

网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理
网络安全等级保护基本要求、测评要求、高风险判定指引综合梳理 等级保护基本要求、测评要求、高风险判定指引综合梳理测评要求思维导图二级三级 花了些时间把网络安全等级保护涉及的以下三份标准文件进行了整理,以表格的形式进行展现,能帮助初学者更加直…...
JSON入门略要
JavaScript对象表示法(JavaScript Object Notation,JSON)已经成为RESTful接口设计中的事实标准。 JSON数据格式使得应用程序可以通过RESTful API等方式在网络上进行数据通信。 REST: 表现层状态转化(REpresentation State Transf…...
Python爬虫抓取数据时,如何设置请求头?
在Python爬虫中设置请求头是确保爬虫能够正常运行并获取目标数据的关键步骤之一。请求头可以帮助我们模拟浏览器行为,避免被目标网站识别为爬虫。以下是如何在Python爬虫中设置请求头的详细指南: 一、使用requests库设置请求头 requests库是Python中最…...

以若依移动端版为基础,实现uniapp的flowable流程管理
1.前言 此代码是若依移动端版为基础,实现flowable流程管理,支持H5、APP和微信小程序三端。其中,APP是在安卓在雷电模拟器环境下完成的,其他环境未测试,此文章中所提及的APP均指上述环境。移动端是需要配合若依前后端分…...

DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...