Nginx,Haproxy,LVS都可做负载均衡。

负载均衡就是将一台服务器作为负载均衡节点,对外暴露出一个接口,用来让外部网络访问,内部连接着的是一个资源池,负载均衡节点是将访问的流量按一定的策略分发到后面的服务器群组中。可提供高并发性能。
特点:
负载均衡服务通过设置虚拟服务地址(ip),将位于同一地域的多台云服务器(ECS)资源虚拟成一个高性能,高可用的应用服务池;根据应用指定的方式,将来自客户端的请求分发到云服务器池中。
负载均衡服务会检查云服务池中ECS的健康状态,自动隔离异常状态的ECS,从而解决了单台ECS的单点问题,同时提高了应用的整体服务能力,在标准的负载均衡功能之外,负载均衡还具备TCP与HTTP抗DDOS攻击的特性,增强了应用服务器的防护能力。

负载均衡算法:

轮询:请求按时间顺序逐一的分配到不同的服务后端。
weight:主要用于后端服务器性能不均的情况,权值越大分配到的概率越高。
ip_hash:每个请求按ip的哈希结果分配,使来自同一IP的访客固定访问一台后端服务器,可以解决动态网页存在的Session共享问题。
Fair:是更加智能的分配算法,它是根据请求的页面大小和加载时间来智能选择后端服务器,遵循的规则是,反应时间短的优先匹配。
url_hash:按访问的URL进行哈希结果来分配请求,使每个URL定向到同一台后端服务器中,可以提高后端缓存服务器的效率。

疑问:1.什么是哈希函数

2.什么是url

3.Session和cookie

4.软连接,硬连接。

5.虚拟机上网的原理,以及网关的含义

哈希函数:它是这样一种函数:能把不定长的内容通过散列算法转换成固定长度的输出,它能确保数据的完整性和保密性。
url:是用来唯一定位互联网上的特定资源,它是一种特殊的URI。URI是身份证号,URL是身份证号加姓名。
Session和Cookie:他们都属于是会话跟踪技术,Cookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份
Cookie机制:Web程序是基于HTTP协议,而HTTP协议是无状态的,一旦数据交换完毕,则连接就将被关闭。无法从连接上跟踪会话。即A购买了一件物品。当再买一件物品时,需重新验证自己是A。这带来了非常大的不便。于是Cookie技术便诞生,用以解决这个问题。
Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

软连接:
命令: ln -s 源文件 目标文件
特点:1.相当于windos创建快捷方式
2.只是一个符号连接,所以软连接文件一般都非常小(只存储inode信息)
3.所有软连接文件的权限是777,但真正的权限是指向的那个文件决定的。
4.源文件丢失,软连接无法访问
5.ls -al可查看软连接

硬连接:
命令:ln 源文件 目标文件 ln默认参数就是创建硬链接
特点:1.源文件和目标文件的权限一模一样
2.链接文件与源文件的关系类似于:复制加同步更新
3.当源文件丢失,硬链接文件还可以访问
4.不能跨分区,不能针对目录使用
本质:硬链接创建了一个指向该文件inode节点的链接。硬链接文件的inode号和目标节点是一样的。而软链接是创建一个新的节点此节点存储的是源文件的inode节点号。

LVS

LB集群原理:当用户的请求过来时,会分发到Director Server上,然后它把用户的请求按照设置好的调度策略,智能均衡的分发到后端真正的服务器RS上,为了保证用户请求数据的一致性,需要共享存储。
架构从逻辑上分为:调度层,Server集群层,共享存储。

组成:

由ipvs和ipvsadm组成。其中IPvs是工作在内核空间,是真正生效实现调度的代码。IPvsadm工作在用户空间,负责为ipvs内核框架编写规则,确定谁是集群服务,谁是后端真实的服务器。

相关术语:DS:前端负载均衡节点。RS后端真实的服务器。VIP:负载均衡节点对外暴露的虚拟IP地址。DIP:集群中负责通信的IP地址。RIP是真实服务器的IP地址。CIP是用户端的IP地址。

三种负载均衡模式:

