龙空技术网

一文搞懂负载均衡,Nginx、LVS、HaProxy,集群化部署的必备策略

IT一指禅 8707

前言:

今天我们对“nginx跟lvs的负载均衡”大致比较关心,小伙伴们都想要学习一些“nginx跟lvs的负载均衡”的相关内容。那么小编在网络上汇集了一些对于“nginx跟lvs的负载均衡””的相关资讯,希望你们能喜欢,咱们快快来了解一下吧!

大家好,我是IT售前工程师Bernie。

本文将详细介绍服务器集群中负载均衡的概念、分类和具体策略,欢迎阅读.

为什么需要负载均衡?

每年的6.18、双十一、双十二都有数以亿计的剁手党在互联网上浏览和购买促销商品。

访问量的激增,服务器势必会超负荷运行,造成网站反应迟缓甚至部分交易失败。单个服务器的故障会严重影响整个应用和用户体验,造成巨大损失。

如今,平均每天有超过40亿人在使用互联网。人们希望网站具备高速、稳定的加载互联网体验。因此,网站背后的服务器集群需要负载均衡,以确保整个计算平台具备强大的可靠性和弹性的可扩展能力。

负载均衡的产生背景

互联网的发展早期,用户量较少,业务需求也比较简单。对于服务商来讲,可以使用单体架构的服务,即:一台高配的服务器即可完成普通业务的支撑。

随着用户量的增加,服务器的请求量也指数级增加。在这个过程中,单体架构会产生两个问题:

① 软件的性能逐步下降,访问延迟越来越高。

② 单体架构容易出现单点故障,一台服务器出现问题会导致整个应用不可用。

为解决这个问题呢,我们引入了集群化的部署架构:把一个软件应用同时部署在多台服务器上,类似于这样的一个架构。

架构的变化带来两个问题

① 客户端请求如何均匀地分发到多台目标服务器上。

② 如何动态检测目标服务器的健康状态,避免发生客户端向已经宕机的服务器发送请求的情况。

为了解决以上两个问题,我们引入了负载均衡的概念。

负载均衡的核心目标是让客户端的请求合理、均匀地分发到多台目标服务器上,并监控每台服务器的工作饱和度、健康状态,以提高集群的整体服务效能。

实现负载均衡的常见方案主要有三种

① 基于DNS来实现负载均衡

② 基于硬件设备来实现负载均衡

③ 基于软件来实现负载均衡。

基于DNS的负载均衡方案

首先,来说一下基于DNS来实现负载均衡的方式。它的实现方式比较简单,只需要在DNS服务器上针对某个域名做多个IP映射就行了。

它的工作原理是:当用户通过域名去访问某个网站的时候,会先通过DNS服务器进行域名解析,得到一个IP地址,DNS服务器会随机的分配一个IP地址进行访问,这样就实现了基于DNS的负载均衡。

DNS还可以根据不同的地域分配就近的机房IP。比如,在上海的某台客户端请求服务时,可能会得到上海的或者上海附近的某个机房IP的服务。这个模式可以实现就近访问,从而缩短通信的距离,提升整个网站的请求效率。

基于DNS的负载均衡方案,优点是配置简单,实现成本低,无需要额外的开发和维护成本。缺点是:由于DNS多级缓存的特性,当我们去修改DNS配置的时候,会因为缓存导致IP变更不及时,影响到负载均衡的效果。

基于硬件的负载均衡方案

基于硬件的实现负载均衡方案,我们可以简单的理解为一个网络设备,成为负载均衡器。比如某台性能较好的交换机,每秒钟能够处理百万级别的请求,同时,它可以支持多种负载均衡算法。

我们可以在负载均衡器上灵活地配置不同的负载策略,它还具有防火墙等安全功能。更重要的是,由于硬件负载是商业产品,有专门的售后运维人员来支持,所以企业不需要花精力去做维护。

由于硬件负载设备的价格比较昂贵,一般在一些大型银行、证券、政府等场景使用。

基于软件的负载均衡方案

基于软件负载就是通过一些开源的软件或者商业软件来完成负载均衡的功能。常见的软件负载技术有Nginx、LVS、HaProxy等。

目前,互联网企业绝大多数采用的都是软件负载均衡,主要原因是

① 免费。企业不需要投入较高的硬件成本

② 开源。不同的企业对于负载均衡的需求有差异,所以可以基于开源软件的基础上进行二次开发。

③ 灵活性高。企业可以根据自己的需要,随时进行代码层面的调整和优化。

Nginx

Nginx是一个网页服务器,它能反向代理HTTP、HTTPS,、SMTP、POP3、IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存。Nginx主要用来做七层负载均衡。官方支持每秒5万并发,实际国内一般到每秒2万并发,有优化到每秒10万并发的。

LVS(Linux Virtual Server)

通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。LVS主要用来做四层负载均衡。

LVS架设的服务器集群系统由三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

HAProxy

HAProxy也是使用较多的一款负载均衡软件。HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,是免费、快速并且可靠的一种解决方案。特别适用于那些负载特大的web站点。运行模式使得它可以很简单安全的整合到当前的架构中,同时可以保护你的web服务器不被暴露到网络上。Haproxy主要用来做七层负载均衡。

负载均衡的作用范围

负载均衡作用在网络通信层面来实现请求的分发的,在网络架构中,基于OSI七层网络模型,我们可以在网络的某些分层上去做请求的分发处理。通常情况下,负载均衡的策略可以作用在OSI参考模型的二层、三层、四层和七层。

二层负载

基于Mac地址来实现的请求分发,一般是采用虚拟Mac的方式来实现。服务器收到请求之后,通过动态分配后端服务器的实际mark地址去进行响应,从而实现负载均衡。

三层负载

基于IP层的负载,一般是通过虚拟IP的方式来实现外部请求,通过访问虚拟IP,服务器端收到请求之后,根据获得实际的IP地址去做分发。

四层负载

通过请求报文中的目标地址和端口来进行负载的,Nginx、LVS都是可以实现四层负载的。

七层负载

基于应用层的负载,服务器端可以根据HTP协议请求的报文信息来决定请求分发到哪一台目标服务器上,比如说我们可以根据cookie、消息体、request等这样一些信息去做分发。

负载均衡的常用算法

所谓负载均衡算法,就是决定当前客户端请求匹配到目标服务器集群中的具体哪一个节点。常见的负载均衡算法有

① 轮询。多台服务器按照顺序逐一进行复载,这样的话每个服务器都可以获得相同的请求次数。

② 随机算法。根据随机算法,获得一个目标服务器地址,由于该算法具有随机性,因此每一台服务器获得的请求数量不一定均衡。

③ 一致性Hash。具有相同的Hash的请求永远发送到同一台目标节点上。

④ 最小连接数。根据目标服务器的请求数量来决定请求的分发权重,也就是说目标服务器的集中请求,更少的节点将会获得更多的请求,这是一种负载均衡比较好的策略,真正能够去实现目标服务器的请求均衡。

总结

以上就是负载均衡的相关内容,管中窥豹,还有很多方案和话题值得去挖掘的,比如说负载均衡算法具体实现原理,Nginx、LVS、HaProxy的作用原理等等。篇幅有限,后续会逐一详述。

我是IT售前工程师Bernie,欢迎关注!下期见~

标签: #nginx跟lvs的负载均衡