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

了解LVS,配置LVS

项目一、LVS

1.集群Cluster

Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统

LB:负载均衡

HA:高可用

HPC:高性能计算

2.分布式

分布式是将一个请求分成三个部分,按照功能拆分,使用微服务,分布式的静态资源放在不同的存储集群上

3.集群和分布式

集群:是同一个业务系统,部署在多台主机上,且这多台主机实现的功能没有差别,都能独立完成访问请求,且数据代码都是一样的

分布式:一个业务被拆成多块,部署在多台主机上,每一个主机完成一块内容

而一般来说集群和分布式是放在一起去使用的

4.lvs功能介绍

lvs:负载调度器,内核集成

四层与七层的区别:lvs只有四层(四层负载),最多只到传输层(端口管理),它可以mac地址以及ip和端口,也就是说lvs无法将请求数据报文拆开看里面的访问请求,也就无法知道是动态还是静态,无法进行调度

5.lvs-nat模式原理及部署方法

nat模式客户的ip不变要变的是目的地址的ip

首先准备四台主机,分别做lvs,以及realserver(三台)

VS(负责调度)根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

VS:调度器

RS:后端真实主机

CIP:客户IP

VIP:客户访问LVS的接口IP

DIP:lvs访问内部的接口IP

5.1lvs配置

添加两块网卡,一块nat,一块仅主机

然后给两块网卡配IP,nat网卡(eth0)配172.25.254.100,仅主机(eth1)配192.168.0.100,然后进入eth1的网卡配置文件将网关以及dns删除

然后打开lvs中的核路由功能

[root@lvs ~]# sysctl -a | grep ip_forward

-a:显示所有的内核参数

将过滤出的net.ipv4.ip_forward = 1写入/etc/sysctl.conf中

执行sysctl -p生效

在lvs中安装lvs软件

dnf install ipvsadm -y

ipvsadm -Ln#查看策略

此时的ipvsadm的策略文件是没有东西的,cat /etc/sysconfig/ipvsadm,于是我们要自己写

ipvsadm -A -t 172.25.254.100:80 -s rr#-A:增加虚拟服务器,-t:协议,客户访问100的时候开始调度,-s:指定调度的算法,rr:轮循算法

ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m#-m:模式是nat,-r:realserver,-w:指定权重

pvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

5.2原理

客户把流量发到了vip上,vip得到流量后去读取lvs规则,看是给谁的,给自己的则去看调度算法,按照调度算法,对后端的RS进行调度,rr轮循调度,数据流量通过DIP扔向RS1一次,RS2一次,扔过来后RS看到请求,RS此时看到的请求时DIP访问,但源IP不会改变,还是cip,但rs无法扔向cip于是它只能扔向自己的网关,网关会处理数据请求最后通过VIP发到真实的客户

保存策略

ipvsadm-save > /etc/sysconfig/ipvsadm

5.3两台RS主机配置

将这两台主机改为仅主机的网卡

配置ip地址分别为192.168.0.10和192.168.0.20,然后进入网卡配置文件将网关改为192.168.0.100然后重启网卡服务nmcli connection reload;nmcli connection up eth0,然后在这两台主机下载httpd,并开器服务,在默认发布目录/var/www/html下写要发布的内容写在index.html

6.lvs-DR模式

减轻VS的压力

6.1dr的工作模式详解

ant模式下调度器压力过大,于是RS不再由vs(调度器)返回数据,而是直接返回给客户机

DR模式数据传输过程

LVS以及RS1、RS2都需要配置vip,LVS的VIP用于响应客户端请求,RS1和RS2的vip用于将数据传给后端主机,在进行配置时,要将RS1和RS2中的arp广播关闭,抑制arp请求(不关闭的话就有三个vip响应请求)

6.2LVS-DR模式的实现

首先准备5台虚拟机,一台为client,一台为router,一台为LVS,剩下两台为Realserver

client配置

配置ip地址为172.25.254.200,编辑网卡配置文件vim /etc/NetworkManager/system-connection/eth0.nmconnection,修改网关为172.25.254.100

router配置

先给路由器添加一块仅主机的网卡,然后分别给这两块网卡配置iP,nat的ip为172.25.254.100,仅主机的IP是192.168.0.100,然后将仅主机网卡的网关删除,IP配置完后,要开启内核中的路由功能

sysctl -a | grep ip_forward#找到IP转发功能

vim /etc/sysctl.conf #将net.ipv4.ip_forward = 1(开启IP转发功能)写入设置内核参数的配置文件

Realserver配置

配置rip为192.168.0.10与192.168.0.20网关为192.168.0.100,并在这两台realserver中关闭arp请求

