HAProxy介绍和应用
HAProxy简介
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
HAProxy是法国人Willy Tarreau开发的一个开源软件,是一款应对客户端10000以上的同时连接的高性能的TCP和 HTTP负载均衡器。其功能是用来提供基于cookie的持久性, 基于内容的交换,过载保护的高级流量管制,自动故障切换 ,以正则表达式为基础的标题控制运行时间,基于Web的报表,高级日志记录以帮助排除故障的应用或网络及其他功能。
HAProxy配置详解
配置文件
haproxy.cfg主要有两部分组成:global和proxies配置段
global:全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug参数
proxies:代理配置段
- defaults:为frontend, backend, listen提供默认配置
- fronted:接收请求的前端虚拟节点,frontend可以增加规则直接指定具体使用后端的backend
- backend:后端服务集群的配置,真实服务器,一个backend对应一个或者多个实体服务器
- listen:同时拥有前端和后端,适用于一对一环境。fronted和backend的组合体,比如haproxy实例状态监控部分配置
HAProxy之ACL规则定义
HAProxy的ACL具有很强大的功能,能够定义三到七层的规则。ACL的作用,就是为了匹配一些特别的请求,然后对其进行修改或者分发到不同的服务器组中。
HAProxy的ACL用于实现基于请求报文的首部、响应报文的内容或 其它的环境状态信息来做出转发决策,这大大增强了其配置弹性。 其配置法则通常分为两步,首先去定义ACL,即定义一个测试条件 ,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至 某特定的后端。
HAProxy负载均衡算法
使用balance定义负载均衡算法,可用于“defaults”、“listen”和“backend”。用于在负载均衡场景中挑选一个server,其仅应用于用户新请求或需要将一个连接重新派发至另一个服务器时。常用的算法有:undrobin、source和lestconn。
Tomcat部署项目访问不加项目名设置
打开conf目录下server.xml;
在Host内添加如下Context,其中docBase改为自己的项目路径即可。