HAProxy负载均衡与最佳实践

Posted 21CTO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HAProxy负载均衡与最佳实践相关的知识,希望对你有一定的参考价值。

负载均衡设备是网站应用的神经系统,它负责接管所有客户端的请求,然后将它们公平的分发到不同的php应用程序服务器。

这里我们要谈的是一个被称为反向代理的服务器。


这里我们讲一些其它地方不会说到的新技巧。


值得说明的是,所有数据的输入输出都要经过负载均衡设备。应用程序绝不会与用户直接通信,它只与负载均衡设备交互,根据用户的HTTP请求做响应。


负载均衡设备包括软件和硬件设备。我不推荐大家使用硬件负载设备,主要原因如下:


1、价格昂贵。超过几十万RMB,对创业预算不高的朋友来讲,完全可以使用开源软件,把它做为薪水多找一些好员工进来。

2、硬件负载对我们来讲,是一个黑匣子。里面的算法完全不是透明的。


因此,我们拥抱开源,使用自己的软件。


如果条件允许,可以布署几个负载均衡,如果只有一个,也许会引发单点故障,当故障发生后,就需要有足够的备份和预案来处理流量。

当流量已经把两个负载均衡设备,就需要有一个负载设备来做备份。否则,一旦有一个主负载故障,余下的流量全部压上第二个,也将无法承载流量。


我们会在后面给你分享,怎么用DNS来做负载均衡设备做流量拆分。



关于HAProxy


HAProxy是软件负载均衡的一个优秀解决方案。

它是用C语言开发的,基于事件来构建一个纯粹的反向代理服务器,因此,它相当快速和轻量。


HAProxyCPU和内存占用极小,这意味着它可以媲美硬件。HAProxy网站上列出了2009年以来的一些基准测试。它每秒可以承载10,8000个HTTP请求,使用10G的网络完全饱合。

此外,HAProxy拥有自2002年以后没有出现流量阻塞的记录。


优于Nginx


nginx是一个非常好的Web服务器,包括它自己的反向代理模块。Nginx可以做一个很好的负载均衡设备。但是选择HAProxy是更好的选择,原因如下:


1、HAProxy是一个纯粹的反向代理工具。它只做这一件,其它不做。

这可以是个优点,对于你来说也可能是个缺点,取决你负载均衡的需求。


2、对于大多数情况,HAProxy是一个非常合适的选择

如果你需要更多的能力和灵活性,可以选择Nginx,虽然Nginx占用的内存和CPU略高一些。



4层与7层


HAProxy可以工作在两种模式:一个是TCP(第4层)和HTTP(第7层) 。在TCP模式下,HAProxy把原始TCP数据包转发到应用程序服务器,此模式是将HTTP头解析转发,这比HTTP(7层)械会节省CPU占用50%左右。


而Nginx现在来看,它被设计成了一个Web Server,而且只支持HTTP(7层)负载均衡。


说到这儿,你可能微微一笑,说没什么关系,HTTP是一个小小开销,除非是特别大的流量,这就是问题了。



你也许会说,很多负载均衡设备会把真实IP放在HTTP头的上面,类似于$_SERVER['X-Forwarded-For'],可以检查得到。但是事实挺遗憾的是『没有』。


为什么呢?



有时我们要相信自己的选择,就像选择HAProxy是正确的一样。


此话怎讲?这个叫HAProxy的家伙,他们自己创建一个『PROXY』协议,它让我们可以在TCP层增加一些代理信息,比如REMOTE_ADDR。当然,这个PROXY协议只适合运行在一些特定的软件上,幸运的是Nginx也支持PROXY协议。


其实,事情是难以置信的简单了。我们只需要在Nginx配置中添加real_ip_header proxy_protocol一行就可以了。


是不是很美好?我们下节见。



说明:转载本文请后台留言,允许后可转载。

以上是关于HAProxy负载均衡与最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

HAProxy配置为代理与负载均衡器之实践

http层负载均衡之 haproxy实践篇

大型网站系统架构实践http层负载均衡之haproxy实践篇

微学堂TCP/HTTP 负载均衡利器 - HAProxy 介绍及实践

HAProxy+Redis实现负载负载均衡(待实践)

Linux企业运维——haproxy负载均衡