[root@webs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #关闭arp请求

[root@webs1 ~]# echo 2> /proc/sys/net/ipv4/conf/all/arp_announce

[root@webs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@webs1 ~]# echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce

然后分别在这两台主机中添加vip:ip a a 192.168.0.200/32 dev lo(环回用32)

7.TUN模式

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)

7.1TUN模式数据传输过程

1.客户端发送请求数据包,包内有源IP+vip+dport

2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1

3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client

7.3TUN模式特点

1.DIP, VIP, RIP都应该是公网地址

2.RS的网关一般不能指向DIP

3.请求报文要经由Director,但响应不能经由Director

4.不支持端口映射

5.RS的OS须支持隧道功能

8.fullnet模式

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发 CIP --> DIP VIP --> RIP

1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP

2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client

3.请求和响应报文都经由Director 4.支持端口映射

9.lvs算法

9.1lvs静态调度算法

弊端:服务器配置不一致,可能会导致某一个服务器崩溃(一个服务器很忙,一个服务器很闲)

session:客户端与服务建立的沟通,保存在服务器

1.RR:roundrobin轮询rs分别调度,当rs配置有差别时不推荐(你一个我一个)

2.WRR:weight rr加权轮询(权重:给谁多点给谁少点)

3.SH:source Hashing对源进行Hash,将来自于同一个IP地址的请求始终发往第一次挑中的rs,从而实现会话绑定(对源地址进行Hash运算运算出一个值后LVS的session就会记录下来,来源的ip经过运算和记录的Hash一致就打到同一个服务器上)

4.DH:destinationHash,目的地址Hash,第一次轮询调度至rs,后续将发往同一个目标地址的请求始终发送至第一次挑中的rs,典型使用场景是正向代理缓存场景中的负载均衡(对目的地址进行Hash,同一个目的地址调度到同一个主机)

9.2lvs动态调度算法

1.LC(最少链接):活动链接数x256+非活动链接数

2.WLC(权重最少链接):默认调度方法=活动链接数x256+非活动链接数/weight(第一次可能打到性能不好的服务器)

3.SED(初始链)接高权重优先):(活动链接数+1+非活动链接数)x256/weight(虽然第一次能打到好的服务器但是经过几轮后它还是会持续将流量打到这个服务器)

4.NQ:第一轮均分,后续SED

5.LBLC:动态DH算法,根据负载均衡实现正向代理

6.LCLBR:带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

7.FO(灰度发布):当服务器承接大量链接,我们可以对服务器进行过载标记,那么vs调度器就不会把链接调度到有过载标记的主机中(当服务需要更新时,可以通过污点标记,使流量前往下一个服务器)

8.OVF

10.lvs-火墙mark标记解决调度问题

10.1为什么打标记

在lvs中加入443端口的集群,加入后现在有两个集群80和443,且这两个集群调度的主机时同一个,那么这个调度时有问题的,比如现在访问80的集群调度到10,而访问443应该调度到20上,然而它并没有这样去调度,根本原因是因为这两个是分开控制的,所有我们可以通过火墙标记来解决轮询调度问题

10.2参数说明

iptables -t mangle(附加说明) -A PEROUTING(表示在进厂前就要做的事) -d(目的地) $vip -p(协议) $tcp/Udp -m multiport(为多个端口打上一个标记,把这个端口变为一个组,访问这个组里的端口视为访问同一个标记) --dports $port1,port2 -i MARK --set-mark $number

10.3配置

首先在后端服务器rs1,rs2安装mod_ssl(ssl加密模块让rs支持https)

yum install mod_ssl -y

安装完后给这两台rs重启httpd服务

在lvs中为端口做标记

iptables -t mangle -A PREROIUTING -d 192.168.0.200 -p tcp -m muliport --dports 80,443 -j MARK --set-mark 66#打标记

iptables -nL#查看有没有打上标记

接下来进行调度

先清空ipvsadm -C

ipvsadm -A -f 66 -s rr

ipvsadm -a -f 66 -r 192.168.0.10 -g(直连路由)-i(隧道)-m(nat)

ipvsadm -a -f 66 -r 192.168.0.20 -g

做完后就可以进行测试了

11.lvs持久链接(session会话问题解决)

主要是为了在访问一个网址时,za会话会中断导致数据丢失

解决方案

对调度进行时间设定,不管用什么算法,在同一时间内的数据打到同一台主机,这个时间过了以后就打到另一台主机上

配置

在lvs调度器中设定

[root@lvs ~]# ipvsadm -E -f 66 -s rr -p [3000]

相关文章:

了解LVS,配置LVS

项目一、LVS 1.集群Cluster Cluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统 LB:负载均衡 HA:高可用 HPC:高性能计算 2.分布式 分布式是将一个请求分成三个部分,按照功能拆分,使用微服…...

