LVS负载均衡+集群+三种工作模式+调度算法及实战案例

news2024/12/26 23:16:50

一、LVS

1.1简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩主导开发的开源负载均衡项目,目前,LVS已经被集成到Linux内核模块中。该项目实现了在基于IP的数据基础上,请求负载均衡调度方案,LVS支持多种调度算法,如轮询、最少连接、源地址哈希等,用于决定请求的转发方式。

1.2 LVS的集群体系结构及概念

1.2.1 集群结构

1.2.2 LVS的概念
VS Virtual Server
RS Real Server
CIP Client IP
VIP: Virtual serve IP VS 外网的 IP
DIP: Director IP VS 内网的 IP
RIP: Real server IP

1.3 LVS的集群类型

类型内容
lvs-nat
修改请求报文的目标 IP, 多目标 IP DNAT
lvs-dr(直接路由)
操纵封装新的 MAC 地址
lvs-tun(了解)
在原请求 IP 报文之外新加一个 IP 首部
lvs-fullna(了解)
修改请求报文的源和目标 IP

1.3.1 nat模式

①客户机(client)向LVS发送访问请求,请求数据包中包含CIP(来源),VIP(访问目标地址),端口号

②lvs服务器接收到访问请求并且将请求数据包中的目的地由VIP换成web的RIP和相应端口

③web响应请求,发送响应数据包,包中含有响应报文RIP、响应目标CIP、响应端口

④LVS接收到响应数据包,改变数据包中的数据来源(即LVS的VIP),响应目标端口

⑤LVS将修改后的数据包发送给客户机(client)

注意:在实验过程中,为了保证实验正常进行,要将所有的防火墙全部关闭。
1.3.2 dr模式

与nat不同,dr在接收到访问请求后不需要回传给LVS调度器,直接把响应数据发送給客户端client,所以web和LVS都要有VIP

①client发送访问请求给LVS调度器,内容为client的IP+MAC+VIP+VIP的MAC

②LVS调度器接收到数据包后,将VIP的MAC修改为web的MAC,此时数据包种有clientIP+clientMAC+VIP+web的MAC

③web得到②中的数据包并且作出响应数据包,内容有VIP+web的MAC+client IP+clientIP

MAC

1.4 LVS的调度算法

1.4.1 LVS的调度算法的类型
类型
静态方法仅仅根据算法本身进行调度,不考虑RS的负载情况
动态方法主要根据RS当前的负载状态及其调度算法调度较小的RS

1.4.2 静态算法
RR
roundrobin 轮询 RS 分别被调度
WRR
Weighted RR ,加权轮询根据 RS 的配置进行加权调度,性能差的 RS 被调度的次数少
SH
将来自于同一个 IP 地址的请求始终发往第一次挑中的RS ,从而实现会话绑定
DH
第一次轮询调度至 RS ,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡

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

1.5 LVs部署命令介绍

1.5.1 LVS相关信息
程序包: ipvsadm
Unit File: ipvsadm.service
主程序: /usr/sbin/ipvsadm
规则保存工具: /usr/sbin/ipvsadm-save
规则重载工具: /usr/sbin/ipvsadm-restore
配置文件: /etc/sysconfig/ipvsadm-config
ipvs 调度规则文件: /etc/sysconfig/ipvsadm
1.5.2  lvs集群的增删改
1.5.2.1 常用参数总结
命令解释
-A/-E/-D添加/修改/删除虚拟服务
-C/-R清除/恢复所有虚拟规则
-t/-u

使用tcp/udp服务

-a/-e/-d添加/修改/删除真实服务
-L显示内核中的所有虚拟服务
-n以数字形式显示端口号
-c显示ipvs的连接情况
-w配置真实服务的权重
-s

配置负载均衡算法 rr/wrr/lc

-timeout显示配置的tcp/udp超时时间
-rate显示输出速率信息
-f/-r查看火墙/真实服务地址
-m/-g/-i真实服务使用nat/DR/ipipi模式

1.5.2.2 示例

添加一个虚拟服务 192.168.0.200:80    使用轮询

ipvsadm -A -t 192.168.0.200:80 -s rr

修改上述算法为加权轮询

ipvsadm -E -t 192.168.0.200:80 -s wrr

删除服务

ipvsadm -D -t 192.168.0.200:80 -s wrr

添加一个真实服务 172.25.254.100:80    使用nat模式    权重为2

ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2

修改权重为3  模式为DR

ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -g -w 3

