当前位置: 首页 > news >正文

负载均衡策略 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

核心操作&#xff1a;一棵树、一张表、三个接口 相关案例 #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]&#xff0c;直接给列表内赋值 2、列表索引规则 列表名[start:stop:step]&#xff0c;前闭后开&#xff0c;即取索引为start…...

TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)

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

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)

坑一&#xff1a;回显问题 富文本组件&#xff1a; <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是平衡的&#xff0c;当且仅当满足以下两个条件&#xff1a; S S S非空 S S S可以被划分为两个集合 A , B A,B A,B&#xff0c;满足 A A A里的奶牛产量之和等于 B B B里的牛奶产量之和 …...

GIT常用操作记录

1、后悔药&#xff1a;强制回退到某个具体历史提交记录&#xff0c;并强制推送到远程仓库 强制回退到某个具体历史提交记录&#xff0c;即要删除它之后的所有提交&#xff0c;可以用 git reset 命令。 首先找到目标提交记录的ID&#xff0c;可以在github远程仓库的历史提交记…...

【ETL工具】Datax-ETL-SqlServerToHDFS

&#x1f984; 个人主页——&#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01;&…...

Kubernetes (K8S)概述

1、K8S 是什么&#xff1f; K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写”。 1.1 作用 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以…...

11月14号|Move生态Meetup相约浪漫土耳其

Move是基于Rust编程语言&#xff0c;由Mysten Labs联合创始人兼CTO Sam Blackshear在Meta的Libra项目中开发而来&#xff0c;旨在为开发者提供比现有区块链语言更通用的开发语言。Sam的目标是创建Web3的JavaScript&#xff0c;即一种跨平台语言&#xff0c;使开发人员能够在多个…...

mac vim没有颜色 问题

vim ~/.vimrc syntax on set nu! set autoindent...

Servlet核心API

目录 HttpServlet init destory service 实例&#xff1a;处理get、post、put、delete请求 1.通过postman得到请求 2.通过ajax得到请求 HttpServletRequest 常见方法 前端给后端传参 1.GET,query string 2.POST,form 3.POST&#xff0c;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实现平滑图像形态学变化】

文章目录 概要目标腐蚀膨胀开运算结构元素&#xff08;内核&#xff09;小结 概要 形态学变化是一组简单的图像操作&#xff0c;主要用于处理二值图像&#xff0c;即只包含黑和白两种颜色的图像。这些操作通常需要两个输入&#xff0c;原始图像和一个内核&#xff08;kernel&a…...

Ubuntu服务器中java -jar 后台运行Spring Boot项目

问&#xff1a;我在我的服务器中java -jar 运行springboot项目&#xff0c;但是我操作不了命令了&#xff0c;必须要终止掉才能执行后面的操作&#xff0c;怎么样才能让他后台运行呢&#xff1f;比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令&#xff1a; 在…...

微服务parent工程和子工程pom文件配置注意

parent工程 重要配置&#xff1a; <!-- 父工程 --><packaging>pom</packaging><!-- 聚合 --><modules><module>../base</module><module>../gateway</module><module>../user-service</module><mod…...

STM32G030F6P6点灯闪烁

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…...

K8s开发人员也需要了解的相关知识

工作变动总结一下之前的笔记&#xff0c;整理一个速查的东西&#xff0c;方便之后查阅 K8s开发相关 1、k8s yml apiverison: Kubernetes (k8s) 的 API 版本表示资源定义在 API 服务器中的稳定性和支持程度。API 版本由一个字符串表示&#xff0c;如 v1 或 apps/v1&#xff0c…...

创建并启动华为HarmonyOS本地与远程模拟器及远程真机

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

责任链模式应用案例

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

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Element-Plus:popconfirm与tooltip一起使用不生效?

你们好&#xff0c;我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip&#xff0c;产品要求是两个需要结合一起使用&#xff0c;也就是鼠标悬浮上去有提示文字&#xff0c;并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...

运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.

报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符&#xff0c;最后运行&#xff1a;npm run lint --fix...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...