负载均衡策略 LVS
一、集群功能分类
1、LB
(1) 概念:
LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台服务器过载而其他服务器处于空闲状态。
(2) 负载均衡产品分类:
① 软件负载均衡设备:
软件负载均衡设备是在软件层面实现负载均衡的工具或服务,通常运行在普通服务器或虚拟机上,无需专用硬件设备。
● LVS(Linux Virtual Server):
LVS 是一个内核级别的负载均衡解决方案,根据用户请求的IP与端口号,实现将用户的请求分发至不同的主机;
● HAproxy:
haproxy:主要功能是针对 http 协议实现负载均衡,也可以实现 tcp、udp 等协议的负载均衡。
② 硬件负载均衡设备:
硬件负载均衡设备是专门用于分发网络流量、管理服务器集群和确保应用程序高可用性的物理设备。
厂商及种类:F5 Networks - BIG-IP、Citrix - Citrix ADC、A10 Networks - Thunder ADC
2、HA
(1) 概念:
HA:高可用性集群(High Availability)是一种计算机系统或网络架构设计,旨在提高系统的稳定性和可用性,减少因硬件故障、软件问题或其他意外事件而导致的中断或停机时间。
(2) HA 衡量可用性:
衡量可用性:在线时间 /(在线时间+故障处理时间)
HA 通过百分比或其他指标来衡量可用性水平,通常以"几个9"的形式来表示:
99%:一年有三天不在线
99.9%:一年有0.3天不在线
99.99%:一年有0.03天不在线
99.999%:一年有0.003天不在线
二、负载均衡
1、负载均衡的主要方式:
① http 重定向:
通过 HTTP 协议的重定向来分发客户端请求到多个后端服务器,这种方法通常用于将流量从一个入口点引导到不同的服务或网站。
② DNS 负载均衡:
DNS 负载均衡是通过在 DNS 层面管理域名解析来分发网络流量到不同的服务器或资源。DNS服务器上配置多个域名对应IP的记录,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。
③ 反向代理负载均衡:
反向代理器位于服务器端,负责接收客户端请求,将客户端的请求转发到多个后端服务器来分发流量。
④ IP 网络层负载均衡(lvs-nat):
在网络层和传输层修改 IP 地址。
用户访问请求到达负载均衡服务器,负载均衡服务器根据算法得到一台真实服务器地址,然后将用户请求的目标地址修改成该真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再讲数据返回去。
⑤ 数据链路层负载均衡(lvs-DR)
在数据链路层修改 Mac 地址。
负载均衡服务器的 IP 和它所管理的 web 服务群的虚拟 IP 一致; 负载均衡数据分发过程中不修改访问地址的 IP 地址,而是修改 Mac 地址。
2、负载均衡层次:
● 四层负载(Layer 4 Load Balancing):
四层负载均衡工作在OSI模型的第四层,也称为传输层,这种负载均衡主要基于源IP地址、目标IP地址、源端口和目标端口等传输层信息进行负载分发。它不深入分析传输的数据内容。
● 七层负载(Layer 7 Load Balancing):
七层负载均衡工作在OSI模型的第七层,也称为应用层,这种负载均衡不仅考虑传输层信息,还深入分析应用层数据包,可以根据HTTP头、URL、Cookie等应用层特定的信息进行负载分发决策。
三、LVS
1、LVS 概述:
LVS(Linux Virtual Server)是一个虚拟的服务器集群系统。LVS 工作在一台server上,提供 Directory(负载均衡器) 的功能,把特定的请求转发给对应的real server(真正提供服务的主机),实现集群环境中的负载均衡。
● 框架:LB-server负载均衡器 - realy-server真实服务器
2、LVS - NAT:
(1) 工作原理:
① 客户端将请求发往负载均衡器,请求报文源地址是 CIP(客户端IP),目标地址为 VIP(负载均衡器地址);
② 负载均衡器收到报文后,将客户端请求报文的目标 IP 地址改为后端服务器的 RIP 地址,并将报文根据算法发送出去。
③ 报文送到后端服务器后,后端服务器会响应该请求,并将响应报文返还给 LVS;
④ LVS 将此报文的源地址修改为本机并发送给客户端。
(2) 地址分配:
client:vmnet8 → 192.168.198.133(vmnet8 需要联网)
LVS: vmnet8 → 192.168.198.132
vmnet10 → 192.168.48.128
web1:vmnet10 → 192.168.48.40
web2:vmnet10 → 192.168.48.50
(3) 配置:
① web 服务器:
systemctl start httpd
systemctl enable httpd
● route add -net 192.168.198.0/24 gw 192.168.48.128
配置外部网段与网关
web1:echo web1 > /var/www/html/index.html
web2:echo web2 > /var/www/html/index.html
② LVS 配置:
● echo 1 > /proc/sys/net/ipv4/ip_forward
启动路由功能。将1写入 /proc/sys/net/ipv4/ip_forward 文件,会启用IP数据包转发,允许Linux服务器将收到的IP数据包从一个网络接口转发到另一个网络接口。
yum install -y ipvsadm
● ipvsadm -A -t 192.168.198.132:80 -s rr
-A:添加 lvs 集群ip(客户端将请求发送到的地址)
-t:tcp协议
-s rr:使用轮序调度算法
ipvsadm -a -t 192.168.198.132:80 -r 192.168.48.40:80 -m
ipvsadm -a -t 192.168.198.132:80 -r 192.168.48.50:80 -m
指定添加的真实服务器ip和端口
③ client 测试:
3、LVS - DR
(1) 工作原理:
① 客户端将请求发往负载均衡器,请求报文源地址是CIP,目标地址为VIP;
② 负载均衡器收到报文后,将客户端请求报文的源 MAC 地址改为自己 DIP 的 MAC 地址,目标 MAC 改为了 RIP 的 MAC 地址,并将此包发送给 RS;
③ RS 处理完请求报文后,将响应报文通过 lo 接口送给 eth0 网卡,直接发送给客户端。
(2) 地址分配:
client:192.168.198.129
LVS:192.168.198.130(虚拟ip:192.168.198.140)
web1:192.168.198.132(虚拟ip:192.168.198.140)
web2:192.168.198.133(虚拟ip:192.168.198.140)
(3) LVS 服务器配置:
① 添加虚拟ip(VIP)和路由条目:
● ifconfig ens33:0 192.168.198.140 broadcast 192.168.198.255 netmask 255.255.255.0 up
ens33:0 是网络接口的虚拟子接口(Virtual Subinterface),子接口允许将多个IP 地址分配给同一个物理网络接口 ;up 表示启用虚拟子接口。
● route add -host 192.168.198.140 dev ens33:0
将所有传往IP地址 192.168.198.140 的数据包发送到 ens33:0 虚拟子接口
② 设置路由转发:
开启路由转发功能 ;禁止转发重定向
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
③ 设置负载均衡条目:
yum install -y ipvsadm
ipvsadm -A -t 192.168.198.140:80 -s rr
ipvsadm -a -t 192.168.198.140:80 -r 192.168.198.132:80 -g
ipvsadm -a -t 192.168.198.140:80 -r 192.168.198.133:80 -g
(4) web 服务器部署:
echo web > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd
● ifconfig lo:0 192.168.198.140/32
分配给虚拟回环接口 lo:0 的IP地址。
● echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
忽略 arp 请求,不接收客户端发送的 arp
● echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
可以响应客户端的 arp 请求
(5) client 测试:
4、轮询算法:
(1) 静态调服方法:
静态调度方法是指按照预定的、不变的顺序或一组规则在一组服务器或资源之间分配请求或任务。
① 轮询 (RR):将外部请求按顺序轮流分配到集群中的真实服务器上;
② 加权轮询 (WRR):给服务器配置一个权重值,请求按照服务器的权重比例来分发。高权重的服务器将获得更多的请求,而低权重的服务器将获得相对较少的请求。
(2) 动态调服方法:
动态调度方法用于根据实时条件,在一组服务器或资源之间分发请求、任务或工作负载。
① 最小连接 (LC):将新请求定向到当前活动连接最少的服务器。
② 加权最小连接 (WLC):新连接被定向到具有最少活动连接的服务器,但是服务器的权重会影响它可以处理的连接数。
相关文章:

