使用 Lvs + Nginx 集群搭建高并发架构

article/2025/6/20 7:19:41

image-20211220234912904

高并发站点不仅要考虑网站后端服务的稳定,还需要考虑服务能否接入巨大流量、承受巨大流量,如上图:

1:流量接入,可以采用Lvs+Nginx集群,这种方式能接入的QPS能高达数百万
2:通过Lvs实现Nginx集群,Nginx+Tomcat实现后端服务集群,完成了从接入层流量处理到后端服务集群高并发处理

1. Lvs介绍

LVS(Linux Virtual Server),即Linux虚拟服务器。它用于多服务器的负载均衡,工作在网络四层,可以实现高性能,高可用的服务器集群技术,它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。是基于TCP/IP做的路由和转发,稳定性和效率极高。

image-20211220235003406

一个LVS集群往往包含以下角色:

1:DS:Director Server。虚拟服务,负责调度2:RS:Real Server。后端真实的工作服务器。3:VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址4:DIP:Director Server IP,DS的IP5:RIP:Real Server IP,后端服务器的IP地址6:CIP:Client IP,访问客户端的IP地址

2. Lvs 负载均衡模式

lvs提供了3种负载均衡模式,每种负载均衡模式适用的场景有差异,我们来讲解一下这三种负载均衡模式。

2.1 NAT

用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的RS上去。RS需要设定网关为分发器的内网IP。用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器称为瓶颈。在NAT模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源。

image-20211220235042901

2.2 TUN

这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP。客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上。RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是它自己。

image-20211220235059900

2.3 DR模式

和IP Tunnel较为相似,不同的是,它会把数据包的MAC地址修改为RS的MAC地址。真实服务器将响应直接返回给客户。

这种方式没有IP隧道的开销,对集群中的真实服务期也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。

image-20211220235116751

3. Lvs DR模式配置

综合上面分析,我们可以得出结论,DR模式性能效率比较高,安全性很高,因此一般公司都推荐使用DR模式。我们这里也配置DR模式实现Lvs+Nginx集群。

我们准备了3台机器:首先确保三台机器都安装了Nginx。

1:192.168.183.133	(DS)		192.168.183.150   对外提供服务
2:192.168.183.134	(RS)		192.168.183.150   真实服务处理业务流程 
3:192.168.183.135	(RS)		192.168.183.150   真实服务处理业务流程

VIP:192.168.183.150

3.1 Vip配置

关闭网络配置管理器(每台机器都要做)

systemctl stop NetworkManager
systemctl disable NetworkManager

配置虚拟IP(VIP 192.168.183.133中配置)

/etc/sysconfig/network-scripts创建文件ifcfg-ens33:1,内容如下:

BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.183.150
NETMASK=255.255.255.0

重启网络服务:

service network restart

我们可以看到在原来的网卡上面添加了一个虚拟IP 150。

image-20211220235428594

同时需要对192.168.183.134192.168.183.135构建虚拟机IP,但只是用于返回数据,而不能被用户访问到,这时候需要操作ifcfg-lo

IPADDR=127.0.0.1,这里127.0.0.1属于本地回环地址,不属于任何一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。

NETMASK=255.255.255.255

192.168.183.134
ifcfg-lo拷贝一份ifcfg-lo:1,并修改ifcfg-lo:1配置,内容如下:

image-20211220235808269

刷新lo:

ifup lo

查看IP可以发现lo下多了150ip。

image-20211220235845587

192.168.100.133知行和上面相同的操作。

3.2 LVS集群管理工具安装

ipvsadm用于对lvs集群进行管理,需要手动安装。DS安装即可。

安装命令:

yum install ipvsadm

版本查看:

ipvsadm -Ln

效果如下:

image-20211221000148927

3.3 地址解析协议

192.168.183.134192.168.183.135中操作。

arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常。

arp-ignore:arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应(0~8,2-8用的很少)

配置文件:/etc/sysctl.conf,将如下文件拷贝进去:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

刷新配置:

sysctl -p

添加路由:此时如果无法识别route,需要安装相关工具yum install net-tools

route add -host 192.168.183.150 dev lo:1

