Haproxy简介
Haproxy是一个使用C语言编写的,可靠的、高性能的负载均衡软件,也是一种免费、快速且可靠的解决方案,可为基于TCP(第四层)和HTTP(第七层)的应用程序提供高可用负载均衡,特别适用于流量非常高也就是负载特别大的Web 站,完全可以支持数以万计的并发连接。这些 站站点通常需要会话保持或七层处理。新型的大型互联 公司会采用Haproxy+keepalived架构搭建高性能Web群集,能够支持千万级并发量。
Haproxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。同时结合了一个快速的I/O层与基于优先级的调度程序。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。单个进程可以运行多个实例,而且在单个进程中,可以配置300000个不同的代理并保持良好的运行。因此,通常不需要为所有实例启动多个进程。包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名 站,及亚马逊 络服务系统都使用了Haproxy。
Haproxy一旦启动,会做三件事情:
· 处理客户端传入的连接请求;
· 周期性地检查后端服务器的状态(称为健康检查);
· 与其他Haproxy节点交换信息。
Haproxy高性能负载均衡主要优点:
□ Haproxy在负载均衡速度和并发处理上 是优于Nginx
□ Haproxy支持虚拟主机,可以工作在4、7层;
□ 能够补充Nginx的一些缺点,比如Session的保持、Cookie的引导等工作;
□ 支持url检测后端的服务器的状态;
□ Haproxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
□支持很多负载均衡算法,Round-robin(轮询)、Weight-round-robin(加权轮询)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
四层与七层负载均衡的主要区别:
2:haproxy代理服务配置

大家可以搭建 haproxy+keepalived 这种高性能Web群集架构,目前比较实用的。
配置文件中的具体参数:
1、global部分
global部分的参数通常与操作系统有关,只需设置一次。配置说明如下:
· log: 日志配置,可设置rsyslog服务地址、日志设备、日志级别等。
· chroot: Haproxy的工作目录。
· pidfile: PID文件路径。
· maxconn: 每个进程可接受的最大并发连接数。
· user: 运行Haproxy的用户,可设置用户名或uid。
· group: 运行Haproxy的组,可设置组名或gid。
· nbproc: 启动Haproxy时创建的进程数,默认只启动一个进程。
· daemon: 以后台形式运行Haproxy,默认启用。
2、defaults部分
配置说明如下:
· mode: 设置实例的运行模式:tcp、http、health,默认是http。
· log: 设置启用的日志配置,默认是global。
· maxconn: 最大并发连接数。
· retries: 设置连接后端服务器时失败重试的次数,默认值是3。
· timeout: 超时时间,单位毫秒,可以重复出现,定义时以“timeout”关键字开始且另起一行。常用选项如下:
http-request:HTTP请求的超时时间;
queue:队列的超时时间;
connect:成功连接后端服务器的超时时间;
client:客户端发送数据的超时时间;
server:后端服务器响应数据的超时时间;
http-keep-alive:持久连接的超时时间;
check:心跳检测的超时时间。
· option: 定义选项,可以出现多次,每配置一个选项值,则需要另起一行,以“option”开始。
常用选项如下:
httplog:启用日志记录HTTP请求;
dontlognull:不记录健康检查的日志信息;
http-server-close:收到后端响应后,关闭连接,但是不会关闭客户端与HAProxy的连接;
forwardfor:启用X-Forwarded-For,将客户端的真实IP写入其中;
redispatch:在连接失败的情况下启用或禁用会话重新分发,默认值是1。
3、frontend部分
常用选项如下:
· acl: 定义ACL规则;
· use_backend: 指定直接使用的后端(需要先在backend部分定义),一般与ACL配合使用;
· default_backend: 指定默认后端(需要先在backend部分定义),在use_backend规则不匹配时使用。
4、backend部分
常用选项如下:
· balance: 指定调度算法。可以是roundrobin、static-rr、leastconn、first、source、uri、url_param、hdr()、random、rdp-cookie、rdp-cookie();
· server: 定义后端真实服务器
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!