1. 基本概念
一种高效、可靠、免费的高可用及负载均衡软件,非常适合于高负载站点的七层数据请求。客户端通过Haproxy代理服务器获得站点页面,而代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器
实现了一种事件驱动、单一进程模型,能支持非常大的并发连接数
同一客户端访问服务器,Haproxy保持回话的三种方案:
- Haproxy将客户端ip进行Hash计算并保存,由此确保相同IP访问时被转发到同一真实服务器上。
- Haproxy依靠真实服务器发送给客户端的cookie信息进行回话保持。
- Haproxy保存真实服务器的session及服务器标识,实现会话保持功能。
2. 负载均衡类型
- 七层应用代理:Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。可用于HTTP代理或https代理。
2.1 无负载均衡
简单的无负载均衡Web应用环境, 用户会直接接入Web服务器,即kevin.com且其中不存在负载均衡机制。如果单一Web服务器发生故障,用户将无法接入该服务器。另,若多位用户同时访问该服务器,且其无法处理该负载,则会出现响应缓慢或者无法接入的情况
2.2 四层负载均衡
最为简单的负载均衡方式,将网络流量引导至多台服务器以使用四层(即传输层)负载均衡。这种方式会根据IP范围与端口进行用户流量转发(例如:有请求指向http://kevin.com/anything,则该流量将被转发至backend,即将用户请求转发至后端服务器的web-backend组。被选定的后端服务器将直接响应用户请求)
web-backend中的全部服务器都应当拥有同样的内容, 否则用户可能会遭遇内容不一致问题
2.3 七层负载均衡
网络流量使用7层负载均衡意味着均衡器能够根据用户的请求内容将请求转发至不同后端服务器。这种方式允许在同一域名及端口上运行多套Web应用服务器。例如:用户向kevin.com/blog发送请求,则会被转发至blog后端,其包含一组运行有同一blog应用的服务器。其它请求则会被转发至web-backend,其负责运行其它应用。
总的来说,它可以根据“IP+端口”的方式进行负载分流,还可以根据网站的URL、访问域名、浏览器类别、语言等决定负载均衡的策略
3. HAproxy配置文件详解
HAproxy配置中分成五部分内容,分别如下:
- global: 设置全局配置参数,属于进程的配置,通常是和操作系统相关。
- defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件;
- frontend:接收请求的前端虚拟节点,Frontend可以更加规则直接指定具体使用后端的backend;
- backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
- Listen :frontend和backend的组合体。
配置文件详解:
- global:全局配置区域参数是进程级的,通常是和操作系统相关。这些参数一般只设置一次,如果配置无误,就不需要再次进行修改
- defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
- frontend:处理请求的虚拟节点,Frontend可以将匹配到本地区域的请求交给下边的backend
- backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器;
配置文件样例: