HAProxy必知必会

什么是HAProxy

HAProxy是一款提供高可用性、负载均衡以及基于TCP和HTTP应用的高性能代理。典型的用于作为MySQL的负载均衡,还可以用于保持Seesion会话的Http应用,甚至还可以用于自定义的API网关。

实现原理

前端 (frontend)

用于定义需要监听的sockets(套接字)以及接受客户端的连接。

控制列表(ACL Access Control Lists)

通过acl定义frontend的请求如何转发给后端的服务器。

后端(backend)

用于定义一组服务器,代理将客户端的请求转发到这些服务器。

健康检查

HAProxy可以定时对后端的服务器进行健康状态检查。

高可用性

HAProxy通过多种策略算法对后端服务进行负载均衡,保证后端服务的高可用性。常见的策略有:
1. roundrobin 轮询算法,可以支持权重,支持运行时调整权重。
2. static-rr 基于权重的轮询,不支持运行时调整权重。
3. leastconn 适用于长连接的会话,将新情求转发至后端连接数最少的服务。
4. first 顺序算法,按照服务器id最少的负载,最大连接已满,就请求至下一个服务,必须设置maxconn参数,否则无效。
5. source 将请求的原地址进行hash运算,根据后端服务权重转发指定的服务器。常用与五cookie功能的基于TCP协议的负载均衡。
6. uri 对问号之前的uri进行hash路由,加上服务器权重,使得同一个uri总是路由到相同的服务器。仅仅用于Http后端服务场景。
7. uri_param 根据Http GET请求的参数,即问号之后的参数,加上服务器权重进行路由。设置了check_post参数才会检查post请求。
8. hdr<name> 查找Http Header<name>请求头信息并路由。相当于ACL的hdr函数,请求头不区分大小写。
9. random 通过一致性hash函数随机到一台服务器,可以同时采用服务器权重。常用于大量后端服务或者添加删除频繁的场景。hash-balance-factor参数可进一步提升在响应时间经常变化场景下的公平性。
10. rdp-cookie(name) 根据cookie(name)进行哈希,适用于持久化请求,将同一个用户或者同一个session路由到同一台服务器。如果没有cookie,默认采用roundrobin。服务器权重在此场景不起作用。

但HAProxy服务自身的可用性是如何保证的呢?你想想,这么请求都是通过HAProxy负责转发,万一HAProxy挂掉了呢?所以针对HAProxy本身,也是有高可用的需求。常用的方案是使用Keeplived实现。首先设置内网VIP(Virtual IP/Floating IP),提供对外的服务,Keeplived服务对每一个master和slave进行心跳检测,发现master挂掉了话,会通过ARP协议更新VIP对应的MAC地址。这里有一张图,可以很清晰的了解整个过程。

how floating ip working

高性能

HAProxy是一个单线程,事件驱动,基于优先级调度的高速IO层的非阻塞引擎。它从设计之初就考虑到了数据转发,其架构进行了优化,使其用尽可能少的操作可以快速移动数据。它实现了一个分层模型,在每一个级别提供旁路机制,确保数据除非必要,否则不需要转发到更高的级别。最后发现处理时间的花费,大约85%在内核,15%在HAProxy。

常用配置

代理服务名称的正则表达式为[a-zA-Z0-9-_.:]

为什么选择HAProxy

还有一些其他的选择,比如:
1. Nginx : 实际上Nginx已经成为第二个事实上标准的Http服务器。
2. LVS 是工作在Linux内核的第四层网络上,基于包的负载均衡服务。
3. Varnish是一个智能缓存反向代理,可能是最好的Web应用加速器。

将这些常用的服务进行对比,看看为什么没有选择它们。

特点 Nginx LVS Varnish HAProxy 备注
10K Problem 1w并发
TCP load balancer/TCP Proxy
UDP load balancer
Http load balancer
Https load balancer
Http Server/Web Server
Cache Server/Cache Proxy 缓存代理
Http Reverse Proxy/Gateway 反向代理
Sticky Sessions 会话保持
load balancing algorithms 4 9 负载均衡策略
health check 健康检查
Http Proxy 正向代理 Squid

HAProxy最佳实践

官方发布了PPT介绍HAProxy主要功能,非常清楚的介绍了HAProxy最佳实践

参考链接

  1. HAProxy用法详解 全网最详细中文文档
  2. 谈一谈使用 HAProxy 构建 API 网关服务的思路
  3. haproxy configuation balance
  4. haproxy intro
  5. Introduction to HAProxy ACLs
  6. Quick introduction to load balancing and load balancers
  7. How To Configure MySQL Group Replication on Ubuntu 16.04
  8. How To Use HAProxy As A Layer 4 Load Balancer for WordPress Application Servers on Ubuntu 14.04
  9. An Introduction to HAProxy and Load Balancing Concepts
  10. 虚拟IP和IP漂移
  11. Floating IP Resources
  12. How To Set Up Highly Available Web Servers with Keepalived and Floating IPs on Ubuntu 14.04
  13. HAProxy和负载均衡概念介绍
  14. Haproxy best practice
  15. HAProxy 最佳实践笔记
  16. 使用 Haproxy + Keepalived 构建基于 Docker 的高可用负载均衡服务(一)
  17. How to configure floating IP on Ubuntu

发表评论

电子邮件地址不会被公开。 必填项已用*标注