做负载均衡,你得先了解这些
Posted 服务端思维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了做负载均衡,你得先了解这些相关的知识,希望对你有一定的参考价值。
回复”669“获取独家整理的精选资料集
回复”加群“加入全国服务端高端社群「后端圈」
为了让大家进一步了解负载均衡,从而做好负载均衡,今天我再给大家详细介绍一下。
负载均衡要解决什么问题
负载均衡主要解决以下几个问题:
解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力)
提供故障转移,实现高可用
通过添加或减少服务器数量,提供网站伸缩性(扩展性)
安全防护(负载均衡设备上做一些过滤,黑白名单等处理)
负载均衡如何实现
实现负载均衡可以从硬件和软件两方面着手,在硬件上我们可以使用F5等负载均衡器,在软件上我们可以使用LVS、nginx、HaProxy等负载均衡软件。使用硬件性能强悍,使用软件灵活智能。不过,不管是从硬件层面还是从软件层面去解决负载均衡,其原理不外乎以下几点:
1、利用DNS,通过使用域名解析实现负载均衡
配置多个A 记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。显而易见,使用这种方式的负载均衡的控制权在域名商那里,不易拓展,并且用这种方式的负载不能很好的分流,有可能造成所有的请求都集中到一个节点上。不过,若作为第一层的负载均衡的确是个好办法。
2、利用HTTP进行负载均衡
当HTTP代理(比如浏览器)向WEB服务器请求某个URL后,WEB服务器可以通过HTTP响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。
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更会比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 的相关介绍摘自网上, 感谢作者,其实网上的介绍都是这样, 我也不知道谁是第一作者了,所以此处就不标注出处了, 望作者原谅
— 本文结束 —
●
●
●
●
●
关注我,回复 「加群」 加入各种主题讨论群。
对「服务端思维」有期待,请在文末点个在看
以上是关于做负载均衡,你得先了解这些的主要内容,如果未能解决你的问题,请参考以下文章