目标检测综述文章解读——Object Detection in 20 Years: A Survey

论文:Object Detection in 20 Years: A Survey 作者:Zhengxia Zou, Keyan Chen, Zhenwei Shi, Yuhong Guo, Jieping Ye 链接:https://arxiv.org/abs/1905.05055 这是一篇关于目标检测综述性文章,自2019年5月第一次提交后&#xff…...

Android make_vbmeta_image的参数值定义

网上生成vbmeta_system.img的命令,分析下这些参数的赋值,key的路径 out/host/linux-x86/bin/avbtool make_vbmeta_image --algorithm SHA256_RSA2048 --key device/mediatek/system/common/key/rsa2048/oem_prvk.pem --padding_size 4096 --rollback_index 0 --...

代码规范 —— 并发编程规范

优质博文:IT-BLOG-CN 【1】【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明: 资源驱动类、工具类、单例工厂类都需要注意。 【2】【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。…...

仪器仪表控制:pymeasure常用模块以及API

下面是对 pymeasure.experiment 模块中各类和方法的详细介绍,包括它们的功能和用法。 pymeasure.experiment 模块详细介绍 Experiment 类 Experiment 类是 Pymeasure 中用于定义和管理实验的核心类。它包含实验的设置、执行和数据记录等功能。 构造函数 class …...

如何理解openfoam案例里面的blockMesh文件里面的simpleGrading

总结: simpleGrading参数分为xyz三个方向。如果你想使得网格在某个方向上更密集,可以在simpleGrading中将该方向的渐变率设置为小于 1 .更稀疏则设置大于1. 一、案例 比如我这个爆炸案例: 对应的blockMeshDIct文件如下: // 定…...

算法竞赛的制胜法宝:被严重低估的位运算究竟有什么用?

大家好,我是干货哥。今天咱们来聊聊一个让很多人都忽略的神技——位运算。等等,你是不是已经准备关掉这篇文章了?你以为位运算只是计算机底层的鸡肋操作?你以为这些不过是编程语言里最基础、最无趣的东西?但真的是这样…...

Qt QTableWidget 去除序号列

ui->tableWidget->verticalHeader()->setHidden(true);//垂直序列号(表左侧)ui.tableWidget->horizontalHeader()->setHidden(true);//水平序列号(表上方)删除后效果图:...

【C++】5.类和对象(3)

文章目录 3.析构函数析构函数的特点: 4.拷贝构造函数拷贝构造的特点: 3.析构函数 析构函数与构造函数功能相反,析构函数不是完成对对象本身的销毁,比如局部对象是存在栈帧的,函数结束栈帧销毁,他就释放了&…...

CTF-RCE

