Haproxy原理与配置讲解
一、Haproxy概述:
一种高效、可靠、免费的高可用及负载均衡软件,非常适合于高负载站点的七层数据请求。客户端通过Haproxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器
实现了一种事件驱动、单一进程模型,能支持非常大的并发连接数
同一客户端访问服务器,Haproxy保持回话的三种方案:
1) Haproxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。
2) Haproxy依靠真实服务器发送给客户端的cookie信息进行回话保持。
3) Haproxy保存真实服务器的session及服务器标识,实现会话保持功能。
二、Haproxy代理模式:
- 四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量,可用于邮件服务内部协议通信服务器、Mysql服务等;
- 七层应用代理:Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。可用于HTTP代理或https代理。
无负载均衡
简单的无负载均衡Web应用环境, 用户会直接接入Web服务器,即kevin.com且其中不存在负载均衡机制。如果单一Web服务器发生故障,用户将无法接入该服务器。另,若多位用户同时访问该服务器,且其无法处理该负载,则会出现响应缓慢或者无法接入的情况
四层负载均衡
最为简单的负载均衡方式,将网络流量引导至多台服务器以使用四层(即传输层)负载均衡。这种方式会根据IP范围与端口进行用户流量转发(例如:有请求指向http://kevin.com/anything,则该流量将被转发至backend,即将用户请求转发至后端服务器的web-backend组。被选定的后端服务器将直接响应用户请求)web-backend中的全部服务器都应当拥有同样的内容, 否则用户可能会遭遇内容不一致问题
七层负载均衡
网络流量使用7层负载均衡意味着均衡器能够根据用户的请求内容将请求转发至不同后端服务器。这种方式允许在同一域名及端口上运行多套Web应用服务器。例如:用户向kevin.com/blog发送请求,则会被转发至blog后端,其包含一组运行有同一blog应用的服务器。其它请求则会被转发至web-backend,其负责运行其它应用。总的来说,它可以根据“IP+端口”的方式进行负载分流,还可以根据网站的URL、访问域名、浏览器类别、语言等决定负载均衡的策略
三、Nginx、LVS、Haproxy对比
|
Nginx(七层代理) |
LVS(四层代理) |
Haproxy(四层、七层) |
优势 |
1.跨平台性; 2.配置简单,容易上手; 3.非阻塞、高并发连接; 4.事件驱动:通信机制采用 epoll 模型,支持更大的并发连接 Master/Worker 结构; 5.内存消耗小; 6.内置的健康检查功能; 7.支持 GZIP 压缩; 8.稳定性高:用于反向代理,宕机的概率微乎其微; 9.会话保持:通过调度算法实现; 10.动静分离:基于location匹配正则;
|
1.抗负载能力强,强大的四层代理,媲美F5硬件的四层代理; 2.对内存和 cpu 资源消耗比较低; 3.配置性比较低; 4.工作稳定,自身有完整的双机热备方案如 LVS+Keepalived; 5.无流量,LVS 只分发请求,而流量并不从它本身出去,这点保证了均衡器 IO 的性能不会受到大流量的影响。 6.会话保持; |
1.支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。 2.基于TCP协议的负载效率高于Nginx; 3.负载均衡策略非常多; 4.动静分离:支持acl规则匹配; 5.高效稳定; 6.节点健康检查:支持多种方式检测,如端口、url;
|
劣势 |
1.适用性低:仅能支 持http、https 和 Email 协议,这样就在适用范围上面小些; 2.对后端服务器的健康检查,只支持通过端口来检测,不支持通过 ur l来检测; 3.不支持 Session 的直接保持,但能通过 ip_hash 来解决; 4.不适用于高负载量的并发集群; |
1.健康检查:无法检查后端节点的健康情况; 2.动静分离:不支持正则,无法区分请求; 3.实现比较麻烦; 4.网络环境依赖性较大; |
1.扩展性差:添加新功能很费劲,对不断扩展的新业务,haproxy很难应对; 2.在四层代理时,仅支持tcp协议的代理; |
总结:
- 大型网站架构:对性能有严格要求的时候可以使用lvs或者硬件F5,单从负载均衡的角度来说,lvs也许会成为主流,更适合现在大型的互联网公司;
- 中型网站架构:对于页面分离请求由明确规定,并且性能有严格要求时,可以使用haproxy
- 中小型网站架构:比如日访问量小于1000万,需要进行高并发的网站或者对网络不太严格的时候,可以使用nginx
Haproxy配置文件讲解
- global:全局配置区域参数是进程级的,通常是和操作系统相关。这些参数一般只设置一次,如果配置无误,就不需要再次进行修改
- defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
- frontend:处理请求的虚拟节点,Frontend可以将匹配到本地区域的请求交给下边的backend
- backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
配置文件样例: