三阶段--高并发解决方案--lvs(1)

引入

一个网站由什么组成的呢?-------LNMP,小到一台计算机就可以组成一个网站,那何谈大型、何谈高并发呢?
当网站的访问人员超出了服务器的承载量的时候,就会造成页面卡顿,甚至无法访问。

那怎么扩容呢?
扩容分为两个方向,一个是上下扩容,一个是左右扩容。
前期会向上扩容,什么是向上扩容呢?给服务器增加配置。一般换三大件:cpu、硬盘、内存。
什么是左右扩容呢?加服务器组成集群咯。

那怎么知道用户访问的是集群里的哪个服务器呢?怎么保证每台用户负载平均呢?-----负载均衡
当用户急速增加时,只需要增加后台的real server就可以了

集群功能分类(三类)

LB 高负载集群

Load Balancing,负载均衡,增加处理能力,有一定的高可用能力,但不是高可用集群,提高服务的并发处理能力。
在这里插入图片描述
当用户访问时,首先访问的不是真实服务器,而是一个目录服务器Director Server(又叫LB),也就是LVS。然后通过这个目录服务器通过转发,去访问我们的真实服务器。
(举个例子,像银行里的小票机,只负责给你发一张排队的小票)

负载均衡产品的分类

  • 软件负载均衡设备(重点是软件类的)
  1. LVS
  2. HAproxy
  3. Nginx
    三者对比:都属于软件型的负载均衡设备,
  • 硬件负载均衡设备(自行百度了解)(贵,买不起,一台几十万,除了贵,啥都好)(请记住一台的详细信息)
  1. F5 : BIG-IP LTM百度一下,详情请点 F5 VPR-LTM-C-AC(98万多)
  2. Citrix , Netscaler
  3. A10
  4. 深信服(国产)

HA 高可用集群

High Availability ,高可用集群,增加了服务的可用性,以提升服务的始终在线能力为着眼点,永不宕机(7*24小时在线)
衡量可用性的计算:
可用性=在线时间/(在线时间+处理故障的时间)

使用keepalived来构建高可用集群。
在这里插入图片描述
为保证关键设备LB(两台–并部署keepalived,相互通信,协商只有一台设备为真实服务器服务,通过虚拟ip来跟用户和服务器通信),避免单点故障

HPC 高性能计算机集群

High performance,高性能计算机集群,计算海量数据,解决负载问题,平时说的超级计算机就是高性能计算集群,查看每秒钟浮点运算的能力。
用到的名词:

  • 向量机:尽可能向上进行扩展,如果cpu过多,在架构上纵然会有问题的。
  • 并行处理集群:有两个部分,一是分布式文件系统,二是将大人物切割为小任务,分别进行处理机制,比如hadoop就是并行处理集群。

负载均衡(LB)

实现负载均衡(算法)一般可以使用顺序、比重、流量、服务类别进行分配,负载均衡的部署方式,也分为路由和服务直接返回模式。

实现负载均衡主要方式

http重定向(了解)

这种方法下载网站用的较多,其实也算一种负载均衡,工作在应用层的业务代码中。
在这里插入图片描述
原理: 根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给客户浏览器,有浏览器重新进行访问。

关于http重定向:优点就是比较简单。客户浏览器需要请求很多次服务器才能完成一次访问,性能较差。http重定向服务器自身的处理能力可能成为瓶颈。使用http302响应重定向,有时候使搜索引擎判断为SEO作弊,降低搜索排名。

2.DNS负载均衡

原理
(DNS会帮我们负载均衡)

DNS负载均衡主要目的: DNS负载提供域名到IP解析的过程,比如查看百度的域名解析,其实是一对多的。这个时候,DNS服务器也就充当了负载均衡,很多域名运营商提供的智能DNS以及多线解析都是利用了DNS负载均衡的技术,开源的BIND就可提供电信联通多线解析等强大的技术。

DNS负载均衡的原理:在DNS服务器上配置多个域名对应ip的记录,例如一个域名www.baidu.com对应一组web服务器ip地址,域名解析时经过DNS服务器的(轮询)算法将一个域名请求分配到合适的真实服务器上(就近分配)。dig baidu.com