eval执行 ?cmdsystemctl("ls"); ?cmdsystemctl("ls /"); ?cmdsystemctl("cat /flag_27523); 命令注入 输入ip试试发先可以执行 127.0.0.1 查看一下看看有社么 127.0.0.1 | ls 试着看看php文件 127.0.0.1 | cat 297581345892.php 貌似这个文件有…...

谷歌账号登录时,多次验证后变成“您的计算机或网络可能在发送自动查询内容”,原因分析和解决建议

最近有多个朋友联系GG账号服务,反馈说谷歌账号登录的时候,提示谷歌账号活动异常,需要输入手机号验证,但是自己的手机号无法验证,要不提示无法用于进行验证,要不提示用于验证的次数过多。 有一些朋友第一次遇…...

【SpringMVC】详细介绍SpringMVC的执行流程

目录 1. 概念 2.SpringMVC工作原理 3. springMVC的简单使用 1.在pom.xml中导入相关依赖 2.在web.xml中配置dispatcherServlet 3.创建springMVC.xml核心配置文件 4. SPringMVC分层后各个模块的作用 1. 概念 什么是MVC? MVC是下面三个组件的简写,模型…...

工地云SaaS系统,通过物联网与可视化等先进技术的综合应用,搭建的智慧工地管理云平台源码

通过物联网与可视化等先进技术的综合应用,搭建智慧工地管理云平台。以绿色、安全施工管理为主线,从人员、设备、环境、监控#度管理、施工管理、工程管理等多个维度对现场要素进行信息化,实现数据实时更新、人员精确管理、风险及时预警、管理便…...

使用自定义注解和AOP解决登录校验问题

1、如果每次都从Redis获取token,会有很多冗余代码 2、使用面向切面编程的思想 在不改变源代码或者很少改变源代码的情况下,增强类的某些方法。 在业务代码之前设置 切入点 创建切面类,也就是比如登录校验的某些公共方法 切面类从切入点切入流…...

【数据结构初阶】队列

hello! 目录 一、概念与结构 二、队列的实现 Queue.h Queue.c test.c 一、概念与结构 1、概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。 入队列:进行插入操作…...

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品? b端产品是指面向企业或组织的经营管理问题,旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型,可以为企业带来深…...

2024年6月 青少年python一级等级考试真题试卷

202406 青少年软件编程等级考试Python一级真题 试卷总分数:100分 第 1 题 在使用turtle绘制图形时,如果要控制小海龟移动到 x 坐标为 200,y 坐标为150 的位置,以下代码能够实现效果的是?( ) …...

TCFormer:通过标记聚类Transformer实现视觉识别

摘要 Transformer在计算机视觉领域得到了广泛应用,并取得了显著成功。大多数最先进的方法将图像分割成规则网格,并用视觉标记表示每个网格区域。然而,固定的标记分布忽略了不同图像区域的语义含义,导致性能次优。为了解决这个问题…...

haproxy实现七层负载均衡详解(基本配置与算法)

目录 一、haproxy介绍 1.1 haproxy工作原理 1.2 相关配置类型 二、全局配置 2.1相关参数说明 2.2实验示例 实验环境: 2.2.1 设置多进程 2.2.2 设置日志显示 三、proxies代理配置 3.1 参数说明 3.2 default配置相关属性参数 3.2. 配置前端fronttend后端ba…...

海量日志数据收集监控平台应该怎么设计和实现

设计和实现一个海量日志数据收集和监控平台,需要考虑以下几个关键方面:数据采集、数据存储、实时处理、监控与告警、可视化分析、扩展性和高可用性。以下是一个详细的设计和实现方案: 1. 需求分析 日志来源:明确日志的来源&…...

Windows图形界面(GUI)-MFC-C/C++ - CSliderCtrl

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 CSliderCtrl 创建滑动条 设置滑动条属性 成员函数 消息处理 注意事项 示例代码 CSliderCtrl 创建滑动条 在对话框编辑器中,从工具箱中拖拽一个Slider Control到对话框…...

常见中间件漏洞复现之【WebLogic】!

Weblogic介绍 WebLogic是美国Oracle公司出品的⼀个application server,确切的说是⼀个基于JAVAEE架构的中间件,默认端⼝:7001 WebLogic是⽤于开发、集成、部署和管理⼤型分布式Web应⽤、⽹络应⽤和数据库应⽤的Java应⽤服务器。将Java的动态…...

Linux服务器中限制远程IP登录的深入指南

在当今的数字化时代,Linux服务器的安全性是企业和个人用户不可忽视的重要方面。远程登录,尤其是通过SSH(Secure Shell)协议,是服务器管理中最常见的操作之一。然而,不限制远程登录的IP地址可能会暴露服务器…...

卫星通信中的拥塞控制算法

结论:现有的Cubic和BBR2算法可直接用于卫星通信网络的拥塞控制中,专为卫星设置的拥塞控制算法目前没有集成到系统中,但各自的性能表现需要根据实测情况进行取舍。 TCP Hybla...

全网​​​​​​​​超详细haproxy七层代理

一:负载均衡 1、概念 负载均衡: Load Balance ,简称 LB ,是一种服务或基于硬件设备等实现的高可用反向代理技术, 负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或设 备&…...

Docker日志文件全局配置

这段配置是Docker容器的日志驱动配置,具体来说是json-file日志驱动的配置。这个配置的作用是定义容器日志文件的大小和数量限制。 {"log-driver": "json-file","log-opts": {"max-size": "500m","max-file…...

bia文件中码偏差对实时PPP解算分析

1. 码偏差对定位影响 码偏差对未知收敛时间有影响,对最终精度影响不大(权比1000:1)...

探索list与iterator的区别及yield的用法

1 问题 探索list与iterator的区别探索yield的用法 2 方法 通过网上学习后了解到 List返回的类型是list,list只会查询一级缓存。list()中返回的List中每个对象都是原本的对象。查询的时候没遍历一个对象会产生一条sql;而iterator这个迭代器返回的类型是it…...

github技巧和bug解决方法短篇收集

有一些几句话就可以说明白的观点或者解决的的问题,小虎单独收集到这里。 Commits没有算入每天的activity fork的仓库是不算的。 Commits made in a fork will not count toward your contributions. 参考: Contribution activity not shown for github…...

学习笔记五:在k8s中安装EFK组件(elasticsearch+fluentd+kibana)

在k8s 1.3安装EFK组件 前置条件上传压缩包安装nfs供应商创建nfs作为存储的供应商通过deployment创建pod用来运行nfs-provisioner 安装elasticsearch组件安装kibana组件安装fluentd组件 前置条件 查看k8s版本 kubectl get node -owide相关安装包 链接:https://pan.ba…...