删除服务

ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2

不再一一展示。

二、 负载均衡

2.1 什么是负载均衡

负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理。

2.2 为什么要使用负载均衡

1、动态水平拓展web服务器

2、增加业务并发访问及处理能力(可以解决单服务瓶颈问题)

3、节约公网IP

4、配置简单,功能丰富,性能较强

2.3负载均衡的类型

2.3.1 四层结构(常使用TCP)

2.3.2 七层结构(常使用HTTP)

三、集群和分布式简介

3.1 集群

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

常见的三种内型:

类型
LB(负载均衡)由多个主机组成,每个主机只承担一部分访问
HA(高可用)A=MTBF/(MTBF+MTTR) 
HPC了解

3.2 分布式

一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。
分布式的每一个节点都在完成不同的业务,一个节点跨了,业务就可能会失败。
分布式常见应用作用
分布式应用按照功能拆分,使用微服务
分布式静态资源静态资源放在不同的存储集群上
分布式数据及储存使用key-value缓存系统
分布式计算

四、实战

4.1 实验环境

nat模式下的集群案例
主机ipvip扮演的角色
lvs192.168.0.100(仅主机)172.25.254.100调度器
web1192.168.0.10(仅主机)null真实服务器(RS)
web2192.168.0.20(仅主机)null真实服务器(RS)

DR模式下的集群案例
主机ipvip扮演的角色
client172.25.254.200(nat)null测试机(VS)
router

nat:172.25.254.100

仅主机:192.168.0.100

null路由器
LVS192.168.0.50(仅主机)192.168.0.200/32调度器
web1192.168.0.10(仅主机)192.168.0.200/32真实服务机(RS)
web2192.168.9.20(仅主机)192.168.0.200/32真实服务机(RS)

4.2 配置实验环境

1、在LVS中启动内核路由功能

查看是否启动,0否1是,我这里没有打开,我们写入一条命令到配置文件 /etc/sysctl.conf 中,将ipv4.ip_forward 打开

安装ipvsadm软件并启动

# 安装
dnf install ipvsadm -y

# 启动
systemctl enable --now ipvsadm

2、在web1、web2下载httpd并启动

yum install httpd -y
# 下载

systemctl enable --now httpd
# 启动

3、在/var/www/html/ 目录下创建一个名为 index.html 的文件,‌并将字符串 "webserver1 - 192.168.0.10" 作为该文件的内容写入。这样当用户访问该服务器时,‌将会看到这个字符串作为欢迎信息或测试信息

/var/www/html是Web服务器上存放网页文件的默认目录,‌index.html 是该目录下的一个重要文件,‌通常是服务器的默认主页。‌

# 在web1中写入:
echo web1 - 192.168.0.10 > /var/www/html/index.html

# 在web2中写入:
echo web2 - 192.168.0.20 > /var/www/html/index.html

4、先测试一下,到这里表示我们前面没有出问题

我在启动的时候失败了,出现下面的报错信息:

# 8月 09 19:46:59 LVS bash[33142]: /bin/bash:行1: /etc/sysconfig/ipvsadm: 没有那个文件或目录

解决方法很简单,我也放在下面了:

[root@LVS ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@LVS ~]# systemctl restart ipvsadm   # 重新启动ipvsadm

我们再次查看ipvsadm的状态,就ok了

5、上述是在nat模式下的集群案例,策略及规则制定参考1.5.2.2,此处展示我的测试结果图(我直接在lvs机子上测试的,效果一样)

6、在nat的基础上,我们要完成DR模式下的集群案例实验,只需要增加 router 和 client 两个主机,修改web1和web2的配置文件,修改LVS的IP即可。具体步骤展示在下图:

client主机环境配置:

router主机环境配置:

LVS调度器环境配置:

web1环境配置:

web2环境配置:

4.3 VIP的响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore
0:默认值,可使用本地任意接口上配置的任意地址进行响应
1:只有当请求的目标IP配置在本地主机接收到请求报文的接口上时,才会响应

限制通告级别:arp_announce
0:默认值,本机所有接口 所有信息 向所有接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

4.4 具体配置

要点:

1、每个web都要配VIP并且可以出外网

2、DR服务器要采用双IP桥接网路,VPP/DIP

配置内容如下:

在 LVS、web1、web2  中设置vip

LVS:
[root@LVS ~]# ip a a dev lo 192.168.0.100/32

web1:
[root@web1 ~]# ip a a dev lo 192.168.0.100/32

