常见的负载均衡策略

负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡的实施:

A.设置中间层DNS,使网站的域名映射到多个服务器的IP,采用一种轮询的方式。用户面对的是系统域名,用户机器做域名解析时分别返回各个服务器IP,实现各个机器的负载相对均衡。

存在问题:由于DNS这个分层的系统中有缓存,用户端的机器也有缓存,如果某个机器出故障,域名解析仍然会返回那个出问题机器的IP,那所有访问该机器的用户都会出问题, 即使我们把这个机器的IP从DNS中删除也不行。

DNS是指:域名服务器(Domain Name Server)
在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

B.自己设置个中间层服务器软件LB(Load Balancer ), 设置2个ip,一个对外,一个对内,后面跟上多个真实服务器(RS)。LB接到用户发了HTTP的请求后,替换数据包中的目的IP为RS的IP,由于LB的对内IP是各个RS的网关,当正式服务器返回用户请求时,LB还会收到返回的数据包,再次替换源地址和源端口后发送给客户,让客户端毫无察觉。

LB选取RS的方式:

1.轮询: 这个最简单,就是一个挨一个轮换。

2.加权轮询: 为了应对某些服务器性能好,可以让他们的权重高一点,被选中的几率大一点。

3.最少连接: 哪个服务器处理的连接少,就发给谁。

4.加权最少连接:在最少连接的基础上,也加上权重

存在问题:对于用户的一个请求来说,可能会被分成多个数据包来发送, 如果这些数据包被Load Balancer发到了不同的机器上,那就完全乱套了!

C.四层负载均衡

在步骤B的基础上,给LB添加一个表,用于记录客户端数据包被转发到了哪个RS服务器上,以便于当下一个数据包到来时,可以把它转发到同一个服务器上去。所以这个LB需要是面向连接的,也就是OSI网络体系的第4层, 可以称为四层负载均衡

若LB将HTTP层的报文数据取出,根据其中的URL,浏览器,语言等信息,把请求分发到后面真实的服务器去,那就是七层的负载均衡了。

*存在瓶颈:

所有的流量都要通过它,它要修改客户发来的数据包, 还要修改发给客户的数据包。

另外,网络访问还有个极大的特点,那就是请求报文较短而响应报文往往包含大量的数据。这是很容易理解的,一个HTTP GET请求短得可怜,可是返回的HTML却是极长 – 这就进一步加剧了LB修改数据包的工作。

D.在C的基础上,LB对外使用VIP地址,对内不变,每个实际服务器(RS)的loopback都绑定VIP,让LB只处理请求,让各个服务器把响应直接发给客户端,做到”请求和响应分开处理“解决瓶颈。

具体:

IP数据包其实是通过数据链路层发过来的,最外层是以太网帧,包含了目的地和源地址的MAC地址,其中目的地MAC地址怎么来呢?

可以使客户端通过ARP协议,将VIP地址广播出去,具有此IP机器就会回复其MAC地址,因此设置只让LB响应这个VIP地址的ARP请求,抑制住各个RS对这个VIP地址的ARP响应,就可以唯一地确定LB。LB得到客户端的数据包,就可以通过策略,选择一个RS的MAC地址取代以太网帧的目的地,IP数据报原封不动,转发给RS,RS收到解开数据,发现目的地IP是自己的IP,就可以处理了。处理完了以后,RS可以直接响应发回给客户端,完全不用再通过LB。

每个实际服务器的loopback都绑定了那个VIP,对于客户端来说,它看到的还是那个唯一的VIP地址, 并不知道后台发生了什么事情。

由于LB不会修改IP数据报,其中的TCP的端口号自然也不会修改,这就要求各个RS上的端口号必须得和LB一致才行。

回环(loopback)指将电子信号、数据流等原样送回发送者的行为。它主要用于对通信功能的测试。

nginx是常用的反向代理服务器,可以用来做负载均衡。

请求转发策略,使用到了VIP NAT LVS BVS BGW BFE 等知识。

LVS有三种工作模式:NAT、TUN、DR,目前使用最广泛的也就是DR模式。

负载均衡有两层、三层、四层、七层负载均衡几大类。其中,LVS是属于四层负载均衡;nginx以及BFE均属于七层负载均衡。