关于负载均衡的技术

piaopiao11 2016-07-29 02:56:59
加精
我想了解下 用nginx做负载均衡和DNS做负载均衡的区别,我理解的nginx做负载底层分散请求的算法也是通过DNS来处理的,不知道对不对,因为你不管是用nginx还是lvs都要通过DNS服务器的。整体负载的架构只了解到一个入口,分散到多个服务器上,底层的机制说不出个所以然来。请做过这方面的高手讲讲 我理解的是不是正确的
...全文
3427 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊顺鸣 2016-08-07
  • 打赏
  • 举报
回复
piaopiao11 2016-08-05
  • 打赏
  • 举报
回复
非常感谢大家的参与讨论,收获颇多,感谢版主置顶
业余草 2016-08-02
  • 打赏
  • 举报
回复
www.xttblog.com 看看架构的演变吧
  • 打赏
  • 举报
回复
lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。 首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。 把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。 下面来分析一下两者: 一、lvs的优势: 1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已到上限,内存和cpu方面基本无消耗。 2、配置性低,这通常是一大劣势,但同时也是一大优势,因为没有太多可配置的选项,所以除了增减服务器,并不需要经常去触碰它,大大减少了人为出错的几率。 3、工作稳定,因为其本身抗负载能力很强,所以稳定性高也是顺理成章,另外各种lvs都有完整的双机热备方案,所以一点不用担心均衡器本身会出什么问题,节点出现故障的话,lvs会自动判别,所以系统整体是非常稳定的。 4、无流量,上面已经有所提及了。lvs仅仅分发请求,而流量并不从它本身出去,所以可以利用它这点来做一些线路分流之用。没有流量同时也保住了均衡器的IO性能不会受到大流量的影响。 5、基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。 另:lvs也不是完全能判别节点故障的,譬如在wlc分配方式下,集群里有一个节点没有配置VIP,会使整个集群不能使用,这时使用wrr分配方式则会丢掉一台机。目前这个问题还在进一步测试中。所以,用lvs也得多多当心为妙。 二、nginx和lvs作对比的结果 1、nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点看,触碰多了,人为出问题的几率也就会大。 2、nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,nginx就能连得通,nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路;lvs就比较依赖于网络环境,目前来看服务器在同一网段内并且lvs使用direct方式分流,效果较能得到保证。另外注意,lvs需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。 3、nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。lvs的安装和配置、测试就要花比较长的时间了,因为同上所述,lvs对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。 4、nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。 5、nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前lvs中ldirectd也能支持针对服务器内部的情况来监控,但lvs的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而恼火。 6、nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大量内存而不能释放,使用多一个nginx做apache代理的话,这些窄带链接会被nginx挡住,apache上就不会堆积过多的请求,这样就减少了相当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。lvs没有这些功能,也就无法能比较。 7、nginx能支持http和email(email的功能估计比较少人用),lvs所支持的应用在这点上会比nginx更多。 在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。 重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。 nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。 nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。 nginx也可作为网页静态服务器,不过超出了本文讨论的范畴,简单提一下。(有兴趣的同志可参阅张宴兄弟的有关nginx的文章,相当经典) 具体的应用还得具体分析,如果是比较小的网站(日PV<1000万),用nginx就完全可以了,如果机器也不少,可以用DNS轮询,lvs所耗费的机器还是比较多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用lvs。
sinat_35744608 2016-07-30
  • 打赏
  • 举报
回复
DNS做负载均衡是以A记录的方式向一个域名解析多个IP,用户访问域名时,将会随机解析出其中一个IP并访问。 优点是配置简单,缺点是负载分配不平均,而且如果其中一个IP挂了,反应到DNS生效要很长时间111111 Nginx的负载均衡是用反向代理方式,nginx先接收用户请求,再按配置的规则转发到多个可选IP中的一个上 优点是可按需定制规则,缺点是反向代理模式增加一步额外的http转发,对性能略有损耗,而且要处理好nginx服务本身的负载和高可用性问题11111
cattpon 2016-07-29
  • 打赏
  • 举报
回复
为什么一定要服务器负载均衡?
钠离子zi 2016-07-29
  • 打赏
  • 举报
回复
引用 4 楼 peishucai 的回复:
我想问nginx负载均衡和LVS有什么区别
nginx配置简单,lvs复杂,算法都大同小异吧。 哦,还有就是,nginx只能做http第七层协议的转发,lvs可以直接走第四层。
qiuchengss 2016-07-29
  • 打赏
  • 举报
回复
先占一个位
天骄老祖 2016-07-29
  • 打赏
  • 举报
回复
我想问nginx负载均衡和LVS有什么区别
  • 打赏
  • 举报
回复
引用 2 楼 autfish 的回复:
DNS做负载均衡是以A记录的方式向一个域名解析多个IP,用户访问域名时,将会随机解析出其中一个IP并访问。 优点是配置简单,缺点是负载分配不平均,而且如果其中一个IP挂了,反应到DNS生效要很长时间 Nginx的负载均衡是用反向代理方式,nginx先接收用户请求,再按配置的规则转发到多个可选IP中的一个上 优点是可按需定制规则,缺点是反向代理模式增加一步额外的http转发,对性能略有损耗,而且要处理好nginx服务本身的负载和高可用性问题
分析的很有道理, nginx默认的负载方式是加权轮询, 如果可以把加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;第二,当所有后端机器都down掉时,nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态,从而导致整个前端被夯住。
大雨将至 2016-07-29
  • 打赏
  • 举报
回复
DNS做负载均衡是以A记录的方式向一个域名解析多个IP,用户访问域名时,将会随机解析出其中一个IP并访问。 优点是配置简单,缺点是负载分配不平均,而且如果其中一个IP挂了,反应到DNS生效要很长时间 Nginx的负载均衡是用反向代理方式,nginx先接收用户请求,再按配置的规则转发到多个可选IP中的一个上 优点是可按需定制规则,缺点是反向代理模式增加一步额外的http转发,对性能略有损耗,而且要处理好nginx服务本身的负载和高可用性问题
piaopiao11 2016-07-29
  • 打赏
  • 举报
回复
DNS负载均衡最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。 反向代理负载均衡普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