做负载均衡,你得先了解这些

2020-09-01 15:17:41 浏览数 (1)

为了让大家进一步了解负载均衡,从而做好负载均衡,今天我再给大家详细介绍一下。

负载均衡要解决什么问题

负载均衡主要解决以下几个问题:

  • 解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力)
  • 提供故障转移,实现高可用
  • 通过添加或减少服务器数量,提供网站伸缩性(扩展性)
  • 安全防护(负载均衡设备上做一些过滤,黑白名单等处理)

负载均衡如何实现

实现负载均衡可以从硬件和软件两方面着手,在硬件上我们可以使用F5等负载均衡器,在软件上我们可以使用LVS、Nginx、HaProxy等负载均衡软件。使用硬件性能强悍,使用软件灵活智能。不过,不管是从硬件层面还是从软件层面去解决负载均衡,其原理不外乎以下几点:

1、利用DNS,通过使用域名解析实现负载均衡

配置多个A 记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。显而易见,使用这种方式的负载均衡的控制权在域名商那里,不易拓展,并且用这种方式的负载不能很好的分流,有可能造成所有的请求都集中到一个节点上。不过,若作为第一层的负载均衡的确是个好办法。

2、利用HTTP进行负载均衡

当HTTP代理(比如浏览器)向WEB服务器请求某个URL后,WEB服务器可以通过HTTP响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。

3、利用IP在网络层通过修改请求目标地址进行负载均衡。

用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为获得的真实IP地址,不需要经过用户进程处理。真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的IP地址,发送给用户浏览器。

4、利用链路层,在通信协议的数据链路层修改MAC地址,进行负载均衡。

数据分发时,不修改IP地址,只修改目标MAC地址,配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。实际处理服务器IP和数据请求目的IP一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。

5、使用混合方式

其实这就显而易见了,当单一的负载均衡方式无法很好的解决现有的问题,那么我们就可以把他们结合在一起使用,这也很符合当下的发展潮流啊… 具体的结合方式有很多,例如 我们可以考虑分层,在每一层采用不同的方式来进行负载均衡,在最外层使用 DNS负载均衡,在使用反向代理来做缓存以及动态请求分发 ,最后在是应用负载均衡(IP/DR), 分流到对应的应用集群

由于在实际的工作中,我们大多数是使用软件来解决负载均衡,因此,下面我以LVS、HaProxy、Nginx为例,介绍一下负载均衡的具体实现。

LVS

LVS (Linux Virtual Server) 工作在网络七层协议的第四层上,是基于IP层的负载均衡调度技术。它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。

使用LVS进行负载均衡有如下特点:

  • 抗负载能力强,因为LVS工作方式的逻辑是非常之简单,而且工作在网络四层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。
  • 配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。
  • 工作稳定,因为其本身抗负载能力很强,所以,稳定性高也是顺理成章。另外,各种LVS都有完整的双机热备方案,所以,一点不用担心均衡器本身会出什么问题。节点出现故障的话,LVS会自动判别,所以系统整体是非常稳定的。
  • 无流量,上面已经有所提及了。LVS仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量,同时,也保住了均衡器的IO性能不会受到大流量的影响。
  • 基本上能支持所有应用,因为LVS工作在网络四层,所以,它可以对几乎所有应用做负载均衡,包括HTTP、数据库、聊天室等等.

大多时候LVS是和Keepalived一起配合使用的,LVS提供负载均衡,Keepalived提供健康检查。采用这样的架构,扩展方便。扩展时只需要在后端添加或者减少Real Server,然后更改LVS的配置文件即可。

HaProxy

HaProxy工作在网络七层协议的第七层之上,能够补充Nginx的一些缺点,比如,Session的保持,Cookie的引导等工作。

HaProxy支持URL检测,利用此功能,可以检测后端服务器是否出现问题。

HaProxy支持多种负载均衡策略,比如,动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)等。

单纯从效率上来讲,HaProxy更会比Nginx有更出色的负载均衡速度。

HaProxy可以对MySQL进行负载均衡,对后端的DB节点进行检测和负载均衡。

Nignx

Nginx工作在网络七层协议的第七层,可以针对HTTP应用做一些分流的策略,比如,针对域名、目录结构等。

Nginx对网络的依赖比较小,Nginx安装和配置比较简单,测试起来比较方便。

Nginx也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发。

Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。

不过其中缺点就是不支持url来检测。

Nginx对请求的异步处理可以帮助节点服务器减轻负载。

Nginx不支持Session的保持、对Big request header的支持也不是很好。另外,默认的只有Round-robin和IP-hash两种负载均衡算法。

如何选择是用何种软件来实现负载均衡

这要分三个阶段:

第一阶段:利用Nginx或者HaProxy进行单点的负载均衡。

这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小。没有专业的维护团队来进行维护,也不需要进行大规模的网站部署。这样利用Nginx或者HAproxy就是第一选择,此时,这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。

第二阶段:随着网络服务进一步扩大,单点的Nginx已经不能满足,这时,使用LVS或者商用F5就是首要选择。

Nginx此时就作为LVS或者F5的节点来使用。具体LVS或者F5的是选择是根据公司规模,人才以及资金能力来选择的,这里也不做详谈,但是,一般来说这阶段相关人才跟不上业务的提升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时,随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时,无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选。这时,LVS会成为主流。最终形成比较理想的状态为:F5/LVS -> Haproxy -> Squid/Varnish -> AppServer。

LVS/HaProxy/Nignx 的相关介绍摘自网上, 感谢作者,其实网上的介绍都是这样, 我也不知道谁是第一作者了,所以此处就不标注出处了, 望作者原谅

0 人点赞