一、haproxy简介
haproxy是一个提供高可用性,负载均衡的应用代理,支持的协议有TCP,HTTP,并且支持虚拟主机,特别适用于那些负载量大的web应用,这些应用通常需要会话保持或者七层处理,HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
haproxy目前最新的版本是1.4系列的,提供了很多比较1.3的新的特性:
1.支持客户端侧的长链接(client-side keep-alive)
2.支持TCP加速(TCP speedups)
3.支持响应池(response buffering)
4.支持RDP协议
5.支持基于源的粘性(source-based stickiness)
6.有更好的统计数据接口(a much better stats interfaces)
7.有更详细的健康状态检测机制(more verbose health checks)
8.有基于流量的健康评估机制(traffic-based health)
9.支持HTTP认证
10.服务器管理命令行接口(server management from the CLI)
11.基于ACL的持久性(ACL-based persistence)
支持的平台以及OS
x86、x86_64、Alpha、SPARC、MIPS及PARISC平台上的Linux 2.4;
x86、x86_64、ARM (ixp425)及PPC64平台上的Linux2.6;
UltraSPARC 2和3上的Sloaris 8/9;
Opteron和UltraSPARC平台上的Solaris 10;
x86平台上的FreeBSD 4.1-8;
i386, amd64, macppc, alpha, sparc64和VAX平台上的OpenBSD 3.1-current;
二、haproxy的性能
1.haproxy使用单进程,事件驱动模型降低了上下午切换的开销及内存的占用
2.O(1)事件查看器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测
3.单缓冲机制,不会复制任何数据,节约CPU时钟周期
4.可以实现零复制转发,在Linux kernel 3.5以上还支持零复制启动
5.MRU内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长
6.采用树型存储
7.大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等
三、配置haproxy
1.配置文件格式:global配置段,用于设定全局配置参数,proxy配置段,包括:defaults,listen,fronted,backend
2.时间格式:一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀:
us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分钟(minutes);
h:小时(hours);
d: 天(days)