NAT模式:总体上是将对负载均衡节点的请求发到负载均衡节点之后,负载均衡节点对ip数据包进行重写,把目的ip地址和源IP地址更改为负载均衡节点的IP地址和真实服务器的地址。从而将请求根据算法分发到后端真实服务集群中,返回时将源IP地址和目的IP地址再次更改。
实际上:当用户访问服务集群提供的服务时,发往虚拟IP地址的请求数据包(负载均衡器的外部IP地址)到达负载均衡器。负载均衡器检查数据包的目标地址和端口号。根据虚拟服务器规则表匹配虚拟服务器服务,则通过调度算法从集群中选择真实服务器。并将连接添加到记录已建立连接的哈希表中,然后将目标地址和端口号改写为所选真实服务器的IP和端口号,并将数据包转发到服务器,当传入数据包属于此连接并且可以在哈希表中找到所选服务器时,将重写该数据包并将其转发到所选服务器。当回复数据包返回时,负载均衡器将数据包的源地址和端口重写为VIP,连接终止或超时后,连接记录将在哈希表中被删除。
特点:
RS应该使用私有地址,网关为DIP
DIP和RIP属于同一个网段
请求和响应报文都要经过DS(性能瓶颈)
支持端口映射
RS可以使用任何的操作系统。
image.png

DR模式

DR模式目的是解决NAT模式所带来的LB节点的性能瓶颈。它的实现方法是,虚拟IP地址由真实服务器 和LB共享。负载均衡器的接口也配置了虚拟IP地址,用于接受请求数据包,并直接将数据包路由到选定的服务器。所有真实服务器的非ARP别名接口都配置了虚拟IP地址,或者将发往虚拟IP地址的数据包重定向到本地套接字。以便真实服务器可以在本地处理数据包。LB和RS必须通过HUB/SWITCH物理连接其中一个接口,LB将IP数据包中的MAC地址更改为所选服务器的MAC地址,然后再LAN上传输。
image.png
特点:
保证前端路由将发往VIP的数据包全部发给DS
RS可以使用私有地址,也可以使用公网地址。如果此时使用公网地址,此时可以通过互联网对RIP进行直接访问
RS和DS必须在同一个物理网络中
所有请求报文必须经过DS但响应报文必须不能经过DS
不支持地址转换,也不支持端口映射
RS的网关不能指向DIP
RS的LO接口配置VIP的IP地址

如何让RS不响应VIP请求报文:
因为ARP广播,想要保证目标地址为VIP报文发给DS,我们就需要只让LVS上响应VIP的arp请求,而realserver 不响应, 即:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP 地址解析请求。
arp_announce通告:0,1,2级
arp_ignore应答:0-8级

TUN模式
在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的 数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响 应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请 求,而让真实服务器响应数据包直接返回给客户端。LVS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及 端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通 过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务 器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后 直接给客户端主机响应数据。
image.png
特点:
RIP、VIP、DIP全是公网地址
RS的网关不会也不可能指向DIP
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
不支持端口映射 RS的系统必须支持隧道

调度算法:

轮询调度,加权轮询调度,目标地址hash,源地址hash,最少链接,加权最少链接。最短延迟调度,最少队列调度,基于局部性的最少链接,带复制的基于局部性的最少链接

localtion表达式:

= 完全匹配
^~前缀匹配
~区分大小写的正则匹配
~*不区分大小写的正则匹配
/ 默认匹配。当所有的都匹配不上的时候才会用这个。

正则匹配

rewrite的功能:使用Nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现对URi重写及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数之外的字符串起作用。例如 http://seanlook.com/a/we/index.php?id=1&u=str对/a/we/index.php重写

语法为:
rewrite regex replacement [flag]

如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。
表明看rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里,它们的执行顺序是:

  1. 执行server块的rewrite指令
  2. 执行location匹配
  3. 执行选定的location中的rewrite指令

如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。

https://blog.csdn.net/weixin_44299027/article/details/107286956

七层代理和四层代理的区别:

image.png
负载均衡的作用就是对数据包进行转发。当用户的请求报文过来时,根据负载均衡策略对数据包进行转发到后端的真实服务器上对请求报文进行响应。又将响应报文重新分发给客户端。那么这就涉及到一个问题,对数据包的转发有两种方式,一种是通过与后端建立连接,将数据包通过HTTP转发
给后端的服务器。另外一种就是当数据包到来的时候,通过修改目的IP在局域网中进行传递。
这就涉及到

image.png

image.png