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、枚举类型 …...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
