1.什么是haproxy?
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
HAProxy运行在当前的硬件上完全可以支持数以万计的并发连接
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和 Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
2.和haproxy相关的概念
- (1)有关代理的概念
正向代理
正向代理通过上面的图理解其实就是用户想从服务器拿资源数据,但是只能通过proxy服务器才能拿到
所以用户A只能去访问proxy服务器然后通过proxy服务器去服务器B拿数据
这种情况用户是明确知道你要访问的是谁,在我们生活中最典型的案例就是“翻墙“了,也是通过访问代理服务器最后访问外网的
反向代理
反向代理其实就是客户端去访问服务器时,他并不知道会访问哪一台,感觉就是客户端访问了Proxy一样
而实则就是当proxy关口拿到用户请求的时候会转发到代理服务器中的随机(算法)某一台
而在用户看来,他只是访问了Proxy服务器而已,典型的例子就是负载均衡了
代理服务器,可以提供缓存功能加速客户端访问,同时可以对缓存数据进行有效性检查
内容路由:根据流量以及内容类型将请求转发至特定的服务器
转码器:支持压缩功能,将数据以压缩形式发送给客户端
- (2)有关缓存的概念
减少访冗余内容传输,节省带宽,缓解网络瓶颈
降低了对原始服务器的请求压力,降低了传输延迟
- (3)有关负载均衡集群的概念
四层:(前面讲过)
lvs, nginx(stream),haproxy(mode tcp)
七层:
http: nginx(http, ngx_http_upstream_module), haproxy(mode http), httpd, ats, perlbal, pound...
3.haproxy的功能
HAProxy是TCP / HTTP反向代理服务器,尤其适合于高可用性环境
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP报文首部
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息