LVS做集群四层负载均衡的简单理解
背景:业务中主要是TCP/SSL连接,要做四层负载均衡。
之前做负载均衡,调研了nginx(见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态)。
nginx作为一个应用,做四层负载均衡效率低。lvs是linux内核的,非应用,用它做四层负载均衡效率更高更合适。所以会见到lvs+nginx做四层七层负载均衡这种组合。
一、集群
一般我们遇到的:
负载均衡集群
高可用集群
和分布式的区别:
集群是一群机器做同样的事情,分布式是不同的机器负责不同的事情
二、负载均衡
常用的软件负载均衡:
lvs 四层
nginx(tengine)七层
haproxy
硬件也有,不展开了。
三、LVS
1 应用方式
类似于nginx的应用方式。客户请求流量先到达lvs,再由lvs做负载均衡。
举例:一台linux服务器启用lvs实现负载均衡的作用,其他的是业务服务器(RS)。
我们主要在lvs服务器上面做配置。业务服务器可能会有额外的配置(除了ip,如何配置取决于lvs的负载均衡方式,比如,下面会介绍):
在lvs上开启ipvs,配置ip、RS地址、负载均衡方式。
业务服务器:配置ip
2 负载均衡模式
为了描述,定义:
| 名称 | 简写 |
|---|---|
| 客户的ip | CIP |
| lvs服务器对外的IP | VIP |
| lvs服务器真实的IP | DIP |
| 业务服务器的IP | RIP |
| lvs服务器 | DS |
请求Request流量都要经过DS:数据包的源地址一定是CIP;
响应Response流量根据经过和不经过DS分为两类:
响应流量经过DS的两种模式:
都是lvs做nat转换,区别在于究竟NAT了什么部分:
NAT
请求包数据包源地址不变,NAT目的地址;响应包NAT请求地址
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:CIP 目的地址:RIP
响应:
DS接收的数据包:源地址:RIP 目的地址:CIP
发送给客户的数据包:源地址:VIP 目的地址:CIP
Full-NAT(不常用)
请求包和相应包数据包源地址、目的地址都NAT
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:DIP 目的地址:RIP
响应:
DS接收的数据包:源地址:RIP 目的地址:DIP
发送给客户的数据包:源地址:VIP 目的地址:CIP
响应流量不经过DS的两种模式:
需要改变业务服务器的配置!
业务服务器也都配置虚拟IP为VIP。
直接路由DR
业务服务器要关闭对arp请求的响应。
有两种做法(分别见参考1和2)
1.绑定vip之后,配置忽略arp广播
ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
2.创建一个dummy网卡
ip addr add dev dummy0 192.168.0.222/32
DS通过改变数据包的mac地址,将流量发给RS。
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
数据帧:目的MAC地址:DS的MAC地址
发送给RS的数据包:源地址:CIP 目的地址:VIP
数据帧:目的MAC地址:RS的MAC地址
响应:RS直接发给客户!
RS发送的数据包:源地址:VIP 目的地址:CIP
IP隧道 IP tunnel(不常用)
RS需要支持ipip协议,必须加载ipip模块,解封装数据包来获得原始包。
集群服务器如果是虚拟机,那么其物理机器上不能有ipip隧道设备
DS通过将原请求数据包在封装一层,发给RS。RS解封装得原数据包,直接回复响应给客户。
请求:
DS接收的数据包:源地址:CIP 目的地址:VIP
发送给RS的数据包:源地址:DIP 目的地址:RIP 载荷内容:接收的数据包
响应:RS直接发给客户!
RS发送的数据包:源地址:VIP 目的地址:CIP
特性比较
负载
响应过lvs可能是瓶颈,所以大流量的情况下考虑响应不过lvs的两种。
服务器结点数目
NAT 10-20
IP tunnel 100
DR >100
网络配置要求
NAT 模式 和 Full-NAT模式:只需要DS一个有公网ip作为VIP,RS和DS三层可达。
DR模式:只需要一个有公网ip作为VIP,要求负载均衡器的网卡必须与物理网卡在一个物理段上
IP tunnel模式:只需要一个有公网ip作为VIP,RS需要支持IPTUNNEL协议
网关
NAT : DS
DR和IP tunnel:自己的路由器
RS网络和DS的关系:
NAT:局域网与外部网络
DR:DS和RS在同一个子网,RS也配置VIP
IP tunnel:DS和RS可以不在一个子网
DS和RS的端口对应关系
NAT模式下,这两个端口可以不相同,DS会做好转换
DR模式下,因为不会对传输层做修改,所以这两个端口必须相同
3 原理
ipvs
工作在内核,处理请求转发。
how:
“IPVS通过在Netfilter框架中的不同位置注册自己的处理函数来捕获数据包,并根据与IPVS相关的信息表对数据包进行处理,按照IPVS规则中定义的不同的包转发模式,对数据包进行不同的转发处理。”
IPVS相关的信息表:用户维护
包转发模式:负载均衡模式
八种负载均衡算法
管理工具ipvsadm
命令行工具,用户空间
向IPVS中写入规则
一些命令:
// 添加vip
ip addr add dev ens33 192.168.1.10/32
// 添加一个虚拟服务器
ipvsadm -A -t 192.168.1.10:80 -s rr
-A:append:添加一个虚拟服务器
-t:tcp-service:对tcp协议作转发
-s:schduler:均衡算法
rr:round robin:将工作平均分配给可用的真实服务器的算法
// 添加后端服务器
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.101:80 -g -w 1
-a:append:添加一个后端真实服务器
-t:tcp-service:转发tcp协议
-r:real-server:后端真实服务器地址
-w:weight:权重
-g:Direct Routing,默认模式,也成网关模式(gatewaying);
-m:NAT,也称作伪装模式(masquerading)。
-i:IP Tunneling,也称作 ipip 封包模式(ipip encapsulation);
四、其他
LVS双机热备方案,如 LVS + Keepalived
参考:
- 负载均衡(四层) LVS(看完就能去上班)
- 《一篇搞懂》系列之二——IPVS
- LVS负载均衡高可用解决方案
相关文章:
LVS做集群四层负载均衡的简单理解
背景:业务中主要是TCP/SSL连接,要做四层负载均衡。 之前做负载均衡,调研了nginx(见之前的nginx实现后端服务负载均衡和nginx负载均衡监测后台服务状态)。 nginx作为一个应用,做四层负载均衡效率低。lvs是li…...
2.1_6 线程的实现方式和多线程模型
文章目录 2.1_6 线程的实现方式和多线程模型(一)线程的实现方式(1)用户级线程(2)内核级线程 (二)多线程模型(1)一对一模型(2)多对一模…...
4.5 MongoDB 文档存储
目录 1. 相关安装 2. Pycharm可视化观察MongoDB 3. python使用 MongoDB 最初流程代码 4. 插入、查询、更新、删除数据 4.1 插入数据 4.2 查询数据 4.3 更新数据 4.3.1 更新一条数据 4.3.2 更新多条数据 4.4 删除数据 5. 计数、排序、偏移 5.1 计数 5.2 排序 5.3 …...
什么是服务级别协议(SLA)?
在数字化时代,企业和服务提供商之间的关系变得越来越复杂,而服务级别协议(SLA)则在这个复杂网络中发挥着至关重要的作用。本文将深入介绍SLA,从它的定义、应用场景到监测方法,全方位解析这一法律桥梁如何确…...
使用Python进行Sentinel-2 图像聚类
聚类或无监督分类是根据统计相似性将图像的像素值分组或聚合到一定数量的自然类(组)的过程。在本教程中,我们将使用rasterio进行sentinel-2图像处理,并使用功能强大的完整scikit-learn python 包在jupyter Notebook中进行聚类。 Scikit-learn是一个用于 Python 编程语言的…...
SNZ资本的首席信息官Gavin确认出席Hack .Summit() 2024香港开发者大会!
SNZ资本的首席信息官Gavin确认将出席由 Hack VC 主办,并由 AltLayer 和 Berachain 联合主办,与 SNZ 和数码港合作,由 Techub News 承办的Hack.Summit() 2024区块链开发者盛会。 Gavin是SNZ控股和SNZ资本的首席信息官。Gavin在区块链和金融科技…...
js里面有引用传递吗?
一:什么是引用传递 引用传递是相对于值传递的。那什么是值传递呢?值传递就是在传递过程中再复制一份,然后再赋值给变量,例如: let a 2; let b a;在这个代码中,let b a; 就是一个值传递,首先…...
C 语言 math.h 库介绍
在 C 语言中,math.h 头文件定义了各种数学函数和一个宏,用于处理数学运算。这些函数接受 double 类型的参数,并返回 double 类型的结果。 库宏 在 math.h 中定义了唯一的一个宏: HUGE_VAL:当函数的结果不可表示为浮…...
Eigen-Matrix矩阵
Eigen-Matrix矩阵 一、概述二、矩阵的前三个模板参数三、向量四、动态维度参数五、构造函数六、索引访问器七、逗号初始化八、矩阵维度调整九、赋值和调整大小十、固定尺寸vs.动态尺寸十一、可选模板参数十二、方便预定义 一、概述 在Eigen中,所有矩阵和向量都是矩…...
蓝桥杯14届计算思维国赛U8组包含真题和答案
十四届蓝桥杯国赛考试计算思维 U8 组 答案在底部 第一题 以下选项中,( )是由美国计算机协会设立,对在计算机领域内作出重要贡献的个人授予的奖项 。A.图灵奖 C.菲尔兹奖 B.诺贝尔奖 D.普利策奖 第二题 希希去吃寿司。餐台上摆出了许多食物,可供大家自选。如下图所示。 …...
opencv内存溢出del释放变量 (python)
报错: cv2.error: OpenCV(3.4.17) D:\a\opencv-python\opencv-python\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 12211548 bytes in function ‘cv::OutOfMemoryError’ 检查内存代码 import psutil# 获取当前进…...
【算法与数据结构】复杂度深度解析(超详解)
文章目录 📝算法效率🌠 算法的复杂度🌠 时间复杂度的概念🌉大O的渐进表示法。 🌠常见复杂度🌠常见时间复杂度计算举例🌉常数阶O(1)🌉对数阶 O(logN)🌉线性阶 O(N)&#x…...
Upload-Labs-Linux1【CTF】
拿到这道题目一看,发现是upload靶场;这不简简单单吗;结果中间还是遇到了一些小问题 小坑总结:该关只识别标准php语法:<?php phpinfo()?>格式;即<?php ?> 不识别<? phpinfo()?> &…...
搜维尔科技:OptiTrack 提供了性能最佳的动作捕捉平台
OptiTrack 动画 我们的 Prime 系列相机和 Motive 软件相结合,产生了世界上最大的捕获量、最精确的 3D 数据和有史以来最高的相机数量。OptiTrack 提供了性能最佳的动作捕捉平台,具有易于使用的制作工作流程以及运行世界上最大舞台所需的深度。 无与伦比…...
java设计模式之职责链模式
基本介绍 职责链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式对请求的发送者和接收者进行解耦。职责链模式 又叫责任链模式,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求。那…...
连不上网的解决办法集--持续更新
连不上网的解决办法集–持续更新 1、有网卡,但网卡驱动失效 背景:有网络驱动但是依旧连不上网,只有inteV6有值,inte 没有值(正常应该有个ipv4的信息) 判断原因:可能是之前格式化磁盘驱动的时…...
Unity之PUN2插件实现多人联机射击游戏
目录 📖一、准备工作 📺二、UI界面处理 📱2.1 登录UI并连接PUN2服务器 📱2.2 游戏大厅界面UI 📱2.3 创建房间UI 📱2.4 进入房间UI 📱2.5 玩家准备状态 📱2.6 加载战斗场景…...
72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle)
72_Pandas.DataFrame保存并读取带pickle的系列(to_pickle、read_pickle) 要将 pandas.DataFrame、pandas.Series 对象保存为 pickle 文件,请使用 to_pickle() 方法,并使用 pd.read_pickle() 函数读取保存的 pickle 文件。 在此对…...
Redis哨兵模式和Redis Cluster模式
文章目录 🔊博主介绍🥤本文内容Redis Cluster 模式支持自动故障转移功能吗?Redis Cluster 模式支持自动故障转移功能和哨兵有什么区别?Redis Cluster 模式和哨兵模式(Sentinel)在自动故障转移方面有一些关键…...
C语言第三十二弹---自定义类型:联合和枚举
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 目录 1、联合体 1.1、联合体类型的声明 1.2、联合体的特点 1.3、相同成员的结构体和联合体对比 1.4、联合体大小的计算 1.5、联合的⼀个练习 2、枚举类型 …...
UnSHc深度解析:揭秘SHc加密脚本逆向工程核心技术
UnSHc深度解析:揭秘SHc加密脚本逆向工程核心技术 【免费下载链接】UnSHc UnSHc - How to decrypt SHc *.sh.x encrypted file ? 项目地址: https://gitcode.com/gh_mirrors/un/UnSHc 在Linux系统管理和安全审计领域,Shell脚本的保护与解密始终是…...
ssm社区物业信息管理系统小程序(文档+源码)_kaic
系统实现登录模块的实现系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。登录合法性判断过程:用户输入账号和密码后&…...
Chapter 14: Link Initialization Training
Chapter 14: Link Initialization & Training 书籍: PCI Express Technology 3.0 (MindShare Press, 2012) 页码: Book Pages 487-520 | PDF Pages 547-580 学习日期: 2026-04-13本章概要 本章描述 PCIe 链路初始化和训练过程,包括 TS1/TS2 有序集、极性检测、L…...
龙虾配置文件之HEARTBEAT.md 源码分析与配置指南
HEARTBEAT.md 源码分析与配置指南 / HEARTBEAT.md Source Code Analysis & Configuration Guide 分析文件: HEARTBEAT.md 生成日期: 2026-04-18 分析基准: OpenClaw 源码 C:\github\openclaw 一、代码层面的完整生命周期 1.1 加载阶段:动态上下文文件 HEARTBEAT.md 的加…...
从空气动力学到代码:Matlab仿真揭秘风机Pm-Wm动态关系
1. 风力发电机组动态关系建模基础 第一次接触风机Pm-Wm曲线时,我被这个看似简单的曲线背后复杂的物理原理震撼到了。就像开车时踩油门,发动机转速和输出功率的关系看似直观,但真要建模却需要考虑空气动力学、机械传动、电气特性等多重因素。 …...
飞书事件订阅避坑指南:从URL验证失败到解密报错,我踩过的那些坑(Java版)
飞书事件订阅实战避坑手册:Java开发者的深度排错指南 第一次集成飞书事件订阅功能时,我天真地以为按照官方文档一步步操作就能顺利完成。直到URL验证请求连续失败七次、解密代码突然抛出BadPaddingException、事件推送神秘消失时,我才意识到…...
别再尬聊了!用这36个问题,我让团队新人在一次午餐会上成了朋友
技术团队破冰实战:用36问重构工程师社交模式的3个关键策略 当新来的全栈工程师在第三次站会上依然只回答"没问题"时,我意识到代码之外的沟通障碍正在侵蚀团队效能。技术团队的特殊性在于——我们擅长用机器语言精准表达,却常常在人…...
从手机屏幕到相机传感器:MIPI CSI-2协议中RGB与RAW格式的实战选择指南
从手机屏幕到相机传感器:MIPI CSI-2协议中RGB与RAW格式的实战选择指南 在嵌入式视觉系统的设计中,图像传感器与处理器之间的数据传输效率直接影响着整个系统的性能表现。作为行业标准的MIPI CSI-2接口协议,其支持的多种RGB和RAW数据格式选择&…...
别再为模型部署发愁了!手把手教你用torch.onnx.export把PyTorch模型转成ONNX(附常见报错解决)
从PyTorch到ONNX:模型部署实战指南与避坑手册 为什么ONNX成为模型部署的首选桥梁? 在深度学习项目的生命周期中,训练出一个高精度的模型只是完成了第一步。真正让模型产生商业价值的,是将它成功部署到生产环境中。而ONNXÿ…...
Windows 11 先装,Arch Linux 后装:UEFI 双系统启动菜单避坑全记录
Windows 11 与 Arch Linux 双系统 UEFI 引导完全避坑指南 每次看到论坛里有人抱怨"装完双系统找不到启动菜单",我就想起自己第一次尝试时的狼狈经历。那天深夜,我对着黑屏反复重启了十七次,最终在凌晨三点意识到问题出在一个看似微…...
