前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做负载均衡,你得先了解这些

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

作者头像
用户2781897
发布2020-09-01 15:17:41
1K0
发布2020-09-01 15:17:41
举报
文章被收录于专栏:服务端思维服务端思维

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

负载均衡要解决什么问题

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

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

负载均衡如何实现

实现负载均衡可以从硬件和软件两方面着手,在硬件上我们可以使用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 的相关介绍摘自网上, 感谢作者,其实网上的介绍都是这样, 我也不知道谁是第一作者了,所以此处就不标注出处了, 望作者原谅

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 服务端思维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 负载均衡要解决什么问题
  • 负载均衡如何实现
  • 如何选择是用何种软件来实现负载均衡
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档