HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动**, **单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址响应。
一般用于虚拟ip地址的方式,外部对虚拟ip地址请求,负载均衡接收后分配给后端实际的ip地址响应。
在三层负载均衡的基础上,用ip+port接收请求,在转发到对应的机器上。
产品大概有:F5,lvs,nginx,haproxy......
根据虚拟的url或者ip,主机名接收请求,在转发到相应的处理服务器上。
产品大概有:haproxy,nginx,apache,mysql proxy......
haproxy官方帮助文档:https://cbonte.github.io/haproxy-dconv/
下载安装包
haproxy源码包下载网站地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
使用xftp传到本机
解压并安装
haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global
,defaults
,frontend
,backend
,listen
一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀
us
: 微秒(microseconds),即1/1000000秒;ms
: 毫秒(milliseconds),即1/1000秒;s
: 秒(seconds);m
: 分钟(minutes);h
:小时(hours);d
: 天(days);通常主要定义全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关。
用于设置配置默认参数,这些参数可以被用到frontend,backend,listen组件。
在此部分中设置的参数值,默认会自动引用到下面的frontend、backend、listen部分中。如果某些参数属于公用的配置,只需要在defaults部分添加一次即可。而如果frontend、backend、listen部分也配置了与defaults部分一样的参数,defaults部分参数对应的值自动被覆盖。
mode http:设置haproxy的运行模式,有三种{http|tcp|health}。注意:如果haproxy中还要使用4层的应用(mode tcp)的话,不建议在此定义haproxy的运行模式。
log global:设置日志继承全局配置段的设置。
option httplog:表示开始打开记录http请求的日志功能。
option dontlognull:如果产生了一个空连接,那这个空连接的日志将不会记录。
option http-server-close:打开http协议中服务器端关闭功能,使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录。
retries 3:向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用。
option abortonclose:当haproxy负载很高时,自动结束掉当前队列处理比较久的链接。
timout http-request 10s:客户端发送http请求的超时时间。
timeout queue 1m:当上游服务器在高负载响应haproxy时,会把haproxy发送来的请求放进一个队列中。timeout queue定义放入这个队列的超时时间。
timeout connect 5s:haproxy与后端服务器连接超时时间,如果在同一个局域网可设置较小的时间。
timeout client 1m:定义客户端与haproxy连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间。
timeout server 1m:定义haproxy与上游服务器非活动连接的超时时间。
timeout http-keep-alive 10s:设置新的http请求连接建立的最大超时时间,时间较短时可以尽快释放出资源,节约资源。
timeout check 10s:健康检测的时间的最大超时时间。
maxconn 3000:最大并发连接数。
contimeout 5000:设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容。
clitimeout 3000:设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容。
srvtimeout 3000:设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容。
frontend
是在haproxy 1.3版本以后才引入的一个组件,同时引入的还有backend
组件。通过引入这些组件,在很大程度上简化了haproxy配置文件的复杂性。forntend
可以根据ACL规则直接指定要使用的后端backend
。
用来定义后端服务集群的配置,真实服务器,一个Backend对应一个或者多个实体服务器。
常常用于状态页面监控,以及后端server检查,是Fronted和backend的组合体。
修改haproxy.conf
在haproxy.conf文件中增加如下日志配置,
defaults下面增加日志相关的配置:
日志的级别为local0~local7,
另外16~23保留为本地使用:
级别 | 代码 | 描述 |
---|---|---|
energ | 0 | 系统不可用 |
alert | 1 | 必须马上采取行动的事件 |
crit | 2 | 关键的事件 |
err | 3 | 错误事件 |
warning | 4 | 警告事件 |
notice | 5 | 普通但重要的事件 |
info | 6 | 有用的信息 |
debug | 7 | 调试信息 |
修改系统日志配置
vim /etc/rsyslog.conf
指定日志文件haproxy.log保存的位置,
haproxy.log会自动生成:
由于haproxy的日志是用udp传输的,所以要启用rsyslog的udp监听。
配置rsyslog的主配置文件,开启远程日志
参数说明:
重启rsyslog服务
重启haproxy服务