Lvs+Nginx+NDS

news2024/12/16 17:50:35

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

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

从图里可以看出,用户经过互联网直接连接了后端服务器,如果这台服务器什么时候突然 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。当然,前提是你的应用没问题!

四层和七层负载的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1140603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS安全加固方法及实现

​ 目录 iOS安全加固方法及实现 摘要 引言 iOS安全加固方法及实现 一、字符串加密 二、类名方法名混淆 三、程序代码混淆 四、加入安全SDK 总结 参考资料 摘要 本文介绍了iOS平台下的应用安全保护方法&#xff0c;包括字符串加密、类名方法名混淆、程序代码混淆和加入…

input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传

第一个input标签效果 第二个input标签的效果 el-table的改造效果 <template><div class"outerBox"><div class"analyze" v-if"status"><div class"unFile"><div class"mainBox"><img clas…

如何在日常操作中降低激光切割机的老化速度

光纤激光切割机进入各行各业后给很多行业带来了创新和机遇。光纤激光切割机提升了生产效率、提高了产品品质的、降低了生产成本&#xff0c;节约了加工材料&#xff0c;同时加速了新产品的研发进程。然而光纤激光切割机作为一台机械设备也会面临老化和高能耗的问题。 假如维护保…

WebDAV之π-Disk派盘 + 言叶

言叶是一个功能丰富的笔记软件,为跨平台而设计,可以为你在手机、电脑和其他设备中实现多端同步。从而实现高效率的记事和办公。支持Markdown的语言和多种计算机语法高亮功能,让你笔记中的内容更加主次分明,可以在这里记录一些代码什么的。同时还可以在笔记中插入图片,使其…

安卓开发实例:方向传感器

调用手机的方向传感器&#xff0c;X轴&#xff0c;Y轴&#xff0c;Z轴的数值 activity_sensor.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.c…

微信JSAPI支付对接

简介 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口&#xff0c;在支付场景中调起微信支付模块完成收款。 应用场景 JSAPI支付适用于线下场所、公众号场景和PC网站场景。 商户已有H5商城网站&#xff0c;用户通过消息或扫描二维码在微信内打开网页时&#xff0c;可以调…

我做了一个世界杯的可视化网站...

好吧我是标题党&#xff0c;标题用的是完成时&#xff0c;但是事实上我这个还没完成。 这学期有个数据可视化的作业&#xff0c;遂决定做一个世界杯主题的可视化网站。基于Python、Flask和Echarts。 大概思路可以用下图表示&#xff1a; 因此网站也将分为3个大块&#xff0c;…

解决图表内容超出xy轴范围

问题&#xff1a; 解决方式&#xff1a; xAxis: {boundaryGap: true, // 留白属性 }

忆联再次与 OpenCloudOS 完成产品兼容性互认证

近日&#xff0c;忆联数据中心级SSD UH711a与OpenCloudOS 完成相互兼容认证&#xff0c;测试期间&#xff0c;整体运行稳定&#xff0c;在功能、性能及兼容性方面表现良好。 兼容认证证书 作为国产开源操作系统社区&#xff0c;OpenCloudOS 沉淀了腾讯及多家厂商在软件和开源生…

JS清除字符串中的空格

一、replace()方法 replace方法在字符串中搜索值或正则表达式&#xff0c;返回已替换值的新字符串&#xff0c;不会更改原始字符串。 去除字符串内所有的空格&#xff1a;str str.replace(/\s*/g,“”) 去除字符串内两头的空格&#xff1a;str str.replace(/^\s*|\s*$/g,“…

人大加拿大女王大学金融硕士项目——不一定有逆风翻盘,但一定要向阳而生

只有足够努力&#xff0c;才会足够幸运。想要得到世界上最好的东西&#xff0c;得先让时间看到最好的你。不一定有逆风翻盘&#xff0c;但一定要向阳而生。作为在职人士&#xff0c;不断的提升自己是非常重要的。如果停滞不前&#xff0c;便会被社会所淘汰。而人大加拿大女王大…

计讯物联外贸公司--佰沃恩应邀出席第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛

10月22日&#xff0c;以“数智创新能动未来”为主题的第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛于集美海景皇冠假日酒店正式启幕。此论坛聚焦集美区战略前沿产业&#xff0c;汇聚来自全国各地优秀的企业家、高校及科研院所专家学者&#xff0c;并邀请相关领域的亲…

【EI会议征稿通知】第二届材料科学与智能制造国际学术会议(MSIM 2024)

第二届材料科学与智能制造国际学术会议&#xff08;MSIM 2024&#xff09; 2024 2nd International Conference on Materials Science and Intelligent Manufacturing 2024年第二届材料科学与智能制造国际学术会议 &#xff08;MSIM2024&#xff09;将于2024年1月19日至21日在…

【递归】Pow(x , n)(Java版)

目录 1.题目解析 2.讲解算法原理 2.1.如何来解决Pow问题&#xff1f; 2.2.为什么这道题可以用递归来做&#xff1f; 2.2.1 什么是递归 2.2.2 为什么会用到递归 3.如何编写递归代码&#xff1f; 4.递归的细节展开图 1.题目解析 50.Pow(x , n) 实现 pow(x, n) &#xf…

echarts 实现tooltip自动轮播显示,鼠标悬浮时暂停

在ECharts中&#xff0c;可以通过设置 tooltip.trigger"axis" &#xff0c;来显示数据轴上的提示框。 实现tooltip的自动轮播显示&#xff0c;结合使用 setInterval()和 dispatchAction()方法。 获取chart DOM 实例&#xff0c;监听鼠标事件&#xff0c;悬浮时清空定…

【java学习—九】接口 interface(5)

文章目录 1. 相关概念2. 接口的特点3. 应用举例3.1. 特点&#xff1a;接口中的成员变量和方法的默认修饰3.2. 特点&#xff1a;一个类可以实现多个无关的接口3.3. 特点&#xff1a;接口可以继承接口3.4. 特点&#xff1a;实现接口的类中必须提供接口中所有方法的具体实现内容&a…

2核4G服务器5M带宽?选腾讯云轻量应用服务器吧

2核4G服务器5M带宽&#xff1f;选腾讯云轻量应用服务器吧&#xff0c;因为划算&#xff0c;价格便宜&#xff01;2023腾讯云双11优惠活动&#xff1a;轻量2核4G5M服务器166.6元/年&#xff0c;3年566.6元&#xff0c;50GB SSD云硬盘&#xff0c;300GB月流量&#xff0c;值得买的…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

Java多线程篇(12)——ForkJoinPool

文章目录 1、基本原理2、源码2.1、sumbit干了啥&#xff1f;2.2、工作线程如何运行&#xff1f;怎么窃取&#xff1f;2.3、fork干了啥&#xff1f;2.4、join干了啥&#xff1f; 1、基本原理 假设有大量的CPU密集型计算任务&#xff0c;比如计算1-100的总和&#xff0c;普通的写…

两天写一个电影资讯速览微信小程序(附源码)

简介 基于原生小程序精仿的猫眼电影&#xff0c;仅供学习和参考。 首页效果图 数据请求 url: https://m.maoyan.com/ajax/movieOnInfoList?token,success(res) {const movieList0 _this.formatImgUrl(res.data.movieList)wx.hideLoading()_this.setData({movieIds0: res.…