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

LVS集群实验

NAT模式

  • 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
  • RIP和DIP应在同一个IP网络,且应使用私网地址:RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Direclor转发,Direclor易于成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORTVS必须是Linux系统,RS可以是任意OS系统

  • 客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口9000port)
  • VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
  • RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口(9000port)
  • VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
  • VS服务器把修改过报文的响应数据包回传给客户端
  • Ivs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以Ivs的调度机容易阻塞

 实验过程       

实验前准备

一台LVS(两张网卡一个仅主机,一个NAT)

一台测试机(可以用自己电脑的cmd)

webserver1(仅主机网卡)

webserver2(仅主机网卡)

虚拟机关闭防火墙和selinux

每台主机必须有可用ip

LSV主机配置

ip信息
  • NAT网卡ip  172.25.119.100/24
  • 仅主机网卡ip   169.254.199.100/24

路由信息

查看命令

route  -n

如果没有 router 命令 用下面的命令下载

yum install -y net-tools-2.0-0.62.20160912git.el9.x86_64

LVS中打开内核路由功能

在 /etc/sysctl.conf 中写入 net.ipv4.ip_forward = 1

安装ipvsadm

yum install ipvsadm -y

书写策略

[root@LVS ~]# ipvsadm -A -t 172.25.119.100:80 -s rr
[root@LVS ~]# ipvsadm -a -t 172.25.119.100:80 -r 169.254.199.10:80 -m
[root@LVS ~]# ipvsadm -a -t 172.25.119.100:80 -r 169.254.199.20:80 -m

查看策略

ipvsadm  -Ln

webserver1配置

ip信息

仅主机网卡 169.254.199.10/24

路由信息

下载http服务做测试

yum install httpd -y

开启http服务

systemctl enable --now httpd

在index.html中写入内容以做测试查看

echo webserver1  169.254.199.10 > /var/www/html/index.html

webserver2配置

ip信息

仅主机网卡 169.254.1199.20

路由信息

下载http服务做测试

yum install httpd -y

开启http服务

systemctl enable --now httpd

在index.html中写入内容以做测试查看

echo webserver2  169.254.199.20 > /var/www/html/index.html

测试

我直接用的本地主机的cmd进行的测试

DR模式

  • 客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
  • VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
  • RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC

DR模式的特点

  • Director和各RS都配置有VIP
  • 确保前端路由器将目标IP为VIP的请求报文发往Director
  • 在前端网关做静态绑定VIP和Director的MAC地址
  • RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
  • RIP的网关不能指向DIP,以确保响应报文不会经由Director
  • RS和Director要在同一个物理网络
  • 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  • 不支持端口映射(端口不能修败)
  • RS可使用大多数OS系统

实验

实验前准备

虚拟机关闭防火墙和selinux

五台主机:

client(一张NAT网卡 ip  172.25.119.200/24

router(一张NAT网卡ip172.15.119.100/24 一张仅主机网卡ip 169.254.199.100

LVS    (仅主机网卡 169.154.199.50/24   环回地址169.254.199.200/24

webserver1   (仅主机网卡 169.154.199.10/24   环回地址169.254.199.200/24

webserver2     (仅主机网卡 169.154.199.20/24   环回地址169.254.199.200/24

client配置

IP信息

路由信息

router配置

ip 信息

路由信息

LVS配置

ip信息

创建环回(临时,重启后失效)

ip a a 169.254.199.200/32 dev lo

路由信息

在LVS中打开内核路由功能

写策略以及查看策略

webserver1配置

ip信息

创建环回(临时,重启后失效)

ip a a 169.254.199.200/32 dev lo

路由信息

vip(环回)不对外响应

下载http服务做测试

yum install httpd -y

开启http服务         

systemctl enable --now httpd

在index.html中写入内容以做测试查看

echo webserver1  169.254.199.10 > /var/www/html/index.html

webserver2配置

ip信息

创建环回(临时,重启后失效)

ip a a 169.254.199.200/32 dev lo

路由信息   
vip(环回)不对外响应

下载http服务做测试

yum install httpd -y

开启http服务

systemctl enable --now httpd

在index.html中写入内容以做测试查看

echo webserver1  169.254.199.10 > /var/www/html/index.html

测试

防火墙解决轮询调度的错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题
当我第一次访问80被轮询到webserver1后下次访问443仍然可能会被轮询到webserver1上

实验

出错示范

在上面DR实验的基础上,我们做一下更改操作

DR实验的策略

ipvsadm -A -t 169.254.199.200:80  -s rr

ipvsadm -a -t 169.254.199.200:80   -r 169.254.199.10:80 -g

ipvsadm -a -t 169.254.199.200:80   -r 169.254.199.20:80 -g

我们再添加一个策略

ipvsadm -A -t 169.254.199.200:443  -s rr

ipvsadm -a -t 169.254.199.200:443 -r 169.254.199.10:443 -g

ipvsadm -a -t 169.254.199.200:443 -r 169.254.199.20:443 -g

如图

访问测试

curl 169.254.199.200;curl -k https://169.254.199.200

返回的结果将会是:

webserver1 169.254.199.10

webserver1 169.254.199.10

或者

webserver2 169.254.199.20

webserver2 169.254.199.20

   

优化示范

我们可以使用防火墙来解决轮询调度算法中的这一问题

首先我们先清除之前的策略

ipvsadm -C

然后我们给80,443端口打上标签,将他们作为一个整体

被打上标记的会视为同一个         标签名字66

写上策略

访问测试

LVS算法

静态算法

  • RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

ipvsadm -A -t 169.254.199.200:80  -s rr

  • WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

ipvsadm -A -t 169.254.199.200:80  -s wrr

  • SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

ipvsadm -A -t 169.254.199.200:80  -s sh

  • DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

ipvsadm -A -t 169.254.199.200:80 s dh

动态

  • LC:least connections(最少链接发)
  • 适用于长连接应用Overhead(负载值)=activeconns(活动链接数)x256+inactiveconns(非活 动链接数)
  • WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns )x                      256+inactiveconns)/weight
  • SED:Shortest Expection Delay, 初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当webserver1的权重为1,webserver2的权重为10,经过运算前几次的调度都会被node2承接
  • NQ:Never Queue,第一轮均匀分配,后续SED
  • LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
  • LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS

相关文章:

LVS集群实验

NAT模式 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发RIP和DIP应在同一个IP网络,且应使用私网地址:RS的网关要指向DIP请求报文和响应报文都必须经由Direclor转发,Direclor易于成为系统瓶…...

在 Spring Boot 中使用适配器模式实现支付网关的统一接口

引言 在许多电子商务系统中,集成多个支付网关是常见的需求。不同的支付网关有着不同的接口和实现细节。适配器模式可以帮助我们以一种灵活的方式实现这些不同的支付网关接口。 适配器模式简介 适配器模式将一个类的接口转换为客户期望的另一个接口。适配器模式使…...

【书生·浦语大模型实战营】第三期 入门岛作业

入门岛作业 Linux闯关任务:完成 SSH 连接与端口映射并运行 hello_world.py。配置vscode作业内容 可选任务1:将Linux基础命令在开发机上完成一遍作业内容 可选任务 2:使用 VSCODE 远程连接开发机并创建一个conda环境作业内容 可选任务 3&#…...

Redis的String类型常用命令总结

1. set 设置一个键的值。 set key value示例: set username "alice"2. get 获取一个键的值。 get key示例: get username3. getset 设置键的值,并返回键的旧值。 getset key value示例: getset username "…...

河南萌新联赛2024第(四)场:河南理工大学

A 思路: B 思路:有一种贪心的写法,将整个数组排序以后比较两个相邻数的同或值,取 m a x max max,不会证明 int th(int x, int y, int z) {int res 0;for (int i z - 1; i > 0; i --) {int dx (x >> i &…...

Linux中临时使用账号提权进行业务操作

普通账号提权 su:永久提权 Switching users with su sudo:临时提权 Running commands as root with sudo 1)su切换账号 需要对方的密码 示例:切换到超级管理员 su - root 建议用-这个 su root 普通用户需要执行特殊指令&…...

lwip 3. 网线拔掉后 lwip_recvfrom不能返回

当网线被拔掉后,‌LWIP的lwip_recvfrom函数无法返回,‌这通常意味着网络连接已经断开,‌而LWIP没有自动检测到这种断开并进行相应的处理。具体卡在这个地方: ret xQueueReceive(mbox->mbx, &(*msg), portMAX_DELAY); //具…...

Linux环境安装Docker Engine

Docker是一个开源的应用容器引擎,由Go语言开发,基于Linux内核技术。Docker通过将应用及其依赖打包到可移植的容器中,实现了应用的快速部署和高效管理。Docker容器具有轻量级、快速启动、可移植性强等特点,能够显著提升资源利用率和…...

大厂面试题分享

大厂面试题分享 Redis持久化方式AOF优缺点RDB优缺点 如何保证Redis和Myql的一致性索引下推输入url到浏览器发生了什么ReentranLock底层原理SpringBoot 的启动流程 Redis持久化方式 Redis提供了两种主要的持久化机制,分别是AOF(Append-Only File&#xf…...

FPGA面试问题整理

1. 逻辑设计中竞争与冒险概念,如何识别和消除? 竞争:在组合逻辑电路中,信号经过多条路径到达输出端,每条路径经过的逻辑门不同存在时差,在信号变化的瞬间存在先后顺序。这种现象叫竞争。 冒险:由…...

3Done学习笔记

一、基本操作 1、旋转视角 使用左下角立方体选择; 右键可以拖动视角; 中间滑轮按住拖动整个舞台界面。 2、平移和旋转 右键选择移动,有两种方式。 第一种选择起始点,按照起始点位置移动到终止点(边、角、中心点…...

AI学习指南深度学习篇-卷积层详解

AI学习指南深度学习篇-卷积层详解 一、引言 随着人工智能技术的不断发展,深度学习作为人工智能领域的热门分支之一,正在逐渐成为各个领域的核心技术。而在深度学习中,卷积神经网络(Convolutional Neural Network,CNN…...

2024年TI杯E题-三子棋游戏装置方案分享-jdk123团队-第二弹 手搓机械臂

第一弹赛题的选择与前期方案的准备 opencv调用摄像头bug的解决 机械臂的组装 采用三个舵机,组成一个三自由度的机械臂。 并且利用电磁吸盘的方式,完成对棋子的抓取工作,后面的事实证明,在预算不足的情况下,队友手搓…...

如何在Java、C、Ruby语言中使用Newscatcher API

Newscatcher 世界实时新闻聚合API 一款强大的数据服务工具,它通过先进的网络爬虫技术,实时从全球超过70,000个新闻源聚合新闻内容。这个API能够提供全面、多角度的新闻报道,包括但不限于标题、作者、发布日期、全文内容以及媒体资源链接。它使…...

集合: Collection的成员方法和相关实现类

Collection: - List(有序【指的是存储和取出的顺序是一致的】且可以发生重复,且有索引的概念) - ArrayList: 底层数据结构是数组,查询快,增删慢,线程不安全的,效率高。 - …...

过滤器与监听器:深入了解 Java Web 开发中的核心概念

在 Java Web 开发中,过滤器(Filter)和监听器(Listener)是两个重要的组件,它们帮助开发者在请求处理的各个阶段进行预处理和后处理。这篇博客将深入探讨这两个概念,并展示它们如何在实际应用中发…...

【Linux学习】动静态库从原理到制作

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 🍑动静态库🐟动静态库的制作与使用🚀生成静态库🔒生成动态库 🦌动态库的查…...

WPF篇(10)-Label标签+TextBlock文字块+TextBox文本框+RichTextBox富文本框

Label标签 Label控件继承于ContentControl控件,它是一个文本标签,如果您想修改它的标签内容,请设置Content属性。我们曾提过ContentControl的Content属性是object类型,意味着Label的Content也是可以设置为任意的引用类型的。 案…...

JavaFX对话框控件-ChoiceDialog

JavaFX对话框控件-ChoiceDialog 常用属性titlecontentTextinitOwnergraphicheaderTextdefaultValuechoicesdialogPane 常用事件显示事件setOnShowing显示事件setOnShown弹框按钮点击 综合案例自定义下拉框内容 与Alert大部分功能类似按钮不可以自定义多一个下拉框 常用属性 …...

一文了解BTC中的二层协议中Nervos network,CKB,RGB++,UTXO stack 之间的关系

注:该内容不构成投资建议,有些内容摘抄其他地方,如侵权,请联系删除。 Nervos network Nervos Network 是一个开源的区块链生态项目,该项目提供一套解决方案来应对区块链扩展性和互操作性的问题。 Nervos Network 成立…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...