DNS负载均衡的优点: 将负载均衡的工作交给了DNS,省却了网站管理维护负载均衡服务器的麻烦,同时很多DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理最近的一个服务器地址,加快访问速度,改善性能。(省事服务商管理

DNS负载均衡的缺点:(多级,无法控制) 目前的DNS解析式多级解析,每一级DNS都可能化缓存记录A,当模拟服务器下线后,该服务器对应的DNS记录A可能仍然存在,导致分配到该服务器的用户访问失败。而且,DNS负载均衡的控制权再域名服务商的手里,网站可能无法做出过多的改善和管理。不能按服务器处理能力来分配负载。采用简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前的运行状态,所以其负载均衡效果不是太好。

除此之外,可能会造成额外的网络问题。为了保证本地的DNS服务器和其他DNS服务器能及时交互,DNS数据及时更新,地址能随机分配,都会把DNS的刷新时间设置的很小,刷新时间端会导致DNS流量大增而造成额外的网络问题。

DNS解析结果的流程:
假设本地没有缓存,用户输入网址到浏览器后,发出DNS请求——查看本机hosts——去互联网上向上逐级dns查找有结果后返回给浏览器获取页面
或者:
1.用户输入网址到浏览器
2.浏览器发出DNS请求
3.计算机首先查询本机的hosts文件,如果不存在,继续下一步 vi /etc/hosts#该文件只在本地有效(本地解析只在本地有效)
4.计算机按照本地DNS的顺序,向区域DNS服务器查DNS解析结果流询IP结果,如果区域DNS服务器查询不到,会从根域开始
5.将返回DNS结果给本地DNS和主机,本地和本地DNS缓存本结果,直到TTL过期,才再次查询此结果;
6.返回IP结果给浏览器,并给本地DNS一份结果
7.浏览器根据IP信息,获取页面。

反向代理负载均衡

在这里插入图片描述
在开源界,比较有代表性的反向代理平台有squid(缓冲器的一种)、nginx(对它的一种功能进行讲解—反向代理功能)跟http代理很像,都是网站自带的功能。
反向代理负载均衡的原理:工作在应用层,根据http地址url来识别。

反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的web服务器处理,处理结果经过反向服务器返回给浏览器。例如:浏览器访问请求的地址是反向代理服务器的地址114.100.80.10,反向代理服务器收到请求,经过负载均衡算法后得到一个真实物理地址10.0.0.3,并将请求结果发给真实服务器,真实服务器处理完后通过反向代理服务器返回给请求用户。

反向代理负载均衡的优缺点: 部署简单,处于http协议层面,反向代理服务器使web服务器地址不能直接暴露在外,因此web服务器不需要使用外部ip地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套ip地址。

IP网络层负载均衡(LVS细分成两类,网络层负载均衡,数据链路层负载均衡)

在这里插入图片描述
负载均衡器对外提供了一个IP地址,用户== 根据ip== ,由lvs把请求分发出来。
特点:速度特别快,ip地址比url的字节数少,ip才32位,只要看ip就可以转发,当然缺点也很 明显,它没有办法处理更高级的请求。

IP负载均衡的原理: 在网络层和传输层,也就是IP和端口,通过修改目标地址进行负载均衡。用户访问请求到达负载均衡服务器,根据算法得到一台真实服务器地址,然后将用户请求的目标地址修改成该真实服务器地址,数据处理完后,返回给负载均衡服务器,负载均衡器收到响应后,将自身的地址修改成原用户访问地址后,再将数据返回回去,类似于反向服务器负载均衡。

数据链路层负载均衡

根据MAC地址进行转发

在这里插入图片描述
数据链路层负载均衡的原理: 在数据链路层修改Mac地址进行负载均衡。负载均衡服务器的IP和它所管理的web服务群的虚拟IP地址一致;负载 均衡数据分发过程中不修改访问的IP地址,而是修改Mac地址;通过这两点达到不修改数据包原地址和目的地址就可以进行正常的访问。

数据链路层负载均衡的优缺点: 不需要负载均衡服务器进行IP地址转换,而且数据响应时也不需要经过负载均衡服务器,数据链路层的负载均衡对网卡带宽的要求较高。

F5硬件负载均衡(F5 BIG-IP)

除了价格,别的都好

F5硬件负载均衡的原理:

  1. 提供12种灵活的算法,将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。

  2. 健康性检查。F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用保证对客户的请求作出正确响应并恢复向该服务器传送。

  3. F5 BIG-IP具有动态Session的会话保持功能,将用户IP与Session通过F5进行的绑定,使其Session保持一致。

  4. F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。

负载均衡层次问题:(常用的)四层负载和七层负载

在这里插入图片描述
四层: 基于IP和端口的负载均衡,如lvs
七层: 基于url的应用层信息的负载均衡,对比四层负载均衡,它没有四层效率高。如nginx

关于代理

负载均衡也是代理的一种

正向代理和反向代理

  • 反向代理:
    用户从外网到公司内网,这是反代

  • 正向代理:
    内网有一台pc,想上外网,但是没办法上,但是公司有一台机器proxy,内网经过代理服务器访问到外网,这是正向代理。
    (qq登录窗口的设置里有设置代理)

LVS概述

Lvs(Linux Virtual Server,linux虚拟服务器)是一个虚拟的服务器集群系统,是一个软件,只要是linux系统都可以装(中国国内最早出现的自由软件项目之一)。

LVS工作在linux服务器上,提供负载均衡器(Directory)的功能,它本身是不提供服务的,知识把特定的请求转发给对应的真实提供服务的服务器主机,以此来实现 集群环境中的 负载均衡。

LVS框架

LB-server负载均衡器
realy-server真实服务器
当业务比较多的时候,可以增加真实服务器的数量
应用程序发布上线–灰度发布–蓝绿发布

蓝绿发布

就是把项目从逻辑上分为AB组,在升级的时候,先把A组从负载均衡中摘掉,进行新版本的部署,B组仍然继续提供服务,当A组升级完毕后,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署,这个时候,A组重新提供服务,最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已升级完成,并且都对外提供服务。

优缺点: 发布策略简单,用户无感知,平滑过渡,升级/回滚速度快,但是如果出现问题的话,影响范围会比较大,而且用的服务器也是正常业务的两倍以上,短时间内会造成一定的资源浪费。

蓝绿发布在早期物理服务器时代,还是比较昂贵的 ,由于云计算的普及,成本也大大降低。

灰度发布

灰度发布只升级部分服务 ,也就是让一部分用户使用老版本,一部分用户使用新版本,要是大家对新版本没有什么意见的话,就扩大范围,把所有用户都迁移到新版本上来。

灰度发布的部署过程:

- 从LB摘掉灰度服务器,升级成功后,再加入LB
- 少量用户升级到新版本;
- 如果灰度服务器测试成功,再继续升级剩余服务器。

灰度发布时通过切换线上并存版本之间的路由权重,逐步从一个版本换为另一个版本的过程。

灰度发布的优缺点: 保证整体系统稳定性,在初始灰度发布的时候就可以发现并及时调整问题,影响范围可控。用户无感知,平滑升级。新功能逐步评估性能,稳定性和健康状况,如果出问题影响范围很小,相对用户体验也少,对自动化要求高。

滚动发布

滚动发布是每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,知道集群中的全部旧版本升级新版本。

滚动发布的部署过程:

  • 先升级1个副本,主要做部署验证;
  • 每次升级副本,自动从LB上摘掉,升级成功后自动加入集群;
  • 事先需要有自动更新策略,分为若干次,每次数量/百分比可配置;
  • 回滚是发布的逆过程,先从LB摘掉新版本,再升级老版本,这个过程一般时间比较长;
  • 自动化要求高。

滚动发布的优缺点:
用户无感知,平滑过渡,比较节约资源,部署时间慢,这个时间取决于每个阶段更新时间,发布策略较复杂,没有办法确定ok的环境,不容易回滚。

那生产上选择哪种部署方法最合适呢?

这取决于哪种方法最适合你的业务和技术需求。

如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布

如果业务对用户依赖很强,建议灰度发布。

如果是K8S平台,滚动更新是现成的方案,建议先直接使用。
详细参考文档

LVS的工作模式

lvs的工作模式总共有四种,四种模式的对比:
在这里插入图片描述

NAT转发模式(难一点,但是比较有代表性)

NAT (Network address translation,网络地址转换。)是将IP数据包头中的IP地址转换成另一个IP地址的过程。
在这里插入图片描述
网络地址转换的原理:

  1. 客户端,将请求发给前端的负载均衡器,请求报文源地址是客户端 的 IP(CIP),目标地址,也就是负载均衡器前端的地址VIP。(CIP将求情发送给VIP)
  2. 负载均衡器收到报文后,发现请求的是再规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的真实服务器的IP地址(RIP),并将报文根据算法发送出去。(VIP收到请求,把CIP的目的地址VIP,改成了RIP,并且把报文给RIP)
  3. 报文发送到RIP后,由于报文的目的地址是VIP,所以,会响应这个请求,并且把响应的报文,返还给LVS。(RIP把响应返还给VIP)
  4. 然后lvs把这个报文的源地址RIP改成它自己VIP,并且发送给客户端。(VIP把RIP的地址改成VIP,然后把响应发给CIP)

==注意:==在nat模式中,realserver的网关是必须要指向LVS的,否则没有办法把报文送到客户端。

NAT模式的优缺点: 网络隔离更安全,节约IP地址,所有的请求director(目录)都需要处理应答,director很可能成为系统性能瓶颈。
当服务器数量大量增加时,LVS可以转发,但是,带宽不够。所以,LVS-NAT模式仅限20台服务器以内,这个时候,LVS-DR直接路由模式就出现了。

NAT环境模拟

在这里插入图片描述
网站服务器们无法暴露在公网上,所以会组件自己的私有网络,内部是可以互通的。
在上面的拓扑图中,需要两个网段,一部分模拟公网,一部分模拟私网,二者要隔离又要互不相通。
通过VMware的 Vmnat(小交换机)做出两个互不相通的网络,-----公私结合,地址转换的技术特点。

具体实现如下:

  1. 准备环境:四台Centos7系统的服务器,初始化环境,,防火墙,selinux记得关。
  2. 1、2号服务器做web,定义虚拟网络vmnat2;4号服务器做客户端,定义虚拟网络wmnat0;3号服务器做lvs,配置两个网卡,一个IP在vmnat0,一个IP在vmnat2。以此来实现互通。

vmnet0 桥接,能上网,跟本地连接捆绑;
vmnet8 地址转换(nat模式)虽然跟真机相连,但是真机的网卡跟8有一个隔离,只准出,不准进。
本地连接–又叫有线连接/无线连接

四台服务器的vmnet及ip设计:
1. Client : VMNET0   ip1(10.9.30.110)
2.  LVS : VMNAT0   ip2(10.9.30.120)
					VMNAT2   ip3(192.168.233.110)
3. web1 : VMNAT2   ip4(192.168.233.120)
4. web2 : VMNAT  ip5(192.168.233.130)
## 1. client 服务器配置路由
route add -net 192.168.233.0/24 gw 10.9.30.120
## 查看路由信息
ip route

## 2. web1 服务器配置路由和网站
## 安装apacheweb服务器
yum -y install httpd
## 设置开机自启,并现在启动
systemctl enable --now httpd
## 写入默认界面
echo web1test > /var/www/heml/index.html
## 配置路由 -net 外部网络,gw 网关,是网络的唯一出口
route add -net 10.9.30.0/24 gw 192.168.233.110

## 3. web2 服务器配置路由和网站(同web1)
yum -y install httpd
systemctl enable --now httpd
echo web2test > /var/www/heml/index.html
route add -net 10.9.30.0/24 gw 192.168.233.110

## 4. LVS-NAT配置路由功能和负载策略
## 启动路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
## 安装LVS
yum -y install ipvsadm
## 在LVS里添加一个vip(使用-A参数),-t (TCP协议),-s(schedule调度), rr(lvs的调度算法之一----rr轮询策略类型)
ipvsadm -A -t 10.9.30.120:80 -s rr
## 添加真实ip服务(-a参数),真实服务器的ip地址(-r参数),使用nat模式工作(-m参数)
ipvsadm -a -t 10.9.30.120:80 -r 192.168.233.120:80 -m
ipvsadm -a -t 10.18.41.55:80 -r 192.168.233.130:80 -m


## 5. 客户端client测试
elinks --dump http://10.9.30.110
#可以看到每次访问结果都不一样。

DR直接路由模式

在这里插入图片描述
特点:回复的时候,直接回复,不经过LVS了,有效的规避了LVS-NAT模式的性能瓶颈。

DR直接路由模式的工作原理:

  1. 客户端(CIP)将请求地址发往前端的负载均衡器,请求报文源地址是CIP,目的地址是VIP。
  2. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址,改成自己的DIP的MAC地址,目标MAC地址改成了RIP的MAC地址,并将此包发送给真实服务器RS
  3. RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
DR(direct routing)直连路由模拟

准备四台主机,三台主机在一个网段。负载均衡器,两台web服务器,初始化系统,设置本地解析

## 1. 虚拟IP地址设计
lvs:192.168.230.110
web1: 192.168.230.110
web2: 192.168.230.110

## 2. LVS服务器
## 添加VIP,broadcast---是广播地址,netmask子网掩码
ifconfig ens32:0 192.168.230.110 broadcast 192.168.230.255 netmask 255.255.255.0 up
route add -host 192.168.0.123 dev ens32:0
## 设置路由转发
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.ens32.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
##设置一个ipvsadm规则,ipvsadm(internet protocol virtual server admin 互联网 协议 虚拟 服务器 管理器)


TUN-IP隧道模式

FULL-NAT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值