关于LVS+Nginx为什么会被同时使用的思考
最初的理解
(也可以每个nginx都挂在上所有的应用服务器)
nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单、配置简单、相关材料也特别多。
lvs是国内的章文嵩博士的大作,比nginx被广泛接受还要早7年,并且已经被红帽作为了系统内置软件,可谓很牛了。lvs相对于nginx来说配置上就要相对复杂一些。
但是,有时候我们会看到大牛们分享的经验里面是lvs+nginx作为负载均衡了,一直想不明白这是个什么道理。
为什么会出现两者被同时使用呢?其实,这要从两者的各自优势来说了。
nginx用来做http的反向代理,能够upsteam实现http请求的多种方式的均衡转发。由于采用的是异步转发可以做到如果一个服务器请求失败,立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。这可以最大程度的提高系统的请求成功率。
lvs采用的是同步请求转发的策略。这里说一下同步转发和异步转发的区别。同步转发是在lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发是nginx在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端。
进一步来说:当做为负载均衡服务器的nginx和lvs处理相同的请求时,所有的请求和响应流量都会经过nginx;但是使用lvs时,仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。
也就是,当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。
但是仅仅使用lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。但是如果在lvs的后端在添加一层nginx(多个),每个nginx后端再有几台应用服务器,那么结合两者的优势,既能避免单nginx的流量集中瓶颈,又能避免单lvs时一锤子买卖的问题。
参考文章:
章文嵩:LVS项目介绍
moon:强大的nginx反向代理异步传输模式(原理)
yaoweibin:nginx健康检查
追马博客:LVS+keepalived+nginx+tomcat部署实现
补充(20160731 下午2:07):
在后续继续了解这部分内容时,发现了这两个帖子:
1.有了LVS,还要apache,nginx有什么用?
2.从一个开发的角度看负载均衡和LVS—–注意看最后一个lvs集群化的图,nginx和rs是一对一连接的。
从以上文章来看,lvs+nginx组合使用的原因主要是用lvs来做负载均衡(因为工作在4层,效率高),nginx来做静态文件的处理。
这里第二篇文章,和lvs的后续维护者之一的[吴佳明_普空的ppt](http://velocity.oreilly.com.cn/2012/ppts/pukong.pdf
)中比章博士的文章中多出了一种转发模式,也就是full_nat模式,这种模式下,所有的响应也要经过lvs服务器作为出口返回给客户端。
lvs在full_nat的模式下,是否还是同步的模式呢?我猜想应该是的,因为lvs工作在4层,所以可能当前出错的响应要映射到之前的那一次请求(因为没有解析http包),所以也就做不到把错误转发到其他的应用服务器上重新处理。
另外,这个补充是不是就完全的否定了昨天(也就是补充之前的那一大段)的内容呢?我觉得并没有。昨天的理解可能不是正规大型互联网在使用的模式(当然,这里我不能确定,因为我没有大型互联网的经验),但是理论应该是对的。
具体一点,lvs+nginx的组合nginx用来做静态文件的处理的场景下,如果一次请求失败了,那么久不能被重新处理了,当然你的nginx也可以后挂1个以上的应用服务器(这样的话nginx实质上也是起到了lvs均衡补充的效果)。另外就是,nginx不是单单的作为静态文件的处理,而是作为lvs的一个补充,互相弥补均衡上的不足。
那么你可能会说lvs在4层上处理的高效就不复存在了,确实是的,这点要承认,但是,我们提高了系统请求的成功率,两者需要各自去选择和权衡。
另外,需要说的一点是,静态内容其实我们还可以借助cdn去处理,而不是单单的依靠nginx或者apache去处理。
补充(2016年12月17日 上午11:24)
现在到了比较大一些的互联网公司,也看了京东的用法(可以看开涛的nginx+lua系列http://www.iteye.com/blogs/subjects/nginx-lua)。
lvs+nginx的使用中,nginx还可以作为一个中间环节来减小后端tomcat的服务压力,以及做一些业务切换、分流、前置缓存的功能。
来源:http://blog.csdn.net/BuquTianya/article/details/52076153
关于LVS+Nginx为什么会被同时使用的思考的更多相关文章
- LVS+Nginx(LVS + Keepalived + Nginx安装及配置)
(也可以每个nginx都挂在上所有的应用服务器) nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- Keepalived+LVS+Nginx负载均衡之高可用
Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...
- LVS+nginx负载均衡知识点1
lvs+nginx负载均衡 1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. ...
- LVS Nginx 负载均衡区别
lvs nginx haproxy 对比都可以做负载均衡:工作方式和应用场景各有特点: lvs Linux 虚拟 服务: 1.可以应用支持协议: ftp http dns telnet smtp sm ...
- haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)
文章转载自: haproxy+keepalived https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别 https: ...
- LVS & NGINX
LVS NGINX
- lvs+nginx负载均衡
1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载 ...
- lvs之 lvs+nginx+tomcat_1、tomcat_2+redis(lvs dr 模式)
前提:已经安装好 lvs+nginx+tomcat_1.tomcat_2+redis环境 ,可参考 (略有改动,比如tomcat_1.tomcat_2安装在两台机器上,而不是单机多实例 ,自行稍稍变动 ...
随机推荐
- POJ3189 Steady Cow Assignment
Steady Cow Assignment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6817 Accepted: ...
- 3.window窗口
window组件依赖于draggable.resizable.panel三个组件,这三个组件的特性window都可以使用: dialog组件依赖于window.linkbutton.
- shell工具-sort
sort sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出 基本语法 sort [选项] [参数] 选项说明 选项 说明 -n 依照数值大小排序 -r 以相反的顺序排序 - ...
- hdu5016
题意:给定一个n个点的图,这个图是一棵树,然后有些点建立了集市.并且没有集市的地方去集市一定是去最近的,如果距离相同,那么则去标号最小的..现在你还能在建一个集市,问建完这个集市最多有多少个点来这里. ...
- 撸.NET Core的正确姿势
特点 案例基于刚发布的.NET Core 2.1 只需一台Linux服务器搞定一切, 全程无需自己配置dotnet环境, 需要熟悉git docker基础知识可有可无, 过了下面几个步骤,你就已经入门 ...
- WPF实战案例-MVVM模式下在Xaml中弹出窗体
相信很多学习和开发wpf项目的同学都了解过mvvm模式,同样,在mvvm模式下会有一个不可忽视的问题,就是怎么在xaml中弹出窗体,而不破坏MVVM本身的结构. 关于弹出窗体的方式还是很多的,本文先讲 ...
- MVVM Light 新手入门(1):准备阶段
1.新建WPF空白项目. 2.NuGet 程序包中安装 3.根据MVVM分层结构,建立包含Model.View.ViewModel三层文件夹 如图: 1.View负责前端展示,与ViewModel进行 ...
- python做数据分析pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...
- 【译】AI 让科技公司变得更强大吗
机器学习可能是当今技术中最重要的基本趋势.由于机器学习的基础是数据 - 大量的数据 - 很常见的是,人们越来越担心已经拥有大量数据的公司会变得更强大.这有一定的道理,但是以相当狭窄的方式,同时ML也看 ...
- 2018-2019-2 20175230 实验三《Java面向对象程序设计》实验报告
目录 实验三 实验三 敏捷开发与XP实践 实验内容 实验要求 实验步骤 (一) 编码标准 (二)敏捷开发与XP (三)敏捷开发与XP 实验体会 实验三 实验三 敏捷开发与XP实践 实验内容 1.XP基 ...