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、枚举类型 …...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