web2:
[root@web2 ~]# ip a a dev lo 192.168.0.100/32

在web1和web2中解决响应问题

[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce



[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

在LVS中配置策略

[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0

在主机client中测试,根据我们所制定的策略可以发现以下轮询正确

[root@client ~]# for N in {1..10};do curl 192.168.0.200;done
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20

4.5 问题的解决

问题一:轮询过程遇到的问题

在web1、2下载并安装mod_ssl并且重启httpd

yum install mod_ssl -y
systemctl restart httpd

添加443端口的策略,如图


[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0
TCP  192.168.0.200:443 rr
  -> 192.18.0.10:443              Route   1      0          0
  -> 192.18.0.20:443              Route   1      0          0

测试

[root@client ~]#  curl http://192.168.0.200;curl -k https://192.168.0.200
web1 - 192.168.0.10
web1 - 192.168.0.10

问题二:火墙mask标记解决调度问题

在调度器(LVS)设置端口标签,将80,443当作一个整体

[root@LVS ~]# iptables -t mangle -A  PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK  --set-mark 66

查看规则是否制定成功

[root@LVS ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       6    --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x42

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination


[root@LVS ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g

测试结果


[root@client ~]#  curl 192.168.0.200;curl -k https://192.168.0.200
web2 - 192.168.0.20
web1 - 192.168.0.10
[root@client ~]# curl -k https://192.168.0.200
web2 - 192.168.0.20
[root@client ~]# curl -k https://192.168.0.200
web1 - 192.168.0.10
[root@client ~]# curl -k https://192.168.0.200
web2 - 192.168.0.20
[root@client ~]# curl -k https://192.168.0.200
web1 - 192.168.0.10

以上是我在LVS调度服务学习过程的一些总结及理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1996061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将PDF文件压缩到最小?五个pdf压缩方法,一键将体积减小70%!

将pdf文件压缩得更小一点,不仅节省设备的存储空间,让电脑运行得更流畅,还有助于我们快速的将pdf文件分享给好友同事。 pdf压缩方法有很多,本文整理了几个关于电脑文件压缩的方法,适用于各个操作系统的电脑,…

已解决:VS2022安装插件提示重复,又卸载不掉的问题(”此扩展已经安装到所有适用的产品”)

本问题已得到解决,请看以下小结: 关于《VS2022扩展插件安装失败》的解决方案 记录备注报错时间2024年报错截图插件安装界面提示”此扩展已经安装到所有适用的产品”无截图 报错原因安装会扫描是否含有该插件,卸载则需要输入插件id解决步骤 第…

【精选】推荐6款AI网站推荐论文工具平台

在当前的学术研究和论文撰写过程中,AI写作工具已经成为许多学生和研究人员的重要助手。这些工具不仅能够提高写作效率,还能帮助解决复杂的写作问题。以下是六款推荐的AI网站,它们在毕业论文写作中表现尤为出色。 一、千笔-AIPassPaper 千笔-…

循环神经网络六-Pytorch中的序列化器

目录 一.梯度消失 二.梯度爆炸 三.解决梯度消失或者爆炸 四序列化器 1.nn.sequential 2.nn.BatchNormld 3.nn.Dropout 一.梯度消失 假设我们由四层神经网络,每一次只有一个神经元X 那么在计算它的梯度的时候就有:▽w1 x1f(a1)’w2f(b1)’w3*▽ou…

向量新增的3种方式

本文介绍向量检索服务如何通过控制台、SDK、API三种不同的方式新增向量。 前提条件 已开通向量检索服务。如未开通,请先开通服务。 已创建Collection。 控制台方式 登录向量检索服务控制台。 在左侧导航栏单击Cluster列表,选中需要新增向量的Collecti…

创意设计师必看:9个强大的页面设计工具推荐

网页设计并不容易,实用的网页设计工具更难找到。随着网络的快速发展,网页迅速崛起,网页设计也很流行。本文收集了7种良知和实用的网页设计工具,每一种都受到网页设计师的青睐,以确保易于使用和使用。我希望它能帮助你提…

leetcode53_最大子数组和

思路 动态规划 dp 数组&#xff1a;dp[i] 代表已元素nums[i]结尾的连续子数组的最大和 func maxSubArray(nums []int) int {dp : make([]int, len(nums))dp[0] nums[0]ans : nums[0]for i:1; i < len(nums); i {if dp[i-1] < 0 {dp[i] nums[i]}else{dp[i] dp[i-1] …

mysql8.4.2数据库做主从复制

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包-CSDN博客文章浏览阅读472次&#xff0c;点赞7次&#xff0c;收藏4次。linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包https://blog.csdn.net/xikui1551/article/de…

对象字面量

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

nuxt 重构已有vue项目使用心得

用现有的vue-cli 项目 改成 nuxt 项目 真的是废了 好大的劲 因为之前的项目是中大型项目 重新改成html css 可能废很大工作量这次采用nuxt 框架来重新构架 因为2个项目都是基于vue 编写 1.将之前的src 文件夹 整个拖进去 在nuxt.config.js 引入 srcDir: "src/" 2.…

mysql数据库之运算符

安全等于运算符(<=>) 这个操作符和 = 操作符执行相同的比较操作,不过<=>可以用来判断NULL值。在两个操作数均为NULL时,其返回值为1而不为NULL;而当一个操作数为NULL时,其返回值为0而不为NULL。 下面分别是 SELECT NULL <=>1 SELECT 1<=>0 SEL…

力扣面试经典算法150题:买卖股票的最佳时机

买卖股票的最佳时机 今天的题目是力扣面试经典150题中的数组的简单题: 多数元素 题目链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个数组 prices&#xf…

waveInAddBuffer死锁的大雷解决

项目场景&#xff1a; 从来没有一个bug让我这么抓狂&#xff0c;足足查了3天3夜&#xff0c;官方文档翻了一遍说的基本无用。具体项目就是使用waveIn系列函数获取windows系统麦克风数据&#xff0c;虽然windows上有好几种方法获取麦克风数据&#xff0c;我最终还是选择了它。 …

导函数相对于原函数特有的性质

引入 f(x) 在区间[a,b]上存在&#xff0c;函数值之间是无牵无挂的&#xff0c;连续存在还是间断存在都不一定。f(x) 在区间[a,b]上连续&#xff0c;函数值之间距离是一个无穷小量。f(x) 在区间[a,b]上可导&#xff0c;函数值之间距离是一个比连续跟小的无穷小量&#xff0c;函…

2024剪辑神器盘点:四大热门剪辑软件推荐!

亲爱的朋友们&#xff0c;想要制作出精彩短视频&#xff0c;却苦于找不到合适的剪辑工具&#xff1f;别担心&#xff0c;今天要向大家推荐几款剪辑软件&#xff0c;它们能帮助大家更好地完成视频创作&#xff01; 福昕视频剪辑 链接&#xff1a;www.pdf365.cn/foxit-clip/ 对…

基于VEH的无痕HOOK

这里的无痕HOOK指的是不破坏程序机器码,这样就可以绕过CRC或MD5的校验。 VEH利用了Windows的调试机制和异常处理,人为抛出异常,从异常的上下文中获取寄存器信息。 DLL入口 // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include "CHoo…

PI-GNN论文翻译.md

PI-GNN论文翻译 Continual Learning on Dynamic Graphs via Parameter Isolation 基于参数隔离的动态图的持续学习 ABSTRACT 许多现实世界的图学习任务需要处理出现新节点和边的动态图。动态图学习方法通常会遇到灾难性遗忘问题&#xff0c;即先前图学到的知识会被新图的更…

VueTreeselect自定义label

插槽 使用插槽 //node.raw&#xff1a;所有传入的数据项<treeselectv-model"areaCode":options"deptOptions":normalizer"normalizer"><div slot"value-label" slot-scope"{ node }">{{ node.raw.title }}<…

CommonJs模块化简明笔记

1、什么是模块化 模块化是指将一个复杂的程序依据一定的规则&#xff08;规范&#xff09;封装成几个块&#xff08;文件&#xff09;&#xff0c;并进行组合在一起。 最早我们开发将所有的代码写在一个js文件中&#xff0c;随着需求越来越复杂&#xff0c;代码量越来越大&am…

硬盘文件数据销毁|文件销毁|硬盘销毁|数据销毁|中国成就的伟大与数据安全在新时代国家安全中的关键作用

在当今世界&#xff0c;中国的发展成就举世瞩目&#xff0c;但令人惊讶的是&#xff0c;大多数人可能并未充分意识到其伟大之处。与此同时&#xff0c;数据安全作为国家安全的重要组成部分&#xff0c;其重要性在新时代愈发凸显。 二、中国取得的伟大成就 中国在经济领域的崛起…