LVS-负载均衡

news2025/1/11 11:47:51

目录

一、概念

二、LVS工作原理

1. ipvs/ipvsadm

2.名词:

三、常用命令

四、工作模式

1.NAT地址转换模式

(1)工作流程

(2)特点

(3)实验过程

a.环境准备:

b.修改测试机的IP信息:

c.修改负载均衡服务器网卡信息

d.修改应用服务器的IP

e.负载均衡服务器-配置集群

f.测试机访问测试

g.应用服务器监听日志

h.测试机进行压力测试

2.DR路由模式

(1)工作流程

(2)特点

(3)实验过程

a.客户端修改IP

b.应用服务器修改IP

c.负载调度器修改IP

d.路由器修改IP

e.负载调度器配置路由转发

f.应用服务器配置

g.负载调度器创建集群

h.客户端访问测试

i.路由器配置DNAT规则

j.客户端访问测试

k.路由器配置SNAT规则

l.应用服务器关闭长连接

m.测试机访问测试

3.IP Tunneling (IP 隧道)模式

(1)工作流程

(2)特点

五、负载均衡算法

1.静态算法:

2.动态算法


一、概念

        LVS" 通常指的是 "Linux Virtual Server",这是 Linux 内核中的一种负载平衡解决方案。Linux Virtual Server 用于提升网络服务的可扩展性和可靠性,它通过将传入的请求分发到后端服务器集群来实现。

二、LVS工作原理

