Lvs+Nginx+NDS

2023-10-29 16:01
文章标签 nginx lvs nds

本文主要是介绍Lvs+Nginx+NDS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是?为什么?需要负载均衡

一个网站在创建初期,一般来说都是只有一台服务器对用户提供服务

从图里可以看出,用户经过互联网直接连接了后端服务器,如果这台服务器什么时候突然 GG 了,用户将无法访问这个网站(单点故障)。

那么要怎么办呢?加机器!扩容!不差钱!

这样我们就有了很多台机器了,足够应付用户的请求了。

在这里,我们把用户的访问流量称为负载,而根据转发策略(rules)将负载(访问流量)分配给后端机器的服务便是负载均衡

讲讲亿级PV的负载均衡架构

DNS

DNS负载均衡是一种通过DNS(Domain Name System)解析来实现负载均衡的方法。它通过将域名解析请求分发到多个服务器上,从而实现服务器资源的均衡利用和提高系统的可用性、性能和可扩展性。

在DNS负载均衡中,一个域名可以对应多个IP地址,每个IP地址对应一个服务器。当客户端发送一个域名解析请求时,DNS服务器会返回一个IP地址给客户端,使得客户端直接连接到相应的服务器。

开始呢,我们的应用只有一台web-server。那么你希望: 输入http://guduyan.com就能定位到该server

那很简单,只要在DNS里配上域名和你的server映射关系,就能访问到啦! 流程如下图所示:

好,现在呢,多了一台web-server,你就可以通过在DNS里加一条配置,以DNS轮询方式进行负载均衡。如下图所示:

DNS负载均衡可以使用以下几种策略:

  1. 轮询(Round Robin):DNS服务器按照事先定义的顺序逐个返回服务器的IP地址,以实现请求的均衡分发。每个请求依次分配到不同的服务器上,循环往复。
  2. 加权轮询(Weighted Round Robin):为了更精确地控制流量分配,可以为每个服务器分配一个权重值。DNS服务器根据权重值的比例来决定返回哪个服务器的IP地址,以实现更灵活的负载均衡。
  3. 最少连接数(Least Connection):DNS服务器根据服务器当前的连接数信息,选择连接数最少的服务器,并返回其IP地址。这样可以将请求发送到负载较轻的服务器,以实现负载均衡。
  4. 基于地理位置(Geolocation):根据客户端的地理位置信息,DNS服务器返回最接近客户端的服务器IP地址。这样可以减少网络延迟,提高用户体验。

Nginx

Nginx是四层均衡

Nginx是一个开源的高性能、轻量级的Web服务器和反向代理服务器,它也提供了负载均衡的功能。Nginx负载均衡通过将客户端请求分发到多个后端服务器上,实现服务器资源的均衡利用和提高系统的可用性、性能和可扩展性。

Nginx负载均衡的主要特点包括:

  1. 反向代理:Nginx作为反向代理服务器,接收客户端的请求,并将请求转发给后端的真实服务器。客户端只需要与Nginx进行通信,而无需直接连接到后端服务器,从而提高了系统的安全性。
  2. 支持多种负载均衡算法:Nginx提供了多种负载均衡算法,包括轮询(round-robin)、IP哈希(ip-hash)、最少连接数(least_conn)等。这些算法可以根据实际需求选择合适的方式来分发请求。
  3. 健康检查:Nginx可以定期对后端服务器进行健康检查,以确保只有正常工作的服务器参与请求的处理。当某个服务器发生故障或不可用时,Nginx会自动将请求转发给其他可用的服务器,实现故障转移和高可用性。
  4. 动态配置:Nginx支持动态地添加、删除和修改后端服务器的配置,无需重新启动服务。这使得系统的扩展和维护更加方便和灵活。
  5. SSL终端:Nginx可以作为SSL终端,负责处理SSL/TLS协议的加密和解密,从而减轻后端服务器的负担,提高系统的性能和安全性。

DNS+Nginx