添加了一个host地址,目的是用于接收数据报文,接收到了数据报文后会交给lo:1处理。(防止关机失效,需要将上述命令添加到/etc/rc.local中)

添加完host后,可以查看一下:route -n,能明显看到效果。

上述配置我们同样要在192.168.183.135中配置。

3.4 集群配置

ipvsadm命令讲解:

ipvsadm -A:用于创建集群
ipvsadm -E:用于修改集群
ipvsadm -D:用于删除集群
ipvsadm -C:用于清除集群数据
ipvsadm -R:用于重置集群配置规则
ipvsadm -S:用于保存修改的集群规则
ipvsadm -a:用于添加一个rs节点
ipvsadm -e:用于修改一个rs节点
ipvsadm -d:用于删除一个rs节点

添加集群TCP服务地址:(外部请求由该配置指定的VIP处理)

ipvsadm -A -t 192.168.183.150:80 -s rr

参数说明:

-A:添加集群配置
-t:TCP请求地址(VIP)
-s:负载均衡算法

负载均衡算法:

算法说明
rr轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况
wrr加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
Wlc加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS
Dh目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
SH源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS
Lc最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.
Lblc基于地址的最小连接数调度(locality-based least-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

DS中配置rs(2个)节点:

ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.134:80 -g
ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.135:80 -g

参数说明:

-a:给集群添加一个节点
-t:指定VIP地址
-r:指定real server地址
-g:表示LVS的模式为dr模式

添加了节点后,我们通过ipvsadm -Ln查看,可以看到多了2个节点。

此时集群列表中客户端请求数据和TCP通信数据会持久化保存,为了更好看到效果,我们可以把时间设置成2秒保存,如下命令:

ipvsadm --set 2 2 2

此时我们请求http://192.168.183.150/测试

可以发现请求会在两台Nginx轮询切换。


http://chatgpt.dhexx.cn/article/IUS7AILb.shtml

相关文章

5G注册流程详解

1.1 注册流程 1.1.1 专享篇 UE发送Registration Request到(R)AN,消息中包含注册类型、用户标识、UE能力及请求的切片等参数。 (R)AN接收到消息,根据用户临时标识或切片选择合适的AMF,如果(R)AN找不到合适的AMF,则将Registration…

WebRTC建立会话流程分析

WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后,熟悉运行流程可以做为深入学习WebRTC的切入点。本节重点解释客户端双方建立会话时交互的主要信令(控制会话的文本协议)和与信令相关的 WebRTC API。 准备工作 peerconnection_clie…

RPA-机器人流程自动化

RPA-机器人流程自动化 RPA-机器人流程自动化简介RPA是什么?RPA历史上的演变RPA原理RPA特点RPA技术框架及功能1.TagUI2.RPA for Python3.Robot Framework4.Automagica5.Taskt6.OpenRPA RPA部署模式1 环境配置的参数调整2 将自动化程序整体打包部署3 版本的管理和控制…

网络安全应急响应----7、数据泄漏应急响应

文章目录 一、数据泄露简介二、数据泄露途径1、外部泄露2、内部泄露 三、数据泄露应急响应方法1、发现数据泄露2、梳理基本情况3、确定排查范围和目标4、判断泄露途径4.1、主动泄露4.2、被动泄露 5、系统排查 四、数据泄露防御1、数据外部泄露防范2、数据内部泄露防范 一、数据…

发送邮件 显示对方服务器未响应,邮件对方服务器未响应

邮件对方服务器未响应 内容精选 换一换 MX优先级,用来指定邮件服务器接收邮件的先后顺序,数值越小优先级越高。当DNS服务器的解析记录中只有一条MX记录时,MX优先级没有意义。当DNS服务器的解析记录中存在多条MX记录时,邮件发送方的DNS服务器会优先把邮件投递到MX优先级高的…

网络安全应急响应----9、WebShell应急响应

文章目录 一、Webshell简介1、常见webshell2、Webshell检测 二、Webshell应急响应流程1、判断是否被植入webshell2、临时处置3、Webshell排查4、系统排查4.1、Windows系统排查4.2、Linux系统排查4.3、Web日志分析4.4、网络流量排查4.5、清除加固 三、Webshell防御方法 一、Webs…

复杂产品的响应式设计【流程篇】

都说2013年将是响应式设计爆发的一年。一淘设计团队在去年一淘首页改版时初步尝试了响应式,最近在一淘“玩客”项目中有了更加深入地应用,第一次在复杂产品中实现了全站响应式。中间积累了一些经验也踩了不少坑,于是就有了这个响应式设计三部…

史上最全测试流程详解----超详细

前言----- 对于测试流程基本很多做过测试的大牛,小哥哥,小姐姐都能说出个十之八九,但是对于细节,可能还需要一些整理文件,这不,我整理了一些测试的全部流程,希望能给大家带来帮助,有…

C语言 操作系统实验 四种调度(最高响应比优先算法 HRN)

注: 本文是四个调度算法的第一篇算法。 本文是根据CSDN上某一FCFS调度算法魔改来的,所以FCFS的算法不会发到网站。 我是个菜鸡,发文是为了纪念自己完成了代码,以及累计自己的经验。 如有知识错误或者算法有逻辑漏洞请各位大佬高…

处理动态图的图神经网络

汤吉良老师团队发表于2020年的SIGIR 《Streaming Graph Neural Networks》论文阅读笔记 背景: 图能够很好的表示实际数据(如社交网络,传输网络)。利用神经网络建模图结构数据,学习特征表示,改善图相关任务…

ImageView加载网络图片

使用第三方的库Glide加载网络图片 首先去下载一个glide的包 下载地址:https://github.com/bumptech/glide/releases/download/v4.7.0/glide-full-4.7.0.jar 我这里用的是glide-full-4.7.0 下载好之后直接复制到app\libs下面,然后点同步,可…

图神经网络的池化操作

图神经网络有两个层面的任务:一个是图层面(graph-level),一个是节点(node-level)层面,图层面任务就是对整个图进行分类或者回归(比如分子分类),节点层面就是对…

网络图的绘制方法详细讲解

网络拓扑图形如网络结构,并且由箭头线条、节点、路线三个因素组成。网络工程师在绘制网络图时,为了展示网络传输方式和途径,通常将网络节点设备和通信介质进行物理布局。网络拓扑图的结构类型有:星型、环型、树型、总线型、网状、分布式结构、等等。 网络图一般用处 在计算…

网络拓扑图怎么画 详细教程

大数据时代,如何更好地去运营、呈现数据,并从其中发掘出更多信息成为了人们探索的方向。网络拓扑图就是一种非常有用的信息化图表,这种网状关系呈现出来的利器可以使我们把想要传递的信息更加清晰、有逻辑的呈现在别人的眼前。 1. 什么是网络…

图神经网络及其应用

Graph Neural Networks and its applications 摘要 以图形形式构建的数据存在于生物化学、图像处理、推荐系统和社会网络分析等多个领域。利用预处理技术在图结构数据上训练机器学习模型有几种方法,但它们缺乏完全适应数据集和手头任务的灵活性。图神经网络允许创…

[概念]神经网络的种类(前馈神经网络,反馈神经网络,图网络)

随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型、反馈型神经网络模型以及图网络. 1.前馈型神经网络模型 前馈神经网络(Feedforward Neural Network ,FNN&#xff09…

java实现下载网络图片到本地

文章目录 前言一、示例二、代码 1.代码示例2.运行结果总结 前言 当我们在网络上看到自己想要保存的照片,有的网站设置了权限,不能保存情况下,我们可以借助Java的文件流读取网络上的图片,并保存到本地。 一、示例 比如豆瓣话题第…

用python实现数字图片识别神经网络--启动网络的自我训练流程,展示网络数字图片识别效果

上一节,我们完成了网络训练代码的实现,还有一些问题需要做进一步的确认。网络的最终目标是,输入一张手写数字图片后,网络输出该图片对应的数字。由于网络需要从0到9一共十个数字中挑选出一个,于是我们的网络最终输出层…

android中的ImageView,ImageView加载网络图片

android中的ImageView&#xff0c;ImageView加载网路图片 在布局文件中加入标签&#x1f3f7;️ <ImageViewandroid:layout_width"300dp"android:layout_height"200dp"android:background"#111111"android:id"id/imageView_pic1"a…