计算机网络 | LVS | LVS集群负载均衡基础理论

1.  LVS的产生背景

Internet 的飞速发展给网络带宽和服务器带来巨大的挑战。从网络技术的发展来看,网络带宽的增长远高于处理器速度和内存访问速度的增长,所以,我们深信越来越多的瓶颈会出现在服务器端。很多研究显示 Gigabit Ethernet 在服务器上很难使得其吞吐率达到 1Gb/s 的原因是协议栈(TCP/IP)和操作系统的低效,以及处理器的低效,这需要对协议的处理方法、操作系统的调度和 IO 的处理作更深入的研究。

所以这给服务器带来了更大的挑战,我们要求服务器必须具有:

1.      可伸缩性

2.   高可用性

3.   可管理性

4.   价格有效性

单台服务器太贵,效果也不理想,因此我们考虑使用多台服务器作为一个服务器集群,实现功能

在linux 2.4之后,LVS已经被直接添加进linux内核,已经不需要重新编译进Linux内核

负载均衡主要有两种,硬件负载均衡器和软件负载均衡器

其中硬件负载均衡器,一般是使用额外的硬件设备,效率很高,分流效果很好,但是成本很高

软件负载均衡是使用软件的方式实现负载均衡,成本不高,并且效果不错,是很多企业的选择,其中常用的有LVSNginxHAProxy

LVS工作在第四层,运输层,Nginx工作在第七层

LVS工作在第四层,仅提供分流,并且不产生额外流量,现在在在项目实施中使用最多的是LVS+keepAlived方案

2.   LVS的工作框架

Linux中LVS项目提供的Linux VirtualService框架

LVS 框架中,提供了含有三种 IP 负载均衡技术的 IP 虚拟服务器软件:

·       IPVS:实现IP负载均衡。在调度器的实现技术中,IP 负载均衡技术是效率最高的,只需做到对数据包的分发。

·       基于内容请求分发的内核 Layer-7 交换机 KTCPVSKernel TCP Virtual Server

集群管理软件

1.   LVS的组成

Lvs分为三个部分:

1.   负载调度器:它负责将客户的请求分发到各个不同的服务器上,客户则认为服务来自于一个IP地址,这个IP地址我们称它为虚拟IP地址,多个服务器使用同一个虚拟IP地址

2.   服务器池:是一组真正执行客户请求的服务器

3.   共享存储:为服务器池提供一个共享的存储区域,这样很容易使得各个不同的服务器具有相同的内容,提供相同的服务


1.   负载均衡解决方法

在以软件实现的负载均衡中,有两种,

1.   基于IP层负载均衡:工作在运输层,用户通过虚拟IP地址访问服务器,用户的请求报文会通过负载调度器将报文分发给不同的服务器,然后服务器会将回应报文的源Ip地址修改为虚拟IP地址,端口号修改为相应的端口号,在回发给用户

2.   基于应用层负载均衡:负载调度器,会根据用户请求,和各个服务器的状况,将请求交给当前最合适的服务器处理,代表性的有Nginx,Apache 的 Rewrite 模块

调度器配置了8中调度方法:

1.   轮叫:将用户请求轮流交给不同的服务器,而不管服务器的实际的连接数,和服务器的运行情况

2.   加权轮叫:服务器的权重是动态调整的,负载调度器会根据服务器的情况调整权重,然后按照权重分发请求

3.   最少链接:总是将请求给与链接最少的服务器处理

4.   加权最少链接:当服务器的性能差异很大的时候,只使用最好链接效果并不好,这个时候需要使用加权最少链接,权重根据各种情况动态调整

5、基于局部性的最少链接:该算法根据请求的目标 IP 地址找出该目标 IP 地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。

6. 带复制的基于局部性最少链接:带复制的基于局部性最少链接"调度算法也是针对目标 IP 地址的负载均衡,目前主要用于Cache 集群系统。它与 LBLC 算法的不同之处是它要维护从一个 目标 IP 地址到一组服务器的映射,而 LBLC算法维护从一个目标 IP 地址到一台服务器的映射。该算法根据请求的目标 IP 地址找出该目标 IP 地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7. 目标地址散列: 其实就是维护一个静态的哈希表,这个哈希表以目标IP地址作为键,当有一个请求的时候,根据这个请求的IP地址在哈希表里面查找对应的服务器,然后将请求交给这个服务器,当服务器超载或不存在的时候,返回空

8. 目标地址散列: 源地址散列和目标地址散列是一样的,不过是把静态哈希表的键由目标IP地址变成了源IP地址,以源IP地址的IP地址作为散列表的键。

2.  VS/NAT实现虚拟服务器

有一些IP地址作为保留给内部网络使用,当内部网络想要访问外部网络的时候,使用NAT网络地址转换服务实现,

而VS/NAT(Virtual Server via Network Address Translation就是利用NAT的原理实现了一个虚拟服务器集群:

VS|NAT的优点是可以做到端口映射,

1.  VS/DR实现虚拟服务器

在NAT中,负载调度器需要同时处理申请的报文和回复的报文,而回复的报文往往包含巨量的信息,那么假如负载调度器只处理申请的报文,而回复的报文由realserve直接发送给客户,那么速度会快很多

可以看出,回复报文直接通过realServer返还给用户了

这里注意的是,负载均衡调度器修改传入报文的目的MAC地址,这样这个报文一定可以到达负载调度器选定的realServe,然后服务器处理完这个报文之后,直接根据其源IP地址将这个报文送还给用户

VS/DR不支持端口映射,即服务器的端口必须是load balanced对外公布的,要不然会出现服务端口和回应端口的不一致

1.  VS/TUN实现虚拟服务器

Vs/dr限制load balancer和serve必须在同一个物理网络中,那么要是分散在世界各地就不能起作用了,所以这样就出现了vs/Tun(virtual serve via ip tunneling

IP隧道技术指的是,将一个IP报文封装在另一个IP报文中的技术,在这里使用IP隧道技术,在IP隧道的两端分别是负载调度器和服务器的虚拟IP地址,在IP隧道中的报文里面封装着真正的IP请求报文,然后服务器直接将回复报文返还给用户,这个方法相当于VS/DR实现的虚拟服务器的进阶

VS/TUN不支持端口映射,即服务器的端口必须是负载均衡器对外服务的端口号

猜你喜欢

转载自blog.csdn.net/u012737193/article/details/80866123
lvs