现在假设,我们多了一些需求啊。你的系统按照功能模块拆成两个系统:用户系统和订单系统。那么你希望 输入http://guduyan.com/user/的时候定位到用户系统。输入http://guduyan.com/order/的时候定位到订单系统。

那这时候,光靠DNS就不行了,就需要采用DNS+nginx进行负载均衡!如下图所示:

ps:nginx还可以做动静分离哦,大家应该懂的!

那如果系统的访问压力进一步加大,万一nginx挂了怎么办?如何给nginx引入热备? 这里就要用keepalived了,用两台nginx组成一个集群,分别部署上keepalived,设置成相同的虚IP,这样一个节点在崩溃的情况下,另一个节点能够自动接替其工作,如下图所示:

什么是keepalived

LVS

Lvs是七层负载

LVS(Linux Virtual Server)是一个基于Linux内核的开源负载均衡软件,它提供了高性能、可扩展和可靠的负载均衡解决方案。LVS通过将客户端请求分发到多个后端服务器上,实现服务器资源的均衡利用和提高系统的可用性、性能和可扩展性。

LVS的主要特点包括:

  1. 高性能:LVS利用Linux内核的IP负载均衡技术,通过网络层的数据包转发来实现负载均衡,具有较低的延迟和高吞吐量。
  2. 可扩展性:LVS支持水平扩展,可以通过增加后端服务器来提高系统的容量和性能。同时,LVS还支持多种负载均衡调度算法,如轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接数(Least Connection)等,以满足不同场景的需求。
  3. 高可用性:LVS支持故障检测和故障转移机制,当后端服务器发生故障或不可用时,LVS会自动将请求转发给其他可用的服务器,从而实现故障转移和高可用性。
  4. 灵活的配置和管理:LVS提供了灵活的配置和管理接口,可以通过命令行工具或配置文件进行配置。同时,LVS还支持动态添加、删除和修改后端服务器的配置,无需重启服务。

Lvs+Nginx+DNS

接下来随着系统规模的继续增大,你会慢慢的发现nginx也扛不住了!nginx工作在网络的第7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等。 而Lvs工作在网络4层,抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低,且稳定,可靠性高。它利用linux的内核进行转发,不产生流量。它能撑的并发量取决于机器的内存大小,一般来说撑个几十万并发问题不大!

ps:好好思考为什么会出现nginx+Lvs被同时使用,注意看我演变的过程,面试必问!注意了,如果是比较小的网站(日pv<1000万),用nginx就完全可以了,如果机器也不少,可以用dns轮询,Lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候要多多考虑利用Lvs。

那么,在这种情况下的架构图如下所示:

可能有个疑问,为什么nginx层不用keepalived做热备?

主要原因是: 在这种架构下,nginx不是单台,如果nginx挂了,Lvs会帮你转发到其他可用的nginx上!

最后,为了应对亿级的PV,一般会在DNS端配多个Lvs集群的地址。如下所示:

方案扩展到了这一步,Lvs层就没有必要再进行扩展新的节点了。这套架构已经能扛得住亿级的PV。当然,前提是你的应用没问题!

四层和七层负载的区别

这篇关于Lvs+Nginx+NDS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/301751

相关文章

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Nginx配置location+rewrite实现隐性域名配置

《Nginx配置location+rewrite实现隐性域名配置》本文主要介绍了Nginx配置location+rewrite实现隐性域名配置,包括基于根目录、条件和反向代理+rewrite配置的隐性... 目录1、配置基于根目录的隐性域名(就是nginx反向代理)2、配置基于条件的隐性域名2.1、基于条件

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分

一文详解Nginx的强缓存和协商缓存

《一文详解Nginx的强缓存和协商缓存》这篇文章主要为大家详细介绍了Nginx中强缓存和协商缓存的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、强缓存(Strong Cache)1. 定义2. 响应头3. Nginx 配置示例4. 行为5. 适用场景二、协商缓存(协

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题