1. ipvs/ipvsadm

  • IPVS钩子函数,内核机制,在请求没有到达目的地址之前,捕获并取得优先控制权的函数。把所有的数据包根据匹配判断规则审核,决定如何处理(内核机制
  • IPVSADM工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真实的服务器(管理命令

   

2.名词:

        CIP:客户端IP

        DIP:负载调度器IP(指单个负载调度服务器)

        VIP:集群IP(代表整个服务器组,集群)

        RIP:真实服务器IP

三、常用命令

#命令:
    ipvsadm

#常用参数:
    -A, --add-service:添加一个新服务。
    -E, --edit-service:修改一个已存在的服务。
    -D, --delete-service:删除一个服务。
    -C, --clear:清除所有虚拟服务和它们的服务器。
    -L, --list:列出所有虚拟服务及其的服务器。
    -a, --add-server:向服务添加一个服务器(真实服务器)。
    -e, --edit-server:修改一个真实服务器的参数。
    -d, --delete-server:从服务中删除一个服务器

#服务和服务器指定参数:
    -t, --tcp-service:指定 TCP 服务,需跟上服务地址和端口。
    -u, --udp-service:指定 UDP 服务,同样需跟上地址和端口。
    -f, --firewall-mark:指定使用防火墙标记的服务。
    -r, --real-server:指定真实服务器地址和端口。
    -g, --gatewaying:使用 Direct Routing 网关方式。
    -i, --ipip:使用 IPIP 隧道模式(Tunneling)。
    -m, --masquerading:使用 NAT 模式。

#调度算法参数:
    -s, --scheduler:指定服务使用的调度算法,如 rr(轮询)、wrr(加权轮询)、lc(最少链接)等。
#查看集群
ipvsadm -ln
#查看集群流量信息
ipvsadm -lnt 10.88.54.31:80 --stats
#创建集群
ipvsadm -A -t 192.168.10.110:80 -s rr
#向已存在的集群中添加应用服务器(使用NAT模式)
ipvsadm -a -t 192.168.10.110:80 -r 192.168.11.120:80 -m
ipvsadm -a -t 192.168.10.110:80 -r 192.168.11.130:80 -m
#从指定集群中删除某应用服务器
ipvsadm -d -t 192.168.10.110:80 -r 192.168.11.120:80
#删除集群
ipvsadm -D -t 192.168.79.10.110:80
#修改指定集群内某应用服务器的【模式】和【权重】
ipvsadm -e -t 192.168.10.110:80 -r 192.168.79.11.120:80 -g -w 2
#修改指定集群的算法
ipvsadm -E -t 192.168.10.110:80 -s wrr

四、工作模式

1.NAT地址转换模式

(1)工作流程

1.客户端将请求交给负载调度器,客户端发出数据包,此时这个数据包的源ip为CIP,目标ip为VIP(集群ip)

2.数据包到达负载调度器后,修改数据包的目标ip地址为真实服务器的ip,此时数据包的源ip为CIP,目标ip为RIP

3.将数据包发送给RS,之后RS响应将数据包发回给负载调度器,此时数据包的源ip为RIP,目标ip为CIP

4.负载调度器在转发时,会将源ip地址改为自己的VIP地址,然后再发给客户端,此时数据包的源ip为VIP,目标ip为CIP。

(2)特点

    1.负载调度器和真实服务器,必须位于同一网络

    2.真实服务器的网关必须指向DIP

    3.负载调度器必须位于客户端和真实服务器之间

    4.RIP通常都是私有地址,仅用于各个集群节点通信

    5.支持端口映射

    6.真实服务器可以使用任意操作系统、负载调度器必须是LINUX系统

(3)实验过程

a.环境准备:

四台虚拟机:一台图形化(测试机),一台均衡负载服务器,两台httpd应用服务器

使用10和11网段,测试机修改网卡为vmnet10(仅主机模式);

均衡负载服务器,添加一张网卡,vmnet10(仅主机模式)和vmnet11(仅主机模式);

两台httpd应用服务器vmnet11(仅主机模式)

b.修改测试机的IP信息:

    更改网段,网关指向负载调度器

    修改hosts文件

#均衡负载服务器IP
192.168.10.86    www.hongfuedu.com
c.修改负载均衡服务器网卡信息
#先修改10网段
#查看需要增加的网卡名
ip a

#修改网卡名和11网段,删除UUID

#开启路由转发功能
vim /etc/sysctl.conf
     net.ipv4.ip_forward=1      

#检查路由转发功能是否开启成功
sysctl -p
d.修改应用服务器的IP
#应用服务器一
#修改IP地址,网关指向均衡服务器

#配置访问网页文件
yum -y install httpd

echo “120...” >> /var/www/html/index.html

systemctl restart network httpd
#应用服务器二
#修改IP地址,网关指向均衡服务器

#配置访问网页文件
yum -y install httpd

echo “130...” >> /var/www/html/index.html

systemctl restart network httpd
e.负载均衡服务器-配置集群
#安装命令行
yum -y install ipvsadm

#查看集群
ipvsadm -ln

#创建集群
ipvsadm -A -t 192.168.10.110:80 -s rr

#向192.168.10.110的集群中添加192.168.11.120的应用服务器,-m代表NAT模式
ipvsadm -a -t 192.168.10.110:80 -r 192.168.11.120:80 -m
ipvsadm -a -t 192.168.10.110:80 -r 192.168.11.130:80 -m

#再次查看集群的信息
ipvsadm -ln
f.测试机访问测试
1.先打开浏览器单独访问192.168.11.120和130

2.浏览器访问www.hongfuedu.com
#可以成功,轮询有间隔是应用服务器keepalive的问题

3.多次执行查看效果
curl www.hongfuedu.com
4.关闭长连接
#两台应用服务器执行
cd /etc/httpd/conf.d && cp -a /usr/share/doc/httpd-2.4.6/httpd-default.conf ./

#修改配置文件中KeepAlive值为Off
vim httpd-default.conf
    KeepAlive Off

#重启服务
systemctl restart httpd

5.回到测试机浏览器再次访问浏览器,效果显示成功
g.应用服务器监听日志
#监听浏览器访问日志
tailf /var/log/httpd/access_log

#测试机的浏览器再次刷新,查看日志的变化效果
h.测试机进行压力测试
#查看是否有ab命令
which ab

#安装服务
yum -y install httpd-tools

#进行压力测试
#-c指定并发数量,-n为总访问次数,一次访问100个,共访问10次
ab -c 100 -n 1000 http://www.hongfuedu.com/index.html
ab -c 1000 -n 10000 http://www.hongfuedu.com/index.html

#查看两台应用服务器监听的日志
wc -l /var/log/httpd/access_log

#ab命令执行后再次查看
wc -l /var/log/httpd/access_log

2.DR路由模式

(1)工作流程

1.客户端发出数据包,源ip是CIP,目标ip是VIP

2.依靠路由把数据发送给负载调度器,负载调度器将数据包的源MAC地址修改为DIP的MAC地址。

3.目标MAC地址修改为RIP的MAC地址,此时源ip和目标ip均未修改。

4.由于DS和RS在同一网络中,所以通过二层来传输,通过路由再将数据包发到RS

5.RS接收数据包,之后通过lo接口传送给eth0向外发出,此时的源ip是VIP,目标ip为CIP。

6.最后通过路由发给客户端。

(2)特点

    1.负载调度器和真实服务器,必须位于同一网络

    2.真实服务器的网关必须指向路由器

    3.负载调度只处理入站请求

    4.RIP可以是私有地址,也可以是公网地址

    5.真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统

(3)实验过程

a.客户端修改IP
1.测试机
	a.修改IP地址信息
		IP:192.168.10.86
		网关:192.168.10.81		#网关指向路由器的外网网卡
	  systemctl restart network
b.应用服务器修改IP
应用服务器C7-5
	a.修改IP地址信息
		IP:192.168.11.84
		网关:192.168.11.81		#网关指向路由器的内网网卡
	  systemctl restart network

应用服务器C7-4
	a.修改IP地址信息
		IP:192.168.11.83
		网关:192.168.11.81		#网关指向路由器的内网网卡
	  systemctl restart network

c.负载调度器修改IP
4.负载调度器C7-3
	a.修改IP地址信息
		IP:192.168.11.82
		网关:192.168.11.81		#网关指向路由器的内网网卡
	  systemctl restart network
d.路由器修改IP
5.路由器C7-2
	a.修改IP地址信息
		IP:192.168.10.81
	  systemctl restart network
	b.cd /etc/sysconfig/network-scripts/
	  ip addr		#查看需要增加网卡名称
	  cp -a ifcfg-ens33 ifcfg-ens3*		#添加网卡,修改IP(内网),修改网卡名,删除UUID
	c.vim /etc/sysctl.conf
		net.ipv4.ip_forward = 1		#开启路由转发功能
e.负载调度器配置路由转发
6.负载调度器C7-3
	a.cd /etc/sysconfig/network-scripts/
	  cp -a ifcfg-ens33 ifcfg-ens33:0	#添加子网卡接口,修改IP(VIP)和网卡名
		192.168.11.200
	b.vim /etc/sysctl.conf
		新增:net.ipv4.conf.all.send_redirects = 0	#关闭路由重定向功能(防止更改目标IP)
	  sysctl -p
f.应用服务器配置
7.应用服务器C7-4和C7-5同时控制
	a.yum -y install httpd
	b.echo “83” >> /var/www/html/index.html
	c.systemctl start httpd
	  systemctl enable httpd
	d.vim /etc/sysctl.conf
	新增:net.ipv4.conf.all.arp_ignore = 1	#关闭arp协议关于IP和MAC地址绑定的检查机制
	 	 net.ipv4.conf.all.arp_announce = 2	#关闭arp协议关于IP和MAC地址绑定的检查机制
	  sysctl -p
	e.cd /etc/sysconfig/network-scripts/
	  cp -a ifcfg-lo ifcfg-lo:0		#新增回环网卡接口
	  vim ifcfg-lo:0
		修改设备名lo:0	
		IP地址改为192.168.11.200
		掩码:255.255.255.255
	  systemctl restart network		ifconfig lo:0		#查看回环网卡是否启动成功
	f.vim /etc/rc.local
	新增:route add -host 192.168.11.200 dev lo:0	#添加路由记录,使物理网卡和回环网卡能通信
	  chmod +x /etc/rc.local
	  route add -host 192.168.11.200 dev lo:0		#执行命令,使修改的配置生效
	  route -n	#查看添加的路由记录是否生效
	  tailf /var/log/httpd/access_log		#监听日志
g.负载调度器创建集群
8.负载调度器C7-3
	a.yum -y install ipvsadm
	  ipvsadm -A -t 192.168.11.200:80 -s rr	#创建集群
	  ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.83:80 -g	#向集群中添加DR类型服务器
	  ipvsadm -a -t 192.168.11.200:80 -r 192.168.11.84:80 -g
	  ipvsadm -ln		#查看集群的状态
h.客户端访问测试
9.测试机C7-6
	curl 192.168.11.200	#已经成功实现访问轮询
i.路由器配置DNAT规则
10.路由器C7-2
	cd /etc/sysconfig/		yum -y install iptables-services
	vim iptables  
	iptables -t nat -L		#查看nat表里的防火墙规则
	iptables -t nat -L	-n	#数字化显示防火墙规则
	iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.81 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.200:80	#进行目标地址转换
	iptables -t nat -L	-n	#再次查看防火墙规则
j.客户端访问测试
11.测试机C7-6
	curl 192.168.10.81		#测试查看效果
k.路由器配置SNAT规则
12.路由器C7-2
	iptables -t nat -A POSTROUTING -o ens33 -s 192.168.11.0/24 -p tcp --sport 80 -j SNAT --to-source 192.168.10.81		#源地址转换
	service iptables save		#保存防火墙规则
l.应用服务器关闭长连接
13.应用服务器C7-4和C7-5
	cp -a /usr/share/doc/httpd-2.4.6/httpd-default.conf /etc/httpd/conf.d/
	vim /etc/httpd/conf.d/httpd-default.conf
		KeepAlive On改为Off
	systemctl restart httpd
m.测试机访问测试
14.测试机C7-6
	浏览器访问192.168.10.81
	yum -y install httpd-tools
	ab -c 1000 -n 10000 http://192.168.10.81/index.html

3.IP Tunneling (IP 隧道)模式

(1)工作流程

    1.客户端发送数据包到负载调度器,此时数据包的源ip为CIP,目标ip为VIP。

    2.负载调度器会在数据包的外面再次封装一层ip数据包,封装源ip为DIP,目标ip为RIP。此时源ip为DIP,目标ip为RIP。

    3.之后负载调度器将数据包发给RS(因为在外层封装多了一层ip首部,所以可以理解为此时通过隧道传输),此时源ip为DIP,目标ip为RIP。

    4.RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP。

    5.之后将数据包发给客户端。

(2)特点

    1.所有真实服务器节点既要有RIP,又要有VIP,并且RIP、必须是公网ip

    2.负载调度器和真实服务器必须支持隧道功能

    3.负载调度器只处理入站请求

    4.真实服务器一定不能使用负载调度集群做默认网关

    5.不支持端口映射

五、负载均衡算法

1.静态算法:

静态算法:只考虑算法本身,不考虑后端服务器状态

    rr(轮循):从1开始到n结束

    wrr(加权轮循):按权重比例进行调度,权重越大,负责的请求越多

    sh(源地址hash):实现会话绑定,保留之前建立的会话信息。将来自于同一个ip地址的请求发送给    一个真实服务器。(同一个ip重复访问)

    dh(目标地址hash):将同一个目标地址的请求,发送给同一个服务器节点。提高缓存命中率(不同    的ip访问同一个资源)

2.动态算法

动态算法:既要考虑算法本身,也要考虑后台服务器状态(原理:通过hash表记录连接状态----            active/inactive)能不能扛得住

    LC(最少连接):将新的连接请求分配给当前连接数最少的服务器。 公式:活动连接*256+非活动连接

    WLC(加权最少连接):最少连接的特殊模式。      公式:(活动连接*256+非活动连接)/权重

    SED(最短期望延迟):加权最少连接的特殊模式。  公式:(活动连接 +1)*256/权重

    NQ  (永不排队):sed的特殊模式,当某台真实服务器连接为0时,直接分配,不计算

    LBLC(基于局部性的最少连接):dh的特殊模式,既要提高缓存命中率,又要考虑连接数量。先根据    请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且    有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    LBLCR(带复制的基于局部性的最少连接):LBLCR=LBLC+缓存共享机制

    最好的是dh、LBLC、LBLCR。

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

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

相关文章

第二周:计算机网络概述(下)

一、计算机网络性能指标(速率、带宽、延迟) 1、速率 2、带宽 3、延迟/时延 前面讲分组交换的时候介绍了,有一种延迟叫“传输延迟”,即发送一个报文,从第一个分组的发送,到最后一个分组的发送完成的这段时…

vue3.2及以上 父调子的方法defineExpose定义供父调用的方法及属性

1、定义子类LoginForm&#xff1a; function handleLogin(account, token) {console.log(account,token)}defineExpose({handleLogin,}); 2、父类调用子类组件 const loginFormRef ref(); <LoginForm ref"loginFormRef" />loginFormRef.value.handleLogin(…

仓库管理系统23--用户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、创建用户管理的用户控件 <UserControl x:Class"West.StoreMgr.View.UserInfoView"xmlns"http://schemas.…

SSE代替轮询?

什么是 SSE SSE&#xff08;Server-Sent Events&#xff0c;服务器发送事件&#xff09;&#xff0c;为特定目的而扩展的 HTTP 协议&#xff0c;用于实现服务器向客户端推送实时数据的单向通信。如果连接断开&#xff0c;浏览器会自动重连&#xff0c;传输的数据基于文本格式。…

C语言入门-指针和数组5

指针和地址 地址 地址是内存中一个特定位置的标识符。每个内存位置都有一个唯一的地址&#xff0c;用于存储数据。这些地址通常表示为十六进制数。 物理地址&#xff1a;硬件层次上的实际内存地址。逻辑地址&#xff1a;程序运行时使用的地址&#xff0c;由操作系统管理。 …

Edge浏览器添加新标签页网址为 百度 搜索

默认不能直接设置&#xff0c;需要安装New Tab Change插件 安装拓展插件 url 这里点击获取即可&#xff08;我已经安装过了&#xff09; 某些扩展会更改浏览器设置&#xff0c;例如默认搜索引擎、新选项卡页和其他类型的网站数据。 为了防止扩展更改在安装时设置的首选项Micr…

MQ:RabbitMQ

同步和异步通讯 同步通讯: 需要实时响应,时效性强 耦合度高 每次增加功能都要修改两边的代码 性能下降 需要等待服务提供者的响应,如果调用链过长则每次响应时间需要等待所有调用完成 资源浪费 调用链中的每个服务在等待响应过程中,不能释放请求占用的资源,高并发场景下…

来聊聊Redis定期删除策略的设计与实现

写在文章开头 我们都知道redis通过主线程完成内存数据库的指令操作&#xff0c;由于只有一个线程负责核心业务流程&#xff0c;所以对于每一个操作都要求尽可能达到尽可能的高效迅速&#xff0c;而本文就基于源码来聊聊redis的定期删除策略的设计与实现。 Hi&#xff0c;我是 …

上传头像到Domino中

大家好&#xff0c;才是真的好。 首先&#xff0c;说一个消息&#xff0c;2024年6月25号HCL发布了一则公告&#xff0c;就是从2024年12月10号开始结束Notes/Domino 11.0.x版本的市场订单申请&#xff0c;从从2025年6月26号开始停止对Notes/Domino 11.0.x版本的产品技术支持&am…

宝塔linux网站迁移步骤

网站迁移到新服务器步骤 1.宝塔网站迁移&#xff0c;有个一键迁移工具&#xff0c;参考官网 宝塔一键迁移API版本 3.0版本教程 - Linux面板 - 宝塔面板论坛 (bt.cn)2 2.修改域名解析为新ip 3.如果网站没有域名&#xff0c;而是用ip访问的&#xff0c;则新宝塔数据库的wp_o…

Ubuntu机器安装rdkit指定版本,通过conda安装不需要make,有手就行。

阿里云购买Ubuntu 22.0机器 IP没错&#xff0c;访问外网没问题 图片中的命令放在下面了。 useradd test-user -s /bin/bash mkdir /home/test-user chown -R test-user: /home/test-user passwd test-uservi /etc/sudoers wget -c https://repo.anaconda.com/archive/Anacon…

springcloud-gateway 网关组件中文文档

Spring Cloud网关 Greenwich SR5 该项目提供了一个基于Spring生态系统的API网关&#xff0c;其中包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和项目Reactor。Spring Cloud网关的目的是提供一种简单而有效的方法来路由到API&#xff0c;并向它们提供跨领域的关注&#x…

[快易签]免越狱苹果签名工具快易签自用证书签名教程学会了可签一切应用

相关地址 快易签官网&#xff1a;快易签 定制版&#xff1a;快易签.定制款(含证书) 自签版&#xff1a;https://s1.kyq1.cn/ 免费源&#xff1a;https://app.eqishare.com/appstore 网盘&#xff1a;路灯网盘-iOS砸壳分享网-IPA分享网-巨魔商店IPA软件资源-后厂村路灯的网…

白话负载均衡、正反向代理(入门科普版)

什么是负载均衡&#xff1f;为什么需要负载均衡 从字面上理解&#xff0c;什么是负载&#xff0c;服务器承受访问量的大小是负载&#xff0c;但是单台服务器的访问性能是有限的&#xff0c;最典型的例子就是双十一、春运抢票这种&#xff0c;这时候就需要一种方案来解决这类问…

互联网框架五层模型详解

注&#xff1a;机翻&#xff0c;未校对。 What is the Five Layers Model? The Framework of the Internet Explained 五层模型互联网框架解释 Computer Networks are a beautiful, amazing topic. Networks involve so much knowledge from different fields, from physics…

idea启用多个环境

背景 在平常的后端开发中&#xff0c;需要与前端联调&#xff0c;比较方便的是让前端直接连自己的本地环境&#xff08;毕竟每次都要打包部署到测试环境实在是太麻烦了&#xff09;。但是这样子也有点不好&#xff0c;就是自己功能还没写好呢&#xff0c;结果前端连着自己的环…

LLaVA1.5训练数据和时间分析

LLaVA的PT+SFT训练_llava sft-CSDN博客文章浏览阅读379次。这个阶段,使用8个A100(80G)训练LLaVA-v1.5-13B大约需要20h。全量微调,非lora跑不起来啊,以前一直用swift,llama-factory这种框架式的代码库,但用原作者开源的代码也是有很多好处的。在这个阶段,使用 8 个 A100(…

Web端登录页和注册页源码

前言&#xff1a;登录页面是前端开发中最常见的页面&#xff0c;下面是登录页面效果图和源代码&#xff0c;CV大法直接拿走。 1、登录页面 源代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登录</ti…

云计算【第一阶段(24)】Linux文件系统与日志分析

一、文件与存储系统的inode与block 1.1、硬盘存储 最小存储单位&#xff1a;扇区(sector) 每个扇区大小&#xff1a;512字节 1.2、文件存取 最小存取单位&#xff1a;块(block)连续八个扇区组成&#xff1a;块(block) 每个块大小&#xff1a;4K文件数据&#xff1a;实际数据…

为什么我学个 JAVA 就已经耗尽所有而有些人还能同时学习多门语言

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;我的入门语言是C&#xff0c…