负载均衡策略 LVS
一、集群功能分类 1、LB (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台…...

驱动开发6 IO多路复用——epoll
核心操作:一棵树、一张表、三个接口 相关案例 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys…...
【python学习笔记——列表】
1、列表定义 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 空列表 list[]非空列表 列表定义时例如list[‘csdn’, ‘is’ ,‘good’ ,2023],直接给列表内赋值 2、列表索引规则 列表名[start:stop:step],前闭后开,即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
目录 前言1. YOLOv7-PTQ量化流程2. 准备工作3. 插入QDQ节点3.1 自动插入QDQ节点3.2 手动插入QDQ节点 前言 手写 AI 推出的全新 TensorRT 模型量化实战课程,链接。记录下个人学习笔记,仅供自己参考。 该实战课程主要基于手写 AI 的 Latte 老师所出的 Tens…...

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)
坑一:回显问题 富文本组件: <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…...
USACO12OPEN Balanced Cow Subsets G(meet in the middle)
洛谷P3067 [USACO12OPEN] Balanced Cow Subsets G 题目大意 我们定义一个奶牛集合 S S S是平衡的,当且仅当满足以下两个条件: S S S非空 S S S可以被划分为两个集合 A , B A,B A,B,满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...
GIT常用操作记录
1、后悔药:强制回退到某个具体历史提交记录,并强制推送到远程仓库 强制回退到某个具体历史提交记录,即要删除它之后的所有提交,可以用 git reset 命令。 首先找到目标提交记录的ID,可以在github远程仓库的历史提交记…...

【ETL工具】Datax-ETL-SqlServerToHDFS
🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…...
Kubernetes (K8S)概述
1、K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以…...

11月14号|Move生态Meetup相约浪漫土耳其
Move是基于Rust编程语言,由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来,旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript,即一种跨平台语言,使开发人员能够在多个…...
mac vim没有颜色 问题
vim ~/.vimrc syntax on set nu! set autoindent...

Servlet核心API
目录 HttpServlet init destory service 实例:处理get、post、put、delete请求 1.通过postman得到请求 2.通过ajax得到请求 HttpServletRequest 常见方法 前端给后端传参 1.GET,query string 2.POST,form 3.POST,json HttpSeverletRespons…...

crs 维护模式 exclusive mode
How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRS Does Not Start). (Doc ID 1609127.1)编辑To Bottom [rootrac1 ~]# ps -ef|grep grid root 2477 1 1 20:47 ? 00:00:51 /opt/oracle.ahf/jre/bin/java -server -Xms32m -Xmx64…...

【OpenCV实现平滑图像形态学变化】
文章目录 概要目标腐蚀膨胀开运算结构元素(内核)小结 概要 形态学变化是一组简单的图像操作,主要用于处理二值图像,即只包含黑和白两种颜色的图像。这些操作通常需要两个输入,原始图像和一个内核(kernel&a…...
Ubuntu服务器中java -jar 后台运行Spring Boot项目
问:我在我的服务器中java -jar 运行springboot项目,但是我操作不了命令了,必须要终止掉才能执行后面的操作,怎么样才能让他后台运行呢?比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令: 在…...
微服务parent工程和子工程pom文件配置注意
parent工程 重要配置: <!-- 父工程 --><packaging>pom</packaging><!-- 聚合 --><modules><module>../base</module><module>../gateway</module><module>../user-service</module><mod…...

STM32G030F6P6点灯闪烁
前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02gmail.com,此消息至2025年1月1日前均有效 (2࿰…...
K8s开发人员也需要了解的相关知识
工作变动总结一下之前的笔记,整理一个速查的东西,方便之后查阅 K8s开发相关 1、k8s yml apiverison: Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示,如 v1 或 apps/v1,…...

创建并启动华为HarmonyOS本地与远程模拟器及远程真机
1.打开设备管理器 2.选择要添加的手机设备,然后点击安装 3.正在下载华为手机模拟器 4.下载完成 5.创建新模拟器 下载系统镜像 点击下一步,创建模拟器 创建成功 启动模拟器 华为模拟器启动成功 6.登陆华为账号并使用远程模拟器 7.使用远程真机...

责任链模式应用案例
前几天系统商品折扣功能优化,同事采用了责任链模式重构了代码,现整理如下。 一、概念 责任链模式是为请求创建一个处理者对象的链条,所有处理者(除最末端)都含有下一个对象的引用从而形成一条处理